Plone, Drupal, Moodle and ATutor

I’m overdue for an update here on what I’ve been working on.  My current project is a web application for collaboratively sharing, critiquing and improving question items for homeworks and quizzes. Basically a wiki question bank, but more socially-oriented.

In my last post, I was working on Plone and the ECQuiz module of eduComponents.  After a few months I abandoned Plone and never looked back. Plone’s going through a big transition right now and it’s hard to be a newcomer to its scene.  I wish Plone and eduComponents developers well.

I switched my platform to Drupal and its Quiz module. Drupal has an amazing community.  It’s hard to measure a community, but a handy data point is that the Drupal group on Facebook has 3500 members, compared to Plone’s 500.  This Quiz module has an active forum, an IRC channel, and a longish history.

While the Quiz community is strong, its design is lacking for my purposes.  It began 3 years ago as a simple module and has been pulled and contorted over the years to suit different needs.  This is arguably the best way for an open source module to evolve.  Thanks to big contributions from Matt Butcher, the module got some big improvements in Quiz 3.0.  For example, there is now an object-oriented type system for question types so new ones can be added more easily.  (Unfortunately, Drupal data schemas don’t have inheritance like PHP objects do so data properties of the base class have to be included in each subclass.  Unless someone wants to hack around that.)  And now Sivaji is making yet more improvements for Quiz 4.x, as part of his winning GSoC proposal.  Quiz 4.0 will be a polished set of improvements at the end of this summer.

I’ve been exploring the potential for Quiz to take a leap forward by drawing in code from PHP-based learning management systems.  I began with Moodle and hammered its import/export code into Quiz to allow it to handle many more formats.  I was happy having materialized the possibility for re-use in open source, but overall pretty turned off by Moodle’s spaghetti codebase.  Maybe if you’re a longtime Moodle developer it all seems clean and clear, but that wasn’t my experience.  So I’ve kept looking.

ATutor looks promising.  It’s a leaner codebase and looks so far to be a clean design.  It also has much better support for standards, which is important for my question bank in order to interoperate with other systems.  After skimming the source code I realized I would need the db schemas to wrap my head around it so I installed the whole thing on my laptop.  Wow, that was easy.  I just moved the folder within my MAMP htdocs, navigated to it in my browser, and the rest was clicking through web forms.  (There was one step where I had to make a directory manually, but the directions were explicit enough for anybody.)  Thanks ATutor developers, and Happy Canada Day.

I may post again with an assessment.  Please reply in the comments if you’d like to hear this (and why would also help).

Plone tips

I’ve chosen Plone for a web application I’m working to develop, a collaborative site for educational assessment materials.  I have years of experience with PHP/LAMP and Java, but am pretty new to Python and very new to Plone.

As such, I’ve been having to figure out a lot along the way and I thought I should share some of what I’ve learned to save others the trouble.  Plone 3.2 introduced some big improvements to the Plone build system recently that make it much easier to get started with and that aren’t in any books yet.  (My copy of Professional Plone Development by Martin Aspeli covers Plone 3, but not 3.2. Plone’s doc on how to upgrade to 3.2 only helped a little.  )

The PSU WebLion wiki has been very helpful.  They have a great description of what a Buildout is, among other helpful info.  That’s where I found the this blog entry on building out with Plone 3.2.x, which now packages Plone as Python eggs.

Here’s a minimal buildout procedure:

$ mkdir plone3.2_buildout
$ cd plone3.2_buildout
$ wget*checkout*/zc.buildout/trunk/bootstrap/
$ cat > buildout.cfg
extends =
versions = versions
find-links =
parts = 

recipe = plone.recipe.zope2install
url = ${versions:zope2-url}
fake-zope-eggs = true

recipe = plone.recipe.zope2instance
zope2-location = ${zope2:location}
user = admin:admin
http-address = 8080
eggs = 
$ python2.4
$ bin/buildout


For any other Plone products you use, check to see if they’re in Pypi.  If so, you can just add them to the list of eggs in the instance.  If your favorite product isn’t in egg form, consider nudging the developers. Plone recommends all Products become eggs and it’s easy to do. I know hardly anything about Plone and was able to convert the ECQuiz product to an egg.  If you want that egg you can just add "Products.ECQuiz" under "Plone" in your instance:eggs list. (Tip for converters:  if you get "unbound prefix" from configure.zcml you probably need this line,

    xmlns:genericsetup="" )

I’m also making edits to the ECQuiz code so it’s a little more complicated, but only barely.  I keep the code in src/ and I added the buildout.eggtractor extension to my buildout.cfg which scans the src directory for product eggs and automatically adds the appropriate values to the buildout.  Add it like so,

  extends =

  versions = versions


  extensions =

If you get, "Error: Missing option: buildout:develop" you also need a "develop = " option to [buildout].  For more on buildout, try the Buildout Quick Reference card.

Now let’s say you want to check your new site into Subversion.  (This tip I got from Martin Aspeli’s slideshow on Extending and Customizing Plone 3.)  You don’t want to check your whole directory in because much of that is built out automatically.  Other developers don’t need it and likely won’t even work on their system because much of what is built out contains hard-coded paths to other files and executables.

So before checking all the files within your buildout, update the directory’s svn:ignore property to omit the stuff that doesn’t need to go into version control.  In your buildout directory run,

$ svn propset svn:ignore '
> eggs
> develop-eggs
> bin
> var
> parts
> .installed.cfg' .  # note period for current dir
$ svn add products buildout.cfg src README.txt
$ svn commit

Now someone else can check out that code and run "python" to generate the bin directory and then "bin/buildout’ to build out all the eggs and code.

If you’re building more than one Plone site, you can save disk space and unnecessary downloads by configuring your Buildout to use a shared directory.

$ mkdir -p ~/.buildout/downloads
$ mkdir -p ~/.buildout/eggs
$ cat > ~/.buildout/default.cfg
  eggs-directory = ~/.buildout/eggs

  download-cache = ~/.buildout/downloads

That’s all I got for now.  I hope that’s helpful.

Pasteur’s and Edison’s Quadrants

If you’ve been to an plenary session or keynote on education research chances are you’ve heard of Pasteur’s Quadrant.  It’s the idea that basic science (e.g., Bohr) and applied science (e.g., Edison) can be brought together to have significant impact on society, as exemplified in Pasteur’s prodigious contributions. Which quadrant should education research target? Pasteur’s Quadrant was articulated (and I believe originated) in the book of the same name by Donald Stokes in 1997. Stokes was a professor of politics and public affairs and argued for use-inspired basic research as an important target of public funds. My interest is more in research than public policy and I haven’t read the book. If you’re interested, but the publisher’s summary gives a good summary of the public policy thesis and the transitions in government research funding that it spoke to.


Education research, to my eyes, is still finding and defining itself. After Dewey, the greatest advances were by the psychologists. That would be “basic” research in education. While we learned a lot about how people learn, little of it made it into classrooms. Other education research was unscientific, with anthropological or post-modernistic perspectives. There wasn’t much education science and the little that there was was quite basic. The No Child Left Behind act shook this all up. (Quick poll: do you pronounce NCLB as en-see-el-bee or nickleby? I met someone recently who calls it nickleby.) Part of the act formed the Institute for Educational Science within the Dept of Ed. “Educational Science,” now what does that mean? The first director of IES, Grover (Russ) Whitehurst, in a speech describing the mission of IES, cited Pasteur’s Quadrant. But he went further and called for IES to focus on Edison’s Quadrant. It’s worth a read. (I think this is fair use…)

One way of making this distinction is in the terms introduced in the infrequently read but oft cited 1997 book by Stokes, called Pasteur’s Quadrant – Basic Science and Technological Innovation. Stokes described three categories of research based on two binary dimensions: first, a quest for fundamental understanding, and second, a consideration of use. The work of the theoretical physicist, Niels Bohr, exemplifies the quadrant in which researchers search for fundamental knowledge, with little concern for application. The research of Louis Pasteur, whose studies of bacteriology were carried out at the behest of the French wine industry, characterizes the work of scientists who, like Bohr, search for fundamental knowledge, but unlike Bohr, select their questions and methods based on potential relevance to real world problems. The work of Thomas Edison, whose practical inventions define the 20th century, exemplifies the work of scientists whose stock and trade is problem solution. They cannibalize whatever basic and craft knowledge is available, and conduct fundamental research when necessary, with choices of action and investment driven by the goal of solving the problem at hand as quickly and efficiently as possible.

Considerations of Use
Low High
Quest for Fundamental Understanding Yes Pure Basic Research (Bohr) Use-Inspired Basic Research (Pasteur)
No Pure Applied Research(Edison)

Each of the scientific quadrants identified by Stokes is important to the common good. Those who argue for the value of basic research have no trouble finding examples of work inspired only by intellectual curiosity that turned out to be extremely practical. Bohrs’ work on quantum physics is a case in point. Without in any way diminishing the value of basic research, whether use-inspired or not, I want to argue for the importance of activities in Edison’s quadrant, particularly for topics in which there is a large distance between what the world needs and what realistically can be expected to flow from basic research, and for topics in which problem solutions are richly multivariate and contextual. Education is such an area: a field in which there is a gulf between the bench and the trench, and in which the trench is complicated by many players, settings, and circumstances. Choose what you consider to be the most exciting developments from basic research in Bohrs’ or Pasteur’s quadrants that are relevant to education. I’ll pick developments in cognitive neuroscience. Paint the rosiest scenario you dare for basic scientific progress in the topic you’ve chosen over the next 15 years. Then ask yourself what would need to be done to translate those imagined findings into applications that would have wide and powerful effects on education outcomes. I don’t know about you, but I’m not optimistic that the results of basic research, even if the findings are powerful, will flow directly and naturally into education. Goodness! Education hasn’t even incorporated into instruction what we know from basic research about the effects of massed versus distributed practice – and I learned about that in a psychology course I took in 1962. Yes, the world needs basic research in disciplines related to education, such as economics, psychology, and management. But education won’t be transformed by applications of research until someone engineers systems and approaches and packages that work in the settings in which they will be deployed. For my example of massed versus distributed practice, we need curricula that administrators will select and that teachers will follow that distributes and sequences content appropriately. Likewise, for other existing knowledge or new breakthroughs, we need effective delivery systems. The model that Edison provides of an invention factory that moves from inspiration through lab research to trials of effectiveness to promotion and finally to distribution and product support is particularly applicable to education. In summary, the Institute’s statutory mission, as well as the conceptual model I’ve just outlined, points the Institute toward applied research, Edison’s quadrant. I’ve labeled this chart, “Edison’s quadrant, mostly,” because I understand that it is important to nurture the development of basic knowledge related to education, particularly in areas in which other science agencies and major foundation’s aren’t involved. Thus, when resources permit, the Institute will support work that examines underlying process and mechanisms, and work that is initiated by the field. For instance, the President’s budget request for the Institute for fiscal year 04 includes a healthy amount of money for a field-initiated competition. In addition, many of our new funding programs that are squarely focused on application, such as our program in preschool curriculum evaluation, provide for grantees to carry out parallel research that examines underlying processes.

What do you think? I would love to hear your thoughts in the comments.  Here’s another quote that might inspire you, Nikola Tesla speaking of Edison:

If Edison had to find a needle in a haystack, he would proceed with the diligence of a bee to examine straw after straw until he found the object of his search… I was almost a sorry witness of his doings, knowing that just a little theory and calculation would have saved him 90 per cent of the labor…

Incidentally, searching online, I see Pasteur’s Quadrant cited in ICT, chemistry and even geology. (Evidently, there is such a thing as applied geology.) Try those links if you want to know more about Pasteur’s Quadrant generally. And by the suggestion of my colleague Andrea Forte during the OLI Symposium 2008, there’s a Wikipedia article. Please improve upon it as I only made it last night. 😉

MySQL with Python on Mac

This entry will be more technical than most, keying of the “open” and “research” more than “education”.

In an analysis I’m working on, I’m going to be munging the data all sorts of ways and the graphical statistics environment I’ve been using (JMP) is going to be painful for me to use. Particularly because it updates state and it’s hard to remember how I got there. I’ve had great success on a project recently using GNU Make to process the data from raw to beautiful and I want to try that here.

In my other project, the raw data is in XML so I got handy with Python and an XML processor. In this project, my raw data is in a MySQL database. I thought that would be as straightforward, but it hasn’t been. That may be due more to using a Mac this time around though (as opposed to Windows and Linux previously).

In any event, here is what I had to do to get the MySQL-python on my MacBook Pro. I hope this saves someone else the trouble. In the end, I made an .egg, so if you want to skip the rest you can just download that: MySQL_python-1.2.2-py2.5-macosx-10.5-i386.egg

First I had to get setuptools working. I noticed had two versions of Python installed, Leopard’s and MacPorts’, and decided to remove the MacPorts one to keep things clean. (Incidentally, I regret ever making use of MacPorts. I’ve much rather have built binaries ala Fink.) Once I had setuptools working I thought I could install the MySQL driver with simply,

easy_install MySQL-python

Unfortunately, that fails with a compile error,

In file included from /usr/local/mysql/include/mysql.h:47,                 from _mysql.c:40:
/usr/include/sys/types.h:92: error: duplicate ‘unsigned’
/usr/include/sys/types.h:92: error: two or more data types in declaration specifiers
error: Setup script exited with error: command 'gcc' failed with exit status 1

Fortunately I found a blog that provided a workaround,
Install MySQL server from
Download and unpack the MySQLdb package (download URL here)
Fix the path to mysql_config, either by editing (editing mysql_config.path value) or adding /usr/local/mysql/bin/ to your PATH. (i.e. export PATH=$PATH:/usr/local/mysql/bin/)
In the folder run python clean and python build

At this point you’ll probably get this error,

/usr/include/sys/types.h:92: error: duplicate ‘unsigned’/usr/include/sys/types.h:92: error: two or more data types in declaration specifiers

To get around this, edit _mysql.c to change

#define uint unsigned int

#define /* uint unsigned int */
Then build again. You’ll probably see this warning,

ld: warning in build/temp.macosx-10.5-i386-2.5/_mysql.o, file is not of required architecture
ld: warning in /usr/local/mysql/lib/libmysqlclient_r.dylib, file is not of required architecture
ld: warning in /usr/local/mysql/lib/libmygcc.a, file is not of required architecture

I ignored them and haven’t encountered any problems. I’m on a 32-bit Intel Mac though. If you’re on 64-bit, this blog post may be able to help.

Run sudo python install to install.

Then I ran this code to test. Once I knew it was working, I tried to find a way to share the binary. I was able to build a binary .egg with python bdist_egg, which made MySQL_python-1.2.2-py2.5-macosx-10.5-i386.egg

I’d like to upload it to the PyPi record, having registered and set up my .pypirc file, but I don’t have permission. After writing this, I will contact to package index owner, Andy Dustman, and see if he can include it. If he does, then the simple command I was expecting at first should work for 32-bit Mac users now on.

easy_install MySQL-python

And until then, this negligibly longer command should work,


Improvement study wrapping up (last chance!)

The current study on improving educational materials for math is wrapping up.  Soon we will be distributing the $400 in Amazon gift certificates.  As of yet, participation has been low and there are very few participants in the lottery, so your odds are good!  Remember that higher quality improvements and more accurate ratings earn more entries in the lottery.  Visit the experiment at the following link,

If you tried the link earlier and you had any trouble with it, please try again as there have been many revisions to the system.

Please invite other people you think would be interested in participating. Just can click this link to compose a prefilled mail message. Just address it, edit as you wish, and hit send. You can also subscribe to this blog if you’re interested in learning more about this and related research.

Choosing a wiki for collaborative curriculum design

Pittsburgh Science and Technology Academy is a groundbreaking new sci-tech magnet school opening in 2009. Among other innovative methods, they are keen on working with education and technology researchers to the latest research into their design and practice. They are designing a new school and integrated 4-year curriculum from the ground up, and as part of the CMU‘s PIER program I have had the opportunity to see the challenges and opportunities this affords. As an HCI researcher in collaboration technologies to support education, I have been particularly interested in how they can best support collaboration among teachers and administrators as they carefully design their curriculum to kick off in classrooms next Fall.

This morning I spoke with Stephen Pellathy, the Curriculum Coordinator for science, who has made some visits to my curriculum design course this semester to discuss their process. When he started, the curriculum was a Word document that got e-mailed around. Aware that wikis were much more supportive of collaboration, he set up a Google Sites wiki to hold the curriculum so that he and the teachers could easily write and revise it together.

He picked Google Sites initially because it was convenient and he knew it already, but he had been hearing of other options and wanted to decide on a long term platform soon before the content grew to a size that would be formidable to transfer. Through the conversation we hit upon these concerns:

  • Will the storage be enough after years of growth? Can it host video?
  • How time consuming is accounts management?
  • How hard is moving the content to another wiki if another becomes more appropriate?
  • How hard is it to integrate other documents like budget spreadsheets?
  • Can it differentiate between teacher and student access? On a per-page level?

There are comparisons of wikis for education on the web. (e.g. 1). Most take a focus on wikis for student learning. Here the concerns are on the teaching side. A big site for wiki-based curriculum is Curriki, but that is for open content, and hopes to facilitate collaboration on a large scale. That challenge is great and some believe it won’t work. I should write more on that at a future date, but right now I’ll restrict the focus to teachers and administrators collaborating within a school to develop a new curriculum. Basically, a recounting of key points from our conversation.

Google Sites
Currently they’re using Google Sites off a Gmail account. I think this gives 100MB storage. If they want to stick with Google Sites, they could set up a domain with Google Apps and get 10GB for shared storage. A private Google Video service is included, but will soon cost $10/user/year. Account management isn’t too difficult since there is a batch account manager. With the Premier level they offer single-sign-on.
Google Sites integrates pretty nicely with Google Docs, allowing you to embed spreadsheets.
One drawback is on portability. There’s no way to transfer your Google Site to another service or even download it as an archive. Another key drawback is it has only role-based and no page-level access controls. That means that to let someone edit any page on a site lets them edit every page on that site.

Another option he had heard of was MediaWiki, the software that runs Wikipedia. For most educational contexts this isn’t an option since it requires a server to host it, but in this case the person who suggested it also offered to host it. A key feature of MediaWiki is that it is open source, but that doesn’t matter much here in practice because no one has the skillset to be editing the code. It does mean that it has more community investment and there are many more tools to support it, such as plugins. But again, these require a level of technical skill that may be available.
One pretty advanced feature within the wiki software is its template system. This is used extensively in Wikipedia, such as for the info boxes on the right hand column of a page. These could be useful in curriculum design to maintain uniformity across documents. On the other hand, they could force constraints that may be stifling. Maybe it’s better to achieve uniformity through cultural norms and let people break out of them when they see fit.
While hosting MediaWiki yourself is a cost, it’s also a benefit to portability since you hold all the data. You can easily move it to another MediaWiki server and perhaps even other wikis if you find a conversion tool.

I suggested he consider a third option, PBwiki. I made a PBwiki when their service was just starting up and I’ve seen it grow into a really powerful and easy to use platform. The release of Google Sites gave them some hard competition, but their new 2.0 release seems to have made them stronger for it.
The key advantage of PBwiki for this school is page-level access controls. For example, teachers or administrators can draft a document with a smaller group before releasing it to view by students. MediaWiki has this but Google Sites doesn’t. This requires the Academic Silver package ($100/year).
Another key advantage is single-sign-on. They already have an authentication system for their current web site. This way a user only has to log in once and can go between the current web site and the new wiki. I don’t know whether MediaWiki offers this. Google Apps does but in my cursory research it looks a little wonky. This requires this Academic Platinum package ($1k/year). That’s pricy, but it’s within the budget and could pay for itself in time saved. The Platinum level also includes 5GB storage. Less than Google’s 10GB, but more than enough for curriculum documents. Hosting video would eat into that quickly, but that can easily be uploaded elsewhere and embedded on PBwiki pages. Same for spreadsheets, etc.
My favorite advantage of PBwiki is the ability to download your whole wiki as a ZIP archive. This mixes the hosting advantage of Google Sites with the “it’s your data” advantage of MediaWiki.

This is not by any means an exhaustive comparison of these three wiki platforms. I just wanted to write down and share the concerns and light research that came out of this phone call. They will probably decide on a platform within the next week. Please comment if you are interested in hearing more about their ultimate decision and the factors in it.

5th-grader keynote speaker for the Dallas Independent School District

Dalton Sherman, the 5th-grader keynote speaker for the Dallas Independent School District’s 2008 Back to School pep rally, gave this speech in front of 20,000 teachers. Watch their reactions, excitement and standing ovation over his powerful message: "Do YOU believe in me?"

Dallas ISD hosts the WMV file here but someone uploaded it to YouTube, which is what I’ve embedded here to reduce the load on Dallas ISD’s servers.  The summary above is from another upload of the video to a less popular service.

Results from study on open authoring

In September of last year I ran a web-based experiment in open authoring of educational materials. The goal was to learn about the quality of the materials that volunteers can produce and how that differs across their expertise. I’ve since published the results at the International Conference on Intelligent Tutoring Systems, but I’m also blogging about it as part of my goal to do my research in a more “open” way.

Here’s a short summary (abstract) of the paper:
Open collaborative authoring systems such as Wikipedia are growing in use and impact. How well does this model work for the development of educational resources? In particular, can volunteers contribute materials of sufficient quality? Could they create resources that meet students’ specific learning needs and engage their personal characteristics? Our experiment explored these questions using a novel web-based tool for authoring worked examples. Participants were professional teachers (math and non-math) and amateurs. Participants were randomly assigned to the basic tool, or to an enhanced version that prompted authors to create materials for a specific (fictitious) student. We find that while there are differences by teaching status, all three groups make contributions of worth and that targeting a specific student leads contributors to author materials with greater potential to engage students. The experiment suggests that community authoring of educational resources is a feasible model of development and can enable new levels of personalization.

For the full details, there is a version of the paper is available on my own web site and the official version is available from Springer.

Also, I am conducting a follow-up experiment now on how people are able to improve the materials from the first study.

Questions or comments are wholly welcome.

Welcome to ITS 2008 people

I just gave my talk today on Putting the World to Work for ITS and I included a link to this blog, which I intend to write in regularly about research in building scalable systems for intelligent tutoring and education technology in general. (You might also be interested in the paper on which the talk is based.)

You can subscribe through e-mail by entering your address in the box to the left or through RSS/Atom by clicking the orange box in the URL bar of your browser.