Category Archives: Content Management Systems

Future of Learning Content

If indeed Apple plans to announce not just more affordable textbook options for students, but also more interactive, immersive ebook experiences…

Forecasting next week’s Apple education event (Dan Moren and Lex Friedman for Macworld)

I’m still in catchup mode (was sick during the break), but it’s hard to let this pass. It’s exactly the kind of thing I like to blog about: wishful thinking and speculation about education. Sometimes, my crazy predictions are fairly accurate. But my pleasure at blogging these things has little to do with the predictions game. I’m no prospectivist. I just like to build wishlists.

In this case, I’ll try to make it short. But I’m having drift-off moments just thinking about the possibilities. I do have a lot to say about this but we’ll see how things go.

Overall, I agree with the three main predictions in that MacWorld piece: Apple might come out with eBook creation tools, office software, and desktop reading solutions. I’m interested in all of these and have been thinking about the implications.

That MacWorld piece, like most media coverage of textbooks, these days, talks about the weight of physical textbooks as a major issue. It’s a common refrain and large bookbags/backpacks have symbolized a key problem with “education”. Moren and Friedman finish up with a zinger about lecturing. Also a common complaint. In fact, I’ve been on the record (for a while) about issues with lecturing. Which is where I think more reflection might help.

For one thing, alternative models to lecturing can imply more than a quip about the entertainment value of teaching. Inside the teaching world, there’s a lot of talk about the notion that teaching is a lot more than providing access to content. There’s a huge difference between reading a book and taking a class. But it sounds like this message isn’t heard and that there’s a lot of misunderstanding about the role of teaching.

It’s quite likely that Apple’s announcement may make things worse.

I don’t like textbooks but I do use them. I’m not the only teacher who dislikes textbook while still using them. But I feel the need to justify myself. In fact, I’ve been on the record about this. So, in that context, I think improvements in textbooks may distract us from a bigger issue and even lead us in the wrong direction. By focusing even more on content-creation, we’re commodifying education. What’s more, we’re subsuming education to a publishing model. We all know how that’s going. What’s tragic, IMHO, is that textbook publishers themselves are going in the direction of magazines! If, ten years from now, people want to know when we went wrong with textbook publishing, it’ll probably be a good idea for them to trace back from now. In theory, magazine-style textbooks may make a lot of sense to those who perceive learning to be indissociable from content consumption. I personally consider these magazine-style textbooks to be the most egregious of aberrations because, in practice, learning is radically different from content consumption.

So… If, on Thursday, Apple ends up announcing deals with textbook publishers to make it easier for them to, say, create and distribute free ad-supported magazine-style textbooks, I’ll be going through a large range of very negative emotions. Coming out of it, I might perceive a silverlining in the fact that these things can fairly easily be subverted. I like this kind of technological subversion and it makes me quite enthusiastic.

In fact, I’ve had this thought about iAd producer (Apple’s tool for creating mobile ads). Never tried it but, when I heard about it, it sounded like something which could make it easy to produce interactive content outside of mobile advertising. I don’t think the tool itself is restricted to Apple’s iAd, but I could see how the company might use the same underlying technology to create some content-creation tool.

“But,” you say, “you just said that you think learning isn’t about content.” Quite so. I’m not saying that I think these tools should be the future of learning. But creating interactive content can be part of something wider, which does relate to learning.

The point isn’t that I don’t like content. The point is that I don’t think content should be the exclusive focus of learning. To me, allowing textbook publishers to push more magazine-style content more easily is going in the wrong direction. Allowing diverse people (including learners and teachers) to easily create interactive content might in fact be a step in the right direction. It’s nothing new, but it’s an interesting path.

In fact, despite my dislike of a content emphasis in learning, I’m quite interested in “learning objects”. In fact, I did a presentation about them during the Spirit of Inquiry conference at Concordia, a few years ago (PDF).

A neat (but Flash-based) example of a learning object was introduced to me during that same conference: Mouse Party. The production value is quite high, the learning content seems relatively high, and it’s easily accessible.

But it’s based on Flash.

Which leads me to another part of the issue: formats.

I personally try to avoid Flash as much as possible. While a large number of people have done amazing things with Flash, it’s my sincere (and humble) opinion that Flash’s time has come and gone. I do agree with Steve Jobs on this. Not out of fanboism (I’m no Apple fanboi), not because I have something against Adobe (I don’t), not because I have a vested interested in an alternative technology. I just think that mobile Flash isn’t going anywhere and that. Even on the desktop, I think Flash-free is the way to go. Never installed Flash on my desktop computer, since I bought it in July. I do run Chrome for the occasional Flash-only video. But Flash isn’t the only video format out there and I almost never come across interesting content which actually relies on something exclusive to Flash. Flash-based standalone apps (like Rdio and Machinarium) are a different issue as Flash was more of a development platform for them and they’re available as Flash-free apps on Apple’s own iOS.

I wouldn’t be surprised if Apple’s announcements had something to do with a platform for interactive content as an alternative to Adobe Flash. In fact, I’d be quite enthusiastic about that. Especially given Apple’s mobile emphasis. We might be getting further in “mobile computing for the rest of us”.

Part of this may be related to HTML5. I was quite enthusiastic when Tumult released its “Hype” HTML5-creation tool. I only used it to create an HTML5 version of my playfulness talk. But I enjoyed it and can see a lot of potential.

Especially in view of interactive content. It’s an old concept and there are many tools out there to create interactive content (from Apple’s own QuickTime to Microsoft PowerPoint). But the shift to interactive content has been slower than many people (including educational technologists) would have predicted. In other words, there’s still a lot to be done with interactive content. Especially if you think about multitouch-based mobile devices.

Which eventually brings me back to learning and teaching.

I don’t “teach naked”, I do use slides in class. In fact, my slides are mostly bullet points, something presentation specialists like to deride. Thing is, though, my slides aren’t really meant for presentation and, while they sure are “content”, I don’t really use them as such. Basically, I use them as a combination of cue cards, whiteboard, and coursenotes. Though I may sound defensive about this, I’m quite comfortable with my use of slides in the classroom.

Yet, I’ve been looking intently for other solutions.

For instance, I used to create outlines in OmniOutliner that I would then send to LaTeX to produce both slides and printable outlines (as PDFs). I’ve thought about using S5, but it doesn’t really fit in my workflow. So I end up creating Keynote files on my Mac, uploading them (as PowerPoint) before class, and using them in the classroom using my iPad. Not ideal, but rather convenient.

(Interestingly enough, the main thing I need to do today is create PowerPoint slides as ancillary material for a textbook.)

In all of these cases, the result isn’t really interactive. Sure, I could add buttons and interactive content to the slides. But the basic model is linear, not interactive. The reason I don’t feel bad about it is that my teaching is very interactive (the largest proportion of classtime is devoted to open discussions, even with 100-plus students). But I still wish I could have something more appropriate.

I have used other tools, especially whiteboarding and mindmapping ones. Basically, I elicit topics and themes from students and we discuss them in a semi-structured way. But flow remains an issue, both in terms of workflow and in terms of conversation flow.

So if Apple were to come up with tools making it easy to create interactive content, I might integrate them in my classroom work. A “killer feature” here is if interaction could be recorded during class and then uploaded as an interactive podcast (à la ProfCast).

Of course, content-creation tools might make a lot of sense outside the classroom. Not only could they help distribute the results of classroom interactions but they could help in creating learning material to be used ahead of class. These could include the aforementioned learning objects (like Mouse Party) as well as interactive quizzes (like Hot Potatoes) and even interactive textbooks (like Moglue) and educational apps (plenty of these in the App Store).

Which brings me back to textbooks, the alleged focus of this education event.

One of my main issues with textbooks, including online ones, is usability. I read pretty much everything online, including all the material for my courses (on my iPad) but I find CourseSmart and its ilk to be almost completely unusable. These online textbooks are, in my experience, much worse than scanned and OCRed versions of the same texts (in part because they don’t allow for offline access but also because they make navigation much more difficult than in GoodReader).

What I envision is an improvement over PDFs.

Part of the issue has to do with PDF itself. Despite all its benefits, Adobe’s “Portable Document Format” is the relic of a bygone era. Sure, it’s ubiquitous and can preserve formatting. It’s also easy to integrate in diverse tools. In fact, if I understand things correctly, PDF replaced Display PostScript as the basis for Quartz 2D, a core part of Mac OS X’s graphics rendering. But it doesn’t mean that it can’t be supplemented by something else.

Part of the improvement has to do with flexibility. Because of its emphasis on preserving print layouts, PDF tends to enforce print-based ideas. This is where EPUB is at a significant advantage. In a way, EPUB textbooks might be the first step away from the printed model.

From what I can gather, EPUB files are a bit like Web archives. Unlike PDFs, they can be reformatted at will, just like webpages can. In fact, iBooks and other EPUB readers (including Adobe’s, IIRC) allow for on-the-fly reformatting, which puts the reader in control of a much greater part of the reading experience. This is exactly the kind of thing publishers fail to grasp: readers, consumers, and users want more control on the experience. EPUB textbooks would thus be easier to read than PDFs.

EPUB is the basis for Apple’s iBooks and iBookstore and people seem to be assuming that Thursday’s announcement will be about iBooks. Makes sense and it’d be nice to see an improvement over iBooks. For one thing, it could support EPUB 3. There are conversion tools but, AFAICT, iBooks is stuck with EPUB 2.0. An advantage there is that EPUBs can possibly include scripts and interactivity. Which could make things quite interesting.

Interactive formats abound. In fact, PDFs can include some interactivity. But, as mentioned earlier, there’s a lot of room for improvement in interactive content. In part, creation tools could be “democratized”.

Which gets me thinking about recent discussions over the fate of HyperCard. While I understand John Gruber’s longstanding position, I find room for HyperCard-like tools. Like some others, I even had some hopes for ATX-based TileStack (an attempt to bring HyperCard stacks back to life, online). And I could see some HyperCard thinking in an alternative to both Flash and PDF.

“Huh?”, you ask?

Well, yes. It may sound strange but there’s something about HyperCard which could make sense in the longer term. Especially if we get away from the print model behind PDFs and the interaction model behind Flash. And learning objects might be the ideal context for this.

Part of this is about hyperlinking.  It’s no secret that HyperCard was among HTML precursors. As the part of HTML which we just take for granted, hyperlinking is among the most undervalued features of online content. Sure, we understand the value of sharing links on social networking systems. And there’s a lot to be said about bookmarking. In fact, I’ve been thinking about social bookmarking and I have a wishlist about sharing tools, somewhere. But I’m thinking about something much more basic: hyperlinking is one of the major differences between online and offline wriiting.

Think about the differences between, say, a Wikibook and a printed textbook. My guess is that most people would focus on the writing style, tone, copy-editing, breadth, reviewing process, etc. All of these are relevant. In fact, my sociology classes came up with variations on these as disadvantages of the Wikibook over printed textbooks. Prior to classroom discussion about these differences, however, I mentioned several advantages of the Wikibook:

  • Cover bases
  • Straightforward
  • Open Access
  • Editable
  • Linked

(Strangely enough, embedded content from iWork.com isn’t available and I can’t log into my iWork.com account. Maybe it has to do with Thursday’s announcement?)

That list of advantages is one I’ve been using since I started to use this Wikibook… excerpt for the last one. And this is one which hit me, recently, as being more important than the others.

So, in class, I talked about the value of links and it’s been on my mind quite a bit. Especially in view of textbooks. And critical thinking.

See, academic (and semi-academic) writing is based on references, citations, quotes. English-speaking academics are likely to be the people in the world of publishing who cite the most profusely. It’s not rare for a single paragraph of academic writing in English to contain ten citations or more, often stringed in parentheses (Smith 1999, 2005a, 2005b; Smith and Wesson 1943, 2010). And I’m not talking about Proust-style paragraphs either. I’m convinced that, with some quick searches, I could come up with a paragraph of academic writing which has less “narrative content” than citation.

Textbooks aren’t the most egregious example of what I’d consider over-citing. But they do rely on citations quite a bit. As I work more specifically on textbook content, I notice even more clearly the importance of citations. In fact, in my head, I started distinguishing some patterns in textbook content. For instance, there are sections which mostly contain direct explanations of key concepts while other sections focus on personal anecdotes from the authors or extended quotes from two sides of the debate. But one of the most obvious sections are summaries from key texts.

For instance (hypothetical example):

As Nora Smith explained in her 1968 study Coming Up with Something to Say, the concept of interpretation has a basis in cognition.

Smith (1968: 23) argued that Pierce’s interpretant had nothing to do with theatre.

These citations are less conspicuous than they’d be in peer-reviewed journals. But they’re a central part of textbook writing. One of their functions should be to allow readers (undergraduate students, mostly) to learn more about a topic. So, when a student wants to know more about Nora Smith’s reading of Pierce, she “just” have to locate Smith’s book, go to the right page, scan the text for the read for the name “Pierce”, and read the relevant paragraph. Nothing to it.

Compare this to, say, a blogpost. I only cite one text, here. But it’s linked instead of being merely cited. So readers can quickly know more about the context for what I’m discussing before going to the library.

Better yet, this other blogpost of mine is typical of what I’ve been calling a linkfest, a post containing a large number of links. Had I put citations instead of links, the “narrative” content of this post would be much less than the citations. Basically, the content was a list of contextualized links. Much textbook content is just like that.

In my experience, online textbooks are citation-heavy and take almost no benefit from linking. Oh, sure, some publisher may replace citations with links. But the result would still not be the same as writing meant for online reading because ex post facto link additions are quite different from link-enhanced writing. I’m not talking about technological determinism, here. I’m talking about appropriate tool use. Online texts can be quite different from printed ones and writing for an online context could benefit greatly from this difference.

In other words, I care less about what tools publishers are likely to use to create online textbooks than about a shift in the practice of online textbooks.

So, if Apple comes out with content-creation tools on Thursday (which sounds likely), here are some of my wishes:

  • Use of open standards like HTML5 and EPUB (possibly a combination of the two).
  • Completely cross-platform (should go without saying, but Apple’s track record isn’t that great, here).
  • Open Access.
  • Link library.
  • Voice support.
  • Mobile creation tools as powerful as desktop ones (more like GarageBand than like iWork).
  • HyperCard-style emphasis on hyperlinked structures (à la “mini-site” instead of web archives).
  • Focus on rich interaction (possibly based on the SproutCore web framework).
  • Replacement for iWeb (which is being killed along with MobileMe).
  • Ease creation of lecturecasts.
  • Deep integration with iTunes U.
  • Combination of document (à la Pages or Word), presentation (à la Keynote or PowerPoint), and standalone apps (à la The Elements or even Myst).
  • Full support for course management systems.
  • Integration of textbook material and ancillary material (including study guides, instructor manuals, testbanks, presentation files, interactive quizzes, glossaries, lesson plans, coursenotes, etc.).
  • Outlining support (more like OmniOutliner or even like OneNote than like Keynote or Pages).
  • Mindmapping support (unlikely, but would be cool).
  • Whiteboard support (both in-class and online).
  • Collaboration features (à la Adobe Connect).
  • Support for iCloud (almost a given, but it opens up interesting possibilities).
  • iWork integration (sounds likely, but still in my wishlist).
  • Embeddable content (à la iWork.com).
  • Stability, ease of use, and low-cost (i.e., not Adobe Flash or Acrobat).
  • Better support than Apple currently provides for podcast production and publishing.
  • More publisher support than for iBooks.
  • Geared toward normal users, including learners and educators.

The last three are probably where the problem lies. It’s likely that Apple has courted textbook publishers and may have convinced them that they should up their game with online textbooks. It’s clear to me that publishers risk to fall into oblivion if they don’t wake up to the potential of learning content. But I sure hope the announcement goes beyond an agreement with publishers.

Rumour has it that part of the announcement might have to do with bypassing state certification processes, in the US. That would be a big headline-grabber because the issue of state certification is something of wedge issue. Could be interesting, especially if it means free textbooks (though I sure hope they won’t be ad-supported). But that’s much less interesting than what could be done with learning content.

User-generated content” may be one of the core improvements in recent computing history, much of which is relevant for teaching. As fellow anthro Mike Wesch has said:

We’ll  need to rethink a few things…

And Wesch sure has been thinking about learning.

Problem is, publishers and “user-generated content” don’t go well together. I’m guessing that it’s part of the reason for Apple’s insufficient support for “user-generated content”. For better or worse, Apple primarily perceives its users as consumers. In some cases, Apple sides with consumers to make publishers change their tune. In other cases, it seems to be conspiring with publishers against consumers. But in most cases, Apple fails to see its core users as content producers. In the “collective mind of Apple”, the “quality content” that people should care about is produced by professionals. What normal users do isn’t really “content”. iTunes U isn’t an exception, those of us who give lectures aren’t Apple’s core users (even though the education market as a whole has traditionally being an important part of Apple’s business). The fact that Apple courts us underlines the notion that we, teachers and publishers (i.e. non-students), are the ones creating the content. In other words, Apple supports the old model of publishing along with the old model of education. Of course, they’re far from alone in this obsolete mindframe. But they happen to have several of the tools which could be useful in rethinking education.

Thursday’s events is likely to focus on textbooks. But much more is needed to shift the balance between publishers and learners. Including a major evolution in podcasting.

Podcasting is especially relevant, here. I’ve often thought about what Apple could do to enhance podcasting for learning. Way beyond iTunes U. Into something much more interactive. And I don’t just mean “interactive content” which can be manipulated seamless using multitouch gestures. I’m thinking about the back-and-forth of learning and teaching, the conversational model of interactivity which clearly distinguishes courses from mere content.

Using WordPress as a Syllabus Database: Learning is Fun

(More screenshots in a previous post on this blog.)

Worked on a WordPress project all night, the night before last. Was able to put together a preliminary version of a syllabus database that I’ve been meaning to build for an academic association with which I’m working.

There are some remaining bugs to solve but, I must say, I’m rather pleased with the results so far. In fact, I’ve been able to solve the most obvious bugs rather quickly, last night.

More importantly, I’ve learnt a lot. And I think I can build a lot of things on top of that learning experience.

Part of the inspiration comes from Kyle Jones’s blogpost about a “staff directory”. In addition, Justin Tadlock has had a large (and positive) impact on my learning process, either through his WordPress-related blogposts about custom post types and his work on the Hybrid Theme (especially through the amazing support forums). Not to mention WordCamp Montrealofficial documentationplugin pagestutorials, and a lot of forum– and blogposts about diverse things surrounding WordPress (including CSS).

I got a lot of indirect help and I wouldn’t have been able to go very far in my project without that help. But, basically, it’s been a learning experience for me as an individual. I’m sure more skilled people would have been able to whip this up in no time.

Thing is, it’s been fun. Close to Csíkszentmihályi’s notion of “flow”. (Philippe’s a friend of mine who did research on flow and videogames. He’s the one who first introduced me to “flow”, in this sense.)

So, how did I achieve this? Well, through both plugins and theme files.

To create this database, I’ve originally been using three plugins from More Plugins: More Fields, More Taxonomies, and More Types. Had also done so in my previous attempt at a content database. At the time, these plugins helped me in several ways. But, with the current WordPress release (3.2.1), the current versions of these plugins (2.0.5.2, 1.0.1, and 1.1.1b1, respectively) are a bit buggy.

In fact, I ended up coding my custom taxonomies “from scratch”, after running into apparent problems with the More Taxonomies plugin. Eventually did the same thing with my “Syllabus” post type, replacing More Types. Wasn’t very difficult and it solved some rather tricky bugs.

Naïvely, I thought that the plugins’ export function would actually create that code, so I’d be able to put it in my own files and get rid of that plugin. But it’s not the case. Doh! Unfortunately, the support forums don’t seem so helpful either, with many questions left unanswered. So I wouldn’t really recommend these plugins apart from their pedagogical value.

The plugins were useful in helping me get around some “conceptual” issues, but it seems safer and more practical to code things from scratch, at least with taxonomies and custom post types. For “custom metaboxes”, I’m not sure I’ll have as easy a time replacing More Fields as I did replacing More Taxonomies and More Types. (More Fields helps create custom fields in the post editing interface.)

Besides the More Plugins, I’m only using two other plugins: Jonathan Christopher’s Attachments and the very versatile google doc embedder (gde) by Kevin Davis.

Attachments provides an easy way to attach files to a post and, importantly, its plugin page provides usable notes about implementation which greatly helped me in my learning process. I think I could code in some of that plugin’s functionality, now that I get a better idea of how WordPress attachments work. But it seems not to be too buggy so I’ll probably keep it.

As its name does not imply, gde can embed any file from a rather large array of file types: Adobe Reader (PDF), Microsoft Office (doc/docx, ppt/pptx/pps, xsl/xslx), and iWork Pages, along with multipage image files (tiff, Adobe Illustrator, Photoshop, SVG, EPS/PS…). The file format support comes from Google Docs Viewer (hence the plugin name).

In fact, I just realized that GDV supports zip and RAR archives. Had heard (from Gina Trapani) of that archive support in Gmail but didn’t realize it applied to GDV. Tried displaying a zip file through gde, last night, and it didn’t work. Posted something about this on the plugin’s forum and “k3davis” already fixed this, mentioning me in the 2.2 release notes.

Allowing the display of archives might be very useful, in this case. It’s fairly easily to get people to put files in a zip archive and upload it. In fact, several mail clients do all of this automatically, so there’s probably a way to get documents through emailed zip files and display the content along with the syllabus.

So, a cool plugin became cooler.

Syllabus Database (archive)

[gview file=”http://blog.enkerli.com/files/2011/08/syllabusdb-0.2.zip” height=”20%”]

As it so happens, gde is already installed on the academic site for which I’m building this very same syllabus database. In that case, I’ve been using gde to embed PDF files (for instance, in this page providing web enhancements page for an article in the association’s journal). So I knew it could be useful in terms of displaying course outlines and such, within individual pages of the syllabus database.

What I wasn’t sure I could do is programmatically embed files added to a syllabus page. In other words, I knew I could display these files using some shortcode on appropriate files’ URLs (including those of attached files). What I wasn’t sure how to do (and had a hard time figuring out) is how to send these URLs from a field in the database: I knew how to manually enter the code, but I didn’t know how to automatically display the results of the code when a link is entered in the right place.

The reason this matters is that I would like “normal human beings” (i.e., noncoders and, mostly, nongeeks) to enter the relevant information for their syllabi. One of WordPress’s advantages is the fact that, despite its power, it’s very easy to get nongeeks to do neat things with it. I’d like the syllabus database to be this type of neat thing.

The Attachmentsplugin helps, but still isn’t completely ideal. It does allow for drag-and-drop upload and it does provide a minimalist interface for attaching uploaded files to blogposts.

First Attach Button (Screenshot)
Screenshot of First “Attach” Button

In the first case, it’s just a matter of clicking the Attach button and dropping a file in the appropriate field. In the second case, it’s a matter of clicking another Attachbutton.

Second Attach Button (Screenshot)
Screenshot of the Second “Attach” Button

The problem is between these two Attach buttons.

File Uploaded Screenshot
Screenshot of the Uploaded File

The part of the process between uploading the file and finding the Attach button takes several nonobvious  steps. After the file has been uploaded, the most obvious buttons are Insert into Post and Save all changes, neither of which sounds particularly useful in this context. But Save all changes is the one which should be clicked.

To get to the second Attach button, I first need to go to the Media Library a second time. Recently uploaded images are showing.

Images Only Screenshot
Screenshot of the Media Library Only Showing Images

For other types of files, I then click All Types, which shows a reverse chronological list of all recently uploaded files (older files can be found through the Search Media field). I then click on the Show link associated with a given file (most likely, the most recent upload, which is the first in the list).

Second Attach Button (Screenshot)
Screenshot of the second “Attach” Button

Then, finally, the final Attach button shows up.

Clicking it, the file is attached to the current post, which was the reason behind the whole process. Thanks to both gde and Attachments, that file is then displayed along with the rest of the syllabus entry.

It only takes a matter of seconds to minutes, to attach a file (depending on filesize, connection speed, etc.). Not that long. And the media library can be very useful in many ways. But I just imagine myself explaining the process to instructors and other people submitting syllabi for inclusion the the database.

Far from ideal.

A much easier process is the one of adding files by pasting a file URL in a field. Which is exactly what I’ve added as a possibility for a syllabus’s main document (say, the PDF version of the syllabus).

Course Data Screenshot
Screenshot of the Course Data Box

Passing that URL to gde, I can automatically display the document in the document page, as I’m doing with attachments from the media library.  The problem with this, obviously, is that it requires a public URL for the document. The very same “media library” can be used to upload documents. In fact, copying the URL from an uploaded file is easier than finding the “Attach” button as explained previously. But it makes the upload a separate process on the main site. A process which can be taught fairly easily, but a process which isn’t immediately obvious.

I might make use of a DropBox account for just this kind of situation. It’s also a separate process, but it’s one which may be easier for some people.

In the end, I’ll have to see with users what makes the most sense for them.

In the past, I’ve used plugins like  Contact Form 7 (CF7), by Takayuki Miyoshi, and Fast Secure Contact Form (FSCF)  by Mike Challis to try and implement something similar. A major advantage is that they allow for submissions by users who aren’t logged in. This might be a dealmaking feature for either FSCF or CF7, as I don’t necessarily want to create accounts for everyone who might submit a syllabus. Had issues with user registration, in the past. Like attachments, onboarding remains an issue for a lot of people. Also, thanks to yet other plugins like Michael Simpson’s Contact Form to Database (CFDB), it should be possible to make form submissions into pending items in the syllabus database. I’ll be looking into this.

Another solution might be Gravity Forms. Unlike the plugins I’ve mentioned so far, it’s a commercial product. But it sounds like it might offer some rather neat features which may make syllabus submission a much more interesting process. However, it’s meant for a very different use case, which has more to do with “lead data management” and other business-focused usage. I could innovate through its use. But there might be more appropriate solutions.

As is often the case with WordPress, the “There’s a plugin for that” motto can lead to innovation.  Even documenting the process (by blogging it) can be a source of neat ideas.

A set of ideas I’ve had, for this syllabus database, came from looking into the Pods CMS Framework for WordPress. Had heard about Pods CMS through the WordCast Conversations podcast. For several reasons, it sent me on an idea spree and, for days, I was taking copious notes about what could be done. Not only about this syllabus database but about a full “learning object repository” built on top of WordPress. The reason I want to use WordPress is that, not only am I a “fanboi” of Automattic (the organization behind WordPress) but I readily plead guilty to using WordPress as a Golden Hammer. There are multiple ways to build a learning object repository. (Somehow, I’m convinced that some of my Web developing friends that Ruby on Rails is the ideal solution.) But I’ve got many of my more interesting ideas through looking into Pods CMS, a framework for WordPress and I don’t know the first thing about RoR.

Overall, Pods CMS sounds like a neat approach. Its pros and cons make it sound like an interesting alternative to WordPress’s custom post types for certain projects, as well as a significant shift from the main ways WordPress is used. During WordCamp Montreal, people I asked about it were wary of Pods. I eventually thought I would wait for version 2.0 to come out before investing significant effort in it.

In the meantime, what I’ve built is a useful base knowledge of how to use WordPress as a content database.

Can’t wait to finish adding features and fixing bugs, so I can release it to the academic organization. I’m sure they’ll enjoy it.

Even if they don’t ever use it, I’ve gained a lot of practical insight into how to do such things. It may be obvious to others but it does wonders to my satisfaction levels.

I’m truly in flow!

WordPress as Content Directory: Getting Somewhere

{I tend to ramble a bit. If you just want a step-by-step tutorial, you can skip to here.}

Woohoo!

I feel like I’ve reached a milestone in a project I’ve had in mind, ever since I learnt about Custom Post Types in WordPress 3.0: Using WordPress as a content directory.

The concept may not be so obvious to anyone else, but it’s very clear to me. And probably much clearer for anyone who has any level of WordPress skills (I’m still a kind of WP newbie).

Basically, I’d like to set something up through WordPress to make it easy to create, review, and publish entries in content databases. WordPress is now a Content Management System and the type of “content management” I’d like to enable has to do with something of a directory system.

Why WordPress? Almost glad you asked.

These days, several of the projects on which I work revolve around WordPress. By pure coincidence. Or because WordPress is “teh awsum.” No idea how representative my sample is. But I got to work on WordPress for (among other things): an academic association, an adult learners’ week, an institute for citizenship and social change, and some of my own learning-related projects.

There are people out there arguing about the relative value of WordPress and other Content Management Systems. Sometimes, WordPress may fall short of people’s expectations. Sometimes, the pro-WordPress rhetoric is strong enough to sound like fanboism. But the matter goes beyond marketshare, opinions, and preferences.

In my case, WordPress just happens to be a rather central part of my life, these days. To me, it’s both a question of WordPress being “the right tool for the job” and the work I end up doing being appropriate for WordPress treatment. More than a simple causality (“I use WordPress because of the projects I do” or “I do these projects because I use WordPress”), it’s a complex interaction which involves diverse tools, my skillset, my social networks, and my interests.

Of course, WordPress isn’t perfect nor is it ideal for every situation. There are cases in which it might make much more sense to use another tool (Twitter, TikiWiki, Facebook, Moodle, Tumblr, Drupal..). And there are several things I wish WordPress did more elegantly (such as integrating all dimensions in a single tool). But I frequently end up with WordPress.

Here are some things I like about WordPress:

This last one is where the choice of WordPress for content directories starts making the most sense. Not only is it easy for me to use and build on WordPress but the learning curves are such that it’s easy for me to teach WordPress to others.

A nice example is the post editing interface (same in the software and service). It’s powerful, flexible, and robust, but it’s also very easy to use. It takes a few minutes to learn and is quite sufficient to do a lot of work.

This is exactly where I’m getting to the core idea for my content directories.

I emailed the following description to the digital content editor for the academic organization for which I want to create such content directories:

You know the post editing interface? What if instead of editing posts, someone could edit other types of contents, like syllabi, calls for papers, and teaching resources? What if fields were pretty much like the form I had created for [a committee]? What if submissions could be made by people with a specific role? What if submissions could then be reviewed by other people, with another role? What if display of these items were standardised?

Not exactly sure how clear my vision was in her head, but it’s very clear for me. And it came from different things I’ve seen about custom post types in WordPress 3.0.

For instance, the following post has been quite inspiring:

I almost had a drift-off moment.

But I wasn’t able to wrap my head around all the necessary elements. I perused and read a number of things about custom post types, I tried a few things. But I always got stuck at some point.

Recently, a valuable piece of the puzzle was provided by Kyle Jones (whose blog I follow because of his work on WordPress/BuddyPress in learning, a focus I share).

Setting up a Staff Directory using WordPress Custom Post Types and Plugins | The Corkboard.

As I discussed in the comments to this post, it contained almost everything I needed to make this work. But the two problems Jones mentioned were major hurdles, for me.

After reading that post, though, I decided to investigate further. I eventually got some material which helped me a bit, but it still wasn’t sufficient. Until tonight, I kept running into obstacles which made the process quite difficult.

Then, while trying to solve a problem I was having with Jones’s code, I stumbled upon the following:

Rock-Solid WordPress 3.0 Themes using Custom Post Types | Blancer.com Tutorials and projects.

This post was useful enough that I created a shortlink for it, so I could have it on my iPad and follow along: http://bit.ly/RockSolidCustomWP

By itself, it might not have been sufficient for me to really understand the whole process. And, following that tutorial, I replaced the first bits of code with use of the neat plugins mentioned by Jones in his own tutorial: More Types, More Taxonomies, and More Fields.

I played with this a few times but I can now provide an actual tutorial. I’m now doing the whole thing “from scratch” and will write down all steps.

This is with the WordPress 3.0 blogging software installed on a Bluehost account. (The WordPress.com blogging service doesn’t support custom post types.) I use the default Twenty Ten theme as a parent theme.

Since I use WordPress Multisite, I’m creating a new test blog (in Super Admin->Sites, “Add New”). Of course, this wasn’t required, but it helps me make sure the process is reproducible.

Since I already installed the three “More Plugins” (but they’re not “network activated”) I go in the Plugins menu to activate each of them.

I can now create the new “Product” type, based on that Blancer tutorial. To do so, I go to the “More Types” Settings menu, I click on “Add New Post Type,” and I fill in the following information: post type names (singular and plural) and the thumbnail feature. Other options are set by default.

I also set the “Permalink base” in Advanced settings. Not sure it’s required but it seems to make sense.

I click on the “Save” button at the bottom of the page (forgot to do this, the last time).

I then go to the “More Fields” settings menu to create a custom box for the post editing interface.

I add the box title and change the “Use with post types” options (no use in having this in posts).

(Didn’t forget to click “save,” this time!)

I can now add the “Price” field. To do so, I need to click on the “Edit” link next to the “Product Options” box I just created and add click “Add New Field.”

I add the “Field title” and “Custom field key”:

I set the “Field type” to Number.

I also set the slug for this field.

I then go to the “More Taxonomies” settings menu to add a new product classification.

I click “Add New Taxonomy,” and fill in taxonomy names, allow permalinks, add slug, and show tag cloud.

I also specify that this taxonomy is only used for the “Product” type.

(Save!)

Now, the rest is more directly taken from the Blancer tutorial. But instead of copy-paste, I added the files directly to a Twenty Ten child theme. The files are available in this archive.

Here’s the style.css code:

/*
Theme Name: Product Directory
Theme URI: http://enkerli.com/
Description: A product directory child theme based on Kyle Jones, Blancer, and Twenty Ten
Author: Alexandre Enkerli
Version: 0.1
Template: twentyten
*/
@import url("../twentyten/style.css");

The code for functions.php:

<!--?php /**  * ProductDir functions and definitions  * @package WordPress  * @subpackage Product_Directory  * @since Product Directory 0.1  */ /*Custom Columns*/ add_filter("manage_edit-product_columns", "prod_edit_columns"); add_action("manage_posts_custom_column",  "prod_custom_columns"); function prod_edit_columns($columns){ 		$columns = array( 			"cb" =--> "<input type="\&quot;checkbox\&quot;" />",
			"title" => "Product Title",
			"description" => "Description",
			"price" => "Price",
			"catalog" => "Catalog",
		);

		return $columns;
}

function prod_custom_columns($column){
		global $post;
		switch ($column)
		{
			case "description":
				the_excerpt();
				break;
			case "price":
				$custom = get_post_custom();
				echo $custom["price"][0];
				break;
			case "catalog":
				echo get_the_term_list($post->ID, 'catalog', '', ', ','');
				break;
		}
}
?>

And the code in single-product.php:

<!--?php /**  * Template Name: Product - Single  * The Template for displaying all single products.  *  * @package WordPress  * @subpackage Product_Dir  * @since Product Directory 1.0  */ get_header(); ?-->
<div id="container">
<div id="content">
<!--?php the_post(); ?-->

<!--?php 	$custom = get_post_custom($post--->ID);
	$price = "$". $custom["price"][0];

?>
<div id="post-<?php the_ID(); ?><br />">>
<h1 class="entry-title"><!--?php the_title(); ?--> - <!--?=$price?--></h1>
<div class="entry-meta">
<div class="entry-content">
<div style="width: 30%; float: left;">
			<!--?php the_post_thumbnail( array(100,100) ); ?-->
			<!--?php the_content(); ?--></div>
<div style="width: 10%; float: right;">
			Price
<!--?=$price?--></div>
</div>
</div>
</div>
<!-- #content --></div>
<!-- #container -->

<!--?php get_footer(); ?-->

That’s it!

Well, almost..

One thing is that I have to activate my new child theme.

So, I go to the “Themes” Super Admin menu and enable the Product Directory theme (this step isn’t needed with single-site WordPress).

I then activate the theme in Appearance->Themes (in my case, on the second page).

One thing I’ve learnt the hard way is that the permalink structure may not work if I don’t go and “nudge it.” So I go to the “Permalinks” Settings menu:

And I click on “Save Changes” without changing anything. (I know, it’s counterintuitive. And it’s even possible that it could work without this step. But I spent enough time scratching my head about this one that I find it important.)

Now, I’m done. I can create new product posts by clicking on the “Add New” Products menu.

I can then fill in the product details, using the main WYSIWYG box as a description, the “price” field as a price, the “featured image” as the product image, and a taxonomy as a classification (by clicking “Add new” for any tag I want to add, and choosing a parent for some of them).

Now, in the product management interface (available in Products->Products), I can see the proper columns.

Here’s what the product page looks like:

And I’ve accomplished my mission.

The whole process can be achieved rather quickly, once you know what you’re doing. As I’ve been told (by the ever-so-helpful Justin Tadlock of Theme Hybrid fame, among other things), it’s important to get the data down first. While I agree with the statement and its implications, I needed to understand how to build these things from start to finish.

In fact, getting the data right is made relatively easy by my background as an ethnographer with a strong interest in cognitive anthropology, ethnosemantics, folk taxonomies (aka “folksonomies“), ethnography of communication, and ethnoscience. In other words, “getting the data” is part of my expertise.

The more technical aspects, however, were a bit difficult. I understood most of the principles and I could trace several puzzle pieces, but there’s a fair deal I didn’t know or hadn’t done myself. Putting together bits and pieces from diverse tutorials and posts didn’t work so well because it wasn’t always clear what went where or what had to remain unchanged in the code. I struggled with many details such as the fact that Kyle Jones’s code for custom columns wasn’t working first because it was incorrectly copied, then because I was using it on a post type which was “officially” based on pages (instead of posts). Having forgotten the part about “touching” the Permalinks settings, I was unable to get a satisfying output using Jones’s explanations (the fact that he doesn’t use titles didn’t really help me, in this specific case). So it was much harder for me to figure out how to do this than it now is for me to build content directories.

I still have some technical issues to face. Some which are near essential, such as a way to create archive templates for custom post types. Other issues have to do with features I’d like my content directories to have, such as clearly defined roles (the “More Plugins” support roles, but I still need to find out how to define them in WordPress). Yet other issues are likely to come up as I start building content directories, install them in specific contexts, teach people how to use them, observe how they’re being used and, most importantly, get feedback about their use.

But I’m past a certain point in my self-learning journey. I’ve built my confidence (an important but often dismissed component of gaining expertise and experience). I found proper resources. I understood what components were minimally necessary or required. I succeeded in implementing the system and testing it. And I’ve written enough about the whole process that things are even clearer for me.

And, who knows, I may get feedback, questions, or advice..

Installing BuddyPress on a Webhost

[Jump here for more technical details.]

A few months ago, I installed BuddyPress on my Mac to try it out. It was a bit of an involved process, so I documented it:

WordPress MU, BuddyPress, and bbPress on Local Machine « Disparate.

More recently, I decided to get a webhost. Both to run some tests and, eventually, to build something useful. BuddyPress seems like a good way to go at it, especially since it’s improved a lot, in the past several months.

In fact, the installation process is much simpler, now, and I ran into some difficulties because I was following my own instructions (though adapting the process to my webhost). So a new blogpost may be in order. My previous one was very (possibly too) detailed. This one is much simpler, technically.

One thing to make clear is that BuddyPress is a set of plugins meant for WordPress µ (“WordPress MU,” “WPMU,” “WPµ”), the multi-user version of the WordPress blogging platform. BP is meant as a way to make WPµ more “social,” with such useful features as flexible profiles, user-to-user relationships, and forums (through bbPress, yet another one of those independent projects based on WordPress).

While BuddyPress depends on WPµ and does follow a blogging logic, I’m thinking about it as a social platform. Once I build it into something practical, I’ll probably use the blogging features but, in a way, it’s more of a tool to engage people in online social activities. BuddyPress probably doesn’t work as a way to “build a community” from scratch. But I think it can be quite useful as a way to engage members of an existing community, even if this engagement follows a blogger’s version of a Pareto distribution (which, hopefully, is dissociated from elitist principles).

But I digress, of course. This blogpost is more about the practical issue of adding a BuddyPress installation to a webhost.

Webhosts have come a long way, recently. Especially in terms of shared webhosting focused on LAMP (or PHP/MySQL, more specifically) for blogs and content-management. I don’t have any data on this, but it seems to me that a lot of people these days are relying on third-party webhosts instead of relying on their own servers when they want to build on their own blogging and content-management platforms. Of course, there’s a lot more people who prefer to use preexisting blog and content-management systems. For instance, it seems that there are more bloggers on WordPress.com than on other WordPress installations. And WP.com blogs probably represent a small number of people in comparison to the number of people who visit these blogs. So, in a way, those who run their own WordPress installations are a minority in the group of active WordPress bloggers which, itself, is a minority of blog visitors. Again, let’s hope this “power distribution” not a basis for elite theory!

Yes, another digression. I did tell you to skip, if you wanted the technical details!

I became part of the “self-hosted WordPress” community through a project on which I started work during the summer. It’s a website for an academic organization and I’m acting as the organization’s “Web Guru” (no, I didn’t choose the title). The site was already based on WordPress but I was rebuilding much of it in collaboration with the then-current “Digital Content Editor.” Through this project, I got to learn a lot about WordPress, themes, PHP, CSS, etc. And it was my first experience using a cPanel- (and Fantastico-)enabled webhost (BlueHost, at the time). It’s also how I decided to install WordPress on my local machine and did some amount of work from that machine.

But the local installation wasn’t an ideal solution for two reasons: a) I had to be in front of that local machine to work on this project; and b) it was much harder to show the results to the person with whom I was collaborating.

So, in the Fall, I decided to get my own staging server. After a few quick searches, I decided HostGator, partly because it was available on a monthly basis. Since this staging server was meant as a temporary solution, HG was close to ideal. It was easy to set up as a PayPal “subscription,” wasn’t that expensive (9$/month), had adequate support, and included everything that I needed at that point to install a current version of WordPress and play with theme files (after importing content from the original site). I’m really glad I made that decision because it made a number of things easier, including working from different computers, and sending links to get feedback.

While monthly HostGator fees were reasonable, it was still a more expensive proposition than what I had in mind for a longer-term solution. So, recently, a few weeks after releasing the new version of the organization’s website, I decided to cancel my HostGator subscription. A decision I made without any regret or bad feeling. HostGator was good to me. It’s just that I didn’t have any reason to keep that account or to do anything major with the domain name I was using on HG.

Though only a few weeks elapsed since I canceled that account, I didn’t immediately set out to transition to a new webhost. I didn’t go from HostGator to another webhost.

But having my own webhost still remained at the back of my mind as something which might be useful. For instance, while not really making a staging server necessary, a new phase in the academic website project brought up a sandboxing idea. Also, I went to a “WordPress Montreal” meeting and got to think about further WordPress development/deployment, including using BuddyPress for my own needs (both as my own project and as a way to build my own knowledge of the platform) instead of it being part of an organization’s project. I was also thinking about other interesting platforms which necessitate a webhost.

(More on these other platforms at a later point in time. Bottom line is, I’m happy with the prospects.)

So I wanted a new webhost. I set out to do some comparison shopping, as I’m wont to do. In my (allegedly limited) experience, finding the ideal webhost is particularly difficult. For one thing, search results are cluttered with a variety of “unuseful” things such as rants, advertising, and limited comparisons. And it’s actually not that easy to give a new webhost a try. For one thing, these hosting companies don’t necessarily have the most liberal refund policies you could imagine. And, switching a domain name between different hosts and registrars is a complicated process through which a name may remain “hostage.” Had I realized what was involved, I might have used a domain name to which I have no attachment or actually eschewed the whole domain transition and just try the webhost without a dedicated domain name.

Doh!
Live and learn. I sure do. Loving almost every minute of it.

At any rate, I had a relatively hard time finding my webhost.

I really didn’t need “bells and whistles.” For instance, all the AdSense, shopping cart, and other business-oriented features which seem to be publicized by most webhosting companies have no interest, to me.

I didn’t even care so much about absolute degree of reliability or speed. What I’m to do with this host is fairly basic stuff. The core idea is to use my own host to bypass some limitations. For instance, WordPress.com doesn’t allow for plugins yet most of the WordPress fun has to do with plugins.

I did want an “unlimited” host, as much as possible. Not because expect to have huge resource needs but I just didn’t want to have to monitor bandwidth.

I thought that my needs would be basic enough that any cPanel-enabled webhost would fit. As much as I could see, I needed FTP access to something which had PHP 5 and MySQL 5. I expected to install things myself, without use of the webhost’s scripts but I also thought the host would have some useful scripts. Although I had already registered the domain I wanted to use (through Name.com), I thought it might be useful to have a free domain in the webhosting package. Not that domain names are expensive, it’s more of a matter of convenience in terms of payment or setup.

I ended up with FatCow. But, honestly, I’d probably go with a different host if I were to start over (which I may do with another project).

I paid 88$ for two years of “unlimited” hosting, which is quite reasonable. And, on paper, FatCow has everything I need (and I bunch of things I don’t need). The missing parts aren’t anything major but have to do with minor annoyances. In other words, no real deal-breaker, here. But there’s a few things I wish I had realized before I committed on FatCow with a domain name I actually want to use.

Something which was almost a deal-breaker for me is the fact that FatCow requires payment for any additional subdomain. And these aren’t cheap: the minimum is 5$/month for five subdomains, up to 25$/month for unlimited subdomains! Even at a “regular” price of 88$/year for the basic webhosting plan, the “unlimited subdomains” feature (included in some webhosting plans elsewhere) is more than three times more expensive than the core plan.

As I don’t absolutely need extra subdomains, this is mostly a minor irritant. But it’s one reason I’ll probably be using another webhost for other projects.

Other issues with FatCow are probably not enough to motivate a switch.

For instance, the PHP version installed on FatCow (5.2.1) is a few minor releases behind the one needed by some interesting web applications. No biggie, especially if PHP is updated in a relatively reasonable timeframe. But still makes for a slight frustration.

The MySQL version seems recent enough, but it uses non-standard tools to manage it, which makes for some confusion. Attempting to create some MySQL databases with obvious names (say “wordpress”) fails because the database allegedly exists (even though it doesn’t show up in the MySQL administration). In the same vein, the URL of the MySQL is <username>.fatcowmysql.com instead of localhost as most installers seem to expect. Easy to handle once you realize it, but it makes for some confusion.

In terms of Fantastico-like simplified installation of webapps, FatCow uses InstallCentral, which looks like it might be its own Fantastico replacement. InstallCentral is decent enough as an installation tool and FatCow does provide for some of the most popular blog and CMS platforms. But, in some cases, the application version installed by FatCow is old enough (2005!)  that it requires multiple upgrades to get to a current version. Compared to other installation tools, FatCow’s InstallCentral doesn’t seem really efficient at keeping track of installed and released versions.

Something which is partly a neat feature and partly a potential issue is the way FatCow handles Apache-related security. This isn’t something which is so clear to me, so I might be wrong.

Accounts on both BlueHost and HostGator include a public_html directory where all sorts of things go, especially if they’re related to publicly-accessible content. This directory serves as the website’s root, so one expects content to be available there. The “index.html” or “index.php” file in this directory serves as the website’s frontpage. It’s fairly obvious, but it does require that one would understand a few things about webservers. FatCow doesn’t seem to create a public_html directory in a user’s server space. Or, more accurately, it seems that the root directory (aka ‘/’) is in fact public_html. In this sense, a user doesn’t have to think about which directory to use to share things on the Web. But it also means that some higher-level directories aren’t available. I’ve already run into some issues with this and I’ll probably be looking for a workaround. I’m assuming there’s one. But it’s sometimes easier to use generally-applicable advice than to find a custom solution.

Further, in terms of access control… It seems that webapps typically make use of diverse directories and .htaccess files to manage some forms of access controls. Unix-style file permissions are also involved but the kind of access needed for a web app is somewhat different from the “User/Group/All” of Unix filesystems. AFAICT, FatCow does support those .htaccess files. But it has its own tools for building them. That can be a neat feature, as it makes it easier, for instance, to password-protect some directories. But it could also be the source of some confusion.

There are other issues I have with FatCow, but it’s probably enough for now.

So… On to the installation process… 😉

It only takes a few minutes and is rather straightforward. This is the most verbose version of that process you could imagine…

Surprised? 😎

Disclaimer: I’m mostly documenting how I did it and there are some things about which I’m unclear. So it may not work for you. If it doesn’t, I may be able to help but I provide no guarantee that I will. I’m an anthropologist, not a Web development expert.

As always, YMMV.

A few instructions here are specific to FatCow, but the general process is probably valid on other hosts.

I’m presenting things in a sequence which should make sense. I used a slightly different order myself, but I think this one should still work. (If it doesn’t, drop me a comment!)

In these instructions, straight quotes (“”) are used to isolate elements from the rest of the text. They shouldn’t be typed or pasted.

I use “example.com” to refer to the domain on which the installation is done. In my case, it’s the domain name I transfered to FatCow from another registrar but it could probably be done without a dedicated domain (in which case it would be “<username>.fatcow.com” where “<username>” is your FatCow username).

I started with creating a MySQL database for WordPress MU. FatCow does have phpMyAdmin but the default tool in the cPanel is labeled “Manage MySQL.” It’s slightly easier to use for creating new databases than phpMyAdmin because it creates the database and initial user (with confirmed password) in a single, easy-to-understand dialog box.

So I created that new database, user, and password, noting down this information. Since that password appears in clear text at some point and can easily be changed through the same interface, I used one which was easy to remember but wasn’t one I use elsewhere.
Then, I dowloaded the following files to my local machine in order to upload them to my FatCow server space. The upload can be done through either FTP or FatCow’s FileManager. I tend to prefer FTP (via CyberDuck on the Mac or FileZilla on PC). But the FileManager does allow for easy uploads.
(Wish it could be more direct, using the HTTP links directly instead of downloading to upload. But I haven’t found a way to do it through either FTP or the FileManager.)
At any rate, here are the four files I transfered to my FatCow space, using .zip when there’s a choice (the .tar.gz “tarball” versions also work but require a couple of extra steps).
  1. WordPress MU (wordpress-mu-2.9.1.1.zip, in my case)
  2. Buddymatic (buddymatic.0.9.6.3.1.zip, in my case)
  3. EarlyMorning (only one version, it seems)
  4. EarlyMorning-BP (only one version, it seems)

Only the WordPress MU archive is needed to install BuddyPress. The last three files are needed for EarlyMorning, a BuddyPress theme that I found particularly neat. It’s perfectly possible to install BuddyPress without this specific theme. (Although, doing so, you need to install a BuddyPress-compatible theme, if only by moving some folders to make the default theme available, as I explained in point 15 in that previous tutorial.) Buddymatic itself is a theme framework which includes some child themes, so you don’t need to install EarlyMorning. But installing it is easy enough that I’m adding instructions related to that theme.

These files can be uploaded anywhere in my FatCow space. I uploaded them to a kind of test/upload directory, just to make it clear, for me.

A major FatCow idiosyncrasy is its FileManager (actually called “FileManager Beta” in the documentation but showing up as “FileManager” in the cPanel). From my experience with both BlueHost and HostGator (two well-known webhosting companies), I can say that FC’s FileManager is quite limited. One thing it doesn’t do is uncompress archives. So I have to resort to the “Archive Gateway,” which is surprisingly slow and cumbersome.

At any rate, I used that Archive Gateway to uncompress the four files. WordPress µ first (in the root directory or “/”), then both Buddymatic and EarlyMorning in “/wordpress-mu/wp-content/themes” (you can chose the output directory for zip and tar files), and finally EarlyMorning-BP (anywhere, individual files are moved later). To uncompress each file, select it in the dropdown menu (it can be located in any subdirectory, Archive Gateway looks everywhere), add the output directory in the appropriate field in the case of Buddymatic or EarlyMorning, and press “Extract/Uncompress”. Wait to see a message (in green) at the top of the window saying that the file has been uncompressed successfully.

Then, in the FileManager, the contents of the EarlyMorning-BP directory have to be moved to “/wordpress-mu/wp-content/themes/earlymorning”. (Thought they could be uncompressed there directly, but it created an extra folder.) To move those files in the FileManager, I browse to that earlymorning-bp directory, click on the checkbox to select all, click on the “Move” button (fourth from right, marked with a blue folder), and add the output path: /wordpress-mu/wp-content/themes/earlymorning

These files are tweaks to make the EarlyMorning theme work with BuddyPress.

Then, I had to change two files, through the FileManager (it could also be done with an FTP client).

One change is to EarlyMorning’s style.css:

/wordpress-mu/wp-content/themes/earlymorning/style.css

There, “Template: thematic” has to be changed to “Template: buddymatic” (so, “the” should be changed to “buddy”).

That change is needed because the EarlyMorning theme is a child theme of the “Thematic” WordPress parent theme. Buddymatic is a BuddyPress-savvy version of Thematic and this changes the child-parent relation from Thematic to Buddymatic.

The other change is in the Buddymatic “extensions”:

/wordpress-mu/wp-content/themes/buddymatic/library/extensions/buddypress_extensions.php

There, on line 39, “$bp->root_domain” should be changed to “bp_root_domain()”.

This change is needed because of something I’d consider a bug but that a commenter on another blog was kind enough to troubleshoot. Without this modification, the login button in BuddyPress wasn’t working because it was going to the website’s root (example.com/wp-login.php) instead of the WPµ installation (example.com/wordpress-mu/wp-login.php). I was quite happy to find this workaround but I’m not completely clear on the reason it works.

Then, something I did which might not be needed is to rename the “wordpress-mu” directory. Without that change, the BuddyPress installation would sit at “example.com/wordpress-mu,” which seems a bit cryptic for users. In my mind, “example.com/<name>,” where “<name>” is something meaningful like “social” or “community” works well enough for my needs. Because FatCow charges for subdomains, the “<name>.example.com” option would be costly.

(Of course, WPµ and BuddyPress could be installed in the site’s root and the frontpage for “example.com” could be the BuddyPress frontpage. But since I think of BuddyPress as an add-on to a more complete site, it seems better to have it as a level lower in the site’s hierarchy.)

With all of this done, the actual WPµ installation process can begin.

The first thing is to browse to that directory in which WPµ resides, either “example.com/wordpress-mu” or “example.com/<name>” with the “<name>” you chose. You’re then presented with the WordPress µ Installation screen.

Since FatCow charges for subdomains, it’s important to choose the following option: “Sub-directories (like example.com/blog1).” It’s actually by selecting the other option that I realized that FatCow restricted subdomains.

The Database Name, username and password are the ones you created initially with Manage MySQL. If you forgot that password, you can actually change it with that same tool.

An important FatCow-specific point, here, is that “Database Host” should be “<username>.fatcowmysql.com” (where “<username>” is your FatCow username). In my experience, other webhosts use “localhost” and WPµ defaults to that.

You’re asked to give a name to your blog. In a way, though, if you think of BuddyPress as more of a platform than a blogging system, that name should be rather general. As you’re installing “WordPress Multi-User,” you’ll be able to create many blogs with more specific names, if you want. But the name you’re entering here is for BuddyPress as a whole. As with <name> in “example.com/<name>” (instead of “example.com/wordpress-mu”), it’s a matter of personal opinion.

Something I noticed with the EarlyMorning theme is that it’s a good idea to keep the main blog’s name relatively short. I used thirteen characters and it seemed to fit quite well.

Once you’re done filling in this page, WPµ is installed in a flash. You’re then presented with some information about your installation. It’s probably a good idea to note down some of that information, including the full paths to your installation and the administrator’s password.

But the first thing you should do, as soon as you log in with “admin” as username and the password provided, is probably to the change that administrator password. (In fact, it seems that a frequent advice in the WordPress community is to create a new administrator user account, with a different username than “admin,” and delete the “admin” account. Given some security issues with WordPress in the past, it seems like a good piece of advice. But I won’t describe it here. I did do it in my installation and it’s quite easy to do in WPµ.

Then, you should probably enable plugins here:

example.com/<name>/wp-admin/wpmu-options.php#menu

(From what I understand, it might be possible to install BuddyPress without enabling plugins, since you’re logged in as the administrator, but it still makes sense to enable them and it happens to be what I did.)

You can also change a few other options, but these can be set at another point.

One option which is probably useful, is this one:

Allow new registrations Disabled
Enabled. Blogs and user accounts can be created.
Only user account can be created.

Obviously, it’s not necessary. But in the interest of opening up the BuddyPress to the wider world without worrying too much about a proliferation of blogs, it might make sense. You may end up with some fake user accounts, but that shouldn’t be a difficult problem to solve.

Now comes the installation of the BuddyPress plugin itself. You can do so by going here:

example.com/<name>/wp-admin/plugin-install.php

And do a search for “BuddyPress” as a term. The plugin you want was authored by “The BuddyPress Community.” (In my case, version 1.1.3.) Click the “Install” link to bring up the installation dialog, then click “Install Now” to actually install the plugin.

Once the install is done, click the “Activate” link to complete the basic BuddyPress installation.

You now have a working installation of BuddyPress but the BuddyPress-savvy EarlyMorning isn’t enabled. So you need to go to “example.com/<name>/wp-admin/wpmu-themes.php” to enable both Buddymatic and EarlyMorning. You should then go to “example.com/<name>/wp-admin/themes.php” to activate the EarlyMorning theme.

Something which tripped me up because it’s now much easier than before is that forums (provided through bbPress) are now, literally, a one-click install. If you go here:

example.com/<name>/wp-admin/admin.php?page=bb-forums-setup

You can set up a new bbPress install (“Set up a new bbPress installation”) and everything will work wonderfully in terms of having forums fully integrated in BuddyPress. It’s so seamless that I wasn’t completely sure it had worked.

Besides this, I’d advise that you set up a few widgets for the BuddyPress frontpage. You do so through an easy-to-use drag-and-drop interface here:

example.com/<name>/wp-admin/widgets.php

I especially advise you to add the Twitter RSS widget because it seems to me to fit right in. If I’m not mistaken, the EarlyMorning theme contains specific elements to make this widget look good.

After that, you can just have fun with your new BuddyPress installation. The first thing I did was to register a new user. To do so, I logged out of my admin account,  and clicked on the Sign Up button. Since I “allow new registrations,” it’s a very simple process. In fact, this is one place where I think that BuddyPress shines. Something I didn’t explain is that you can add a series of fields for that registration and the user profile which goes with it.

The whole process really shouldn’t take very long. In fact, the longest parts have probably to do with waiting for Archive Gateway.

The rest is “merely” to get people involved in your BuddyPress installation. It can happen relatively easily, if you already have a group of people trying to do things together online. But it can be much more complicated than any software installation process… 😉

WordPress MU, BuddyPress, and bbPress on Local Machine

Was recently able to install and integrate three neat products based on Automattic code:

  1. WordPress µ 2.8.1 (a.k.a. WPµ, WordPress MU… Platform for multi-user blogs and Content Management System).
  2. BuddyPress 1.0.2 (A social network system based on WordPress µ).
  3. bbPress 1.0.1 (A forum system based on WordPress).

Did this after attending WordCamp Montreal. The fact that the large majority of WordPress and WordPress µ are merging motivated me, in part, to try it out. I currently serve as webguru for the Society for Linguistic Anthropology.

This is all on a local machine, a Mac mini running Mac OS X 10.5 Leopard.

It took me several attempts so it might not be as obvious as one would think.

I wrote as detailed a walkthrough as I could. Not exactly for the faint of heart. And, as IANAC, some things aren’t completely clear to me. I wish I could say I’m able to troubleshoot other people’s problems with these systems, but it’s really not the case. I ended up working out diverse issues, but it took me time and concentration.

A few resources I’ve used:

  1. Andy Peatling’s tutorial on BuddyPress (and WordPress µ) on a Mac.
  2. Sam Bauers’s screencast on integrating WordPress and bbPress. (Not µ or BuddyPress. Requires WordPress.org login.)
  3. Trent Adams’s tutorial on BuddyPress/bbPress integration.
  4. This file: <WPinstall>/wp-content/plugins/buddypress/bp-forums/installation-readme.txt (also available here).

I’ve used many other resources, but they turned out to be confusing, partly because of changes in versions. In fact, the last file was the most useful one. It’s a very different method from the other ones, but it worked. It’s actually much simpler than the other methods and it still gave me what I needed. I now have a working installation of a complete platform which integrates blogging, social networking, and forums. In a way, it’s like having simple versions of Drupal and Ning in the same install. Perfect for tests.

Some conventions.

<dbname> commondb
<name> common
<username> alexandre
<bbname> forums
<adminpass> (generated) 5e6aee85e6d4
<blogname> uethnographer
<blogpass> (generated) 601a6100
<confkey> (generated)
  1. [T] refers to things done in Terminal.app
  2. [B] refers to things done in the browser (Safari.app in my case)
  3. Brackets serve to refer to installation-specific items. I could have used variables.
    1. <dbname> is the database name in MySQL (can be anything)
    2. <name> is the name used for the WordPress install (domain/<name>; can be anything)
    3. <username> is the abbreviated username on the local machine. ~<username> would be the user’s home directory. Determined in Mac OS X.
    4. <bbname> is the name for the bbPress install  (domain/<name>/<bbname>; can be anything)
    5. <adminpass> is the password for the WordPress admin (generated)
    6. <blogname> is the main username for a blog administrator (can be anything)
    7. <blogpass> is the password for that blog administrator (generated)
    8. <confkey> is a confirmation key upon creating that blog administrator (generated)

So, here’s what I did.

  1. Switched to a user with administrative rights on my Mac. I usually work with a non-admin user and grant admin privileges when needed. Quite cumbersome in this case.
  2. Opened Terminal.app
  3. Installed and configured MAMP
    1. Downloaded http://downloads.sourceforge.net/mamp/MAMP_1.7.2.dmg.zip and copied the MAMP folder to /Applications
    2. Opened MAMP.app
    3. Changed MAMP preferences
      1. Preferences
      2. Ports: “Default Apache and MySQL ports”
      3. Apache: Choose: /Users/<username>/Sites
      4. Clicked Ok
  4. Clicked “Open home page” in MAMP
  5. Went to phpMyAdmin
  6. Created a database in phpMyAdmin with <dbname> as the name
  7. Edited /etc/hosts to add: 127.0.0.1 localhost.localdomain
  8. Downloaded WordPress µ through Subversion: [T] svn co http://svn.automattic.com/wordpress-mu/branches/2.8 /Users/<username>/Sites/<name>
  9. Went to my local WordPress µ home: [B] http://localhost.localdomain/<name>
  10. Filled in the necessary information
    1. “Use subdirectories” (subdomains would be a huge hassle)
    2. Database name: <dbname>
    3. User Name: root
    4. Password: root (changing it is a huge hassle)
    5. Title (title for the main WPµ install, can be anything)
    6. Email (valid email for the WPµ admin)
    7. Saved changes
  11. Noted <adminpass> for later use (generated and displayed)
  12. Changed file ownership: [T] chmod 755  /Users/<username>/Sites/<name> /Users/<username>/Sites/<name>/wp-content/
  13. Logged into WPµ admin: [B] http://localhost.localdomain/<name>/wp-admin/
    1. User: admin
    2. Password: <adminpass>
  14. Changed plugin options: [B] http://localhost.localdomain/<name>/wp-admin/wpmu-options.php#menu
    1. Plugins: check
    2. “Allow new registrations”: “Enabled. Blogs and user accounts can be created.”
    3. “Add New Users”: Yes
    4. “Upload media button”: Checked Images/Videos/Music
    5. “Blog upload space”: 100MB
    6. Clicked “Update Options”
  15. Installed BuddyPress directly
    1. [B] http://localhost.localdomain/<name>/wp-admin/plugin-install.php?tab=plugin-information&plugin=buddypress&TB_iframe=true&width=640&height=542
    2. Clicked “Install”
    3. Clicked “Activate”
    4. Moved BP themes to the right location: [T] mv /Users/<username>/Sites/<name>/wp-content/plugins/buddypress/bp-themes /Users/<username>/Sites/<name>/wp-content/
    5. Moved the BP Default Home theme to the right location: [T] mv /Users/<username>/Sites/<name>/wp-content/bp-themes/bphome/ /Users/<username>/Sites/<name>/wp-content/themes/
    6. Activated the BP Default Home theme: [B] http://localhost.localdomain/<name>/wp-admin/wpmu-themes.php
      1. Clicked yes on “BuddyPress Default Home Theme”
      2. Clicked Update Themes
    7. Activated the BP theme
      1. [B] http://localhost.localdomain/<name>/wp-admin/themes.php
      2. Clicked “Activate” on “BuddyPress Default Home”
    8. Added widgets to the BP theme
      1. [B] http://localhost.localdomain/<name>/wp-admin/widgets.php
      2. Placed widgets through drag-and-drop
    9. Checked the BuddyPress install: [B] http://localhost.localdomain/<name>
  16. Installed and integrated bbPress
    1. Downloaded bbPress using Subversion: [T] svn co http://svn.automattic.com/bbpress/trunk/ /Users/<username>/Sites/<name>/<bbname>/
    2. Went through the install process: [B] http://localhost.localdomain/<name>/<bbname>/bb-admin/install.php
    3. Go to step 1
    4. Added the following details
      1. Database Name <dbname> (same as WPMU)
      2. Database user root
      3. Database password root
      4. Clicked Save database configuration file
    5. Check for configuration file
    6. Go to Step 2
    7. Added the following details
      1. Add integration settings
      2. Add user database integration settings (without the cookie integration)
      3. User database table prefix wp_
      4. WordPress MU primary blog ID 1
      5. Clicked “Save WordPress integration settings”
    8. Clicked “Go to step 3”
      1. Added the following details
        1. Site Name (Name of the bbPress site, can be anything)
        2. Key Master username admin
        3. First Forum Name (Name of the first forum, can be anything)
        4. Clicked “Save site settings”
    9. Complete the installation
    10. Ignored the warnings
    11. Went through the writing options: [B] http://localhost.localdomain/<name>/<bbname>/bb-admin/options-writing.php
      1. Username: admin
      2. Password: <adminpass>
      3. Clicked on XML-RPC Enable the bbPress XML-RPC publishing protocol.
      4. Clicked “Save changes”
    12. Went to the discussion options: [B] http://localhost.localdomain/<name>/<bbname>/bb-admin/options-discussion.php
      1. “Enable Pingbacks”: “Allow link notifications from other sites.”
      2. Clicked “Save Changes”
    13. Moved the BuddyPress/bbPress integration plugin to the right location: [T] mv /Users/<username>/Sites/<name>/wp-content/plugins/buddypress/bp-forums/bbpress-plugins/buddypress-enable.php /Users/<username>/Sites/<name>/<bbname>/my-plugins/
    14. Went to the bbPress plugin options: [B] http://localhost.localdomain/<name>/<bbname>/bb-admin/plugins.php
      1. Clicked “Activate” on “BuddyPress Support Plugin”
    15. Went to the WPµ site: [B] http://localhost.localdomain/<name>
    16. Clicked “Log Out”
    17. Registered a new user: [B] http://localhost.localdomain/<name>/register
      1. Username <blogname>
      2. Email address (blog administrator’s valid email)
      3. Name (full name of blog administrator, can be anything)
      4. Clicked “Next”
      5. “Blog Title” (name of the blog administrator’s main blog, can be anything)
      6. Clicked “Signup”
      7. Checked for email at blog administrator’s email address
      8. Clicked confirmation link: [B] http://localhost.localdomain/<name>/activate?key=<confkey>
      9. Noted <blogpass> (generated)
      10. Gave administrative rights to the newly created blog administrator: [B] http://localhost.localdomain/<name>/<bbname>/bb-admin/users.php
        1. Logged in with admin/<adminpass>
        2. Clicked on <blogname>: Edit
        3. Clicked on “User Type: Administrator”
        4. Clicked on “Update Profile”
      11. Edited the bbPress configuration file:
        1. [T] open -e /Users/<username>/Sites/<name>/<bbname>/bb-config.php
        2. Added the following:
          1. $bb->bb_xmlrpc_allow_user_switching = true;
          1. (say, after /**#@-*/)
        3. Saved
      12. Went to BuddyPress options: [B] http://localhost.localdomain/<name>/wp-admin/admin.php?page=buddypress/bp-forums/bp-forums-admin.php
        1. Logged in with admin/<adminpass>
        2. Added the following details
          1. bbPress URL: http://localhost.localdomain/<name>/<bbname>/
          1. bbPress username <blogname>
          1. bbPress password <blogpass>
        3. Clicked “Save Settings”
  17. That was it. Phew!

I ended up with a nice testing platform. All plugins I’ve tried so far work quite well, are extremely easy to install, and give me ideas about the SLA’s site.

It was an involved process and I wouldn’t recommend it to anyone who’s afraid of fiddling with a bit of code. But I did try it out and it seems fairly robust as a method. I could almost create a script for this but that’d mean I might receive support requests that I just can’t handle. I could also make a screencast but that’d require software I don’t have (like Snapz Pro). Besides, I think copy paste is easier, if you remember to change the appropriate items. Obviously, anyone who wants to use this procedure as-is should replace all the bracketed items with the appropriate ones for your install. Some are generated during the process, others you can choose (such as the name of the database).

I’m not extremely clear on how secure this install is. But I’m only running it when I need to.

You can ask me questions in the comments but I really can’t guarantee that I’ll have an answer.

Wheel Reinvention and Geek Culture

In mainstream North American society, “reinventing the wheel” (investing efforts on something which has already been done) is often seen as a net negative.  “Don’t waste your time.” “It’s all been done.” “No good can come out of it.”

In geek culture, the mainstream stigma on wheel reinvention has an influence. But many people do spend time revisiting problems which have already been solved. In this sense, geek culture is close to scientific culture. Not everything you do is completely new. You need to attempt things several times to make sure there isn’t something you missed. Like scientists, geeks (especially engineering-type ones) need to redo what others have done before them so they can “evolve.” Geeks are typically more impatient in their quest for “progress” than most scientists working in basic research, but the connection is there.

Reasons for wheel reinvention abound. The need to practice before you can perform. The burden of supporting a deprecated approach. The restrictions placed on so-called “intellectual property.” The lack of inspiration by some people. The (in)famous NIH (“Not Invented Here”) principle.  The fact that, as Larry Wall say, “there is always another way.”

Was thinking about this because of a web forum in which I participate. Although numerous web forum platforms exist as part of “Content Management Systems,” several of them free of charge, this web developer created his own content management system, including forum support.

Overall, it looks like any other web forum.  Pretty much the same features. The format tags are somewhat non-standard, the “look-and-feel” is specific, but users probably see it as the exact same as any other forum they visit. In fact, I doubt that most users think about the forum implementation on a regular basis.

This particular forum was created at a time when free-of-charge Content Management Systems were relatively rare.  The site itself was apparently not meant to become very big. The web developer probably put together the forum platform (platforum?) as an afterthought since he mostly wanted to bring people to his main site.

Thing is, though, the forums on that particular site seem to be the most active part of the site. In the past, the developer has even referred to this situation as a problem. He would rather have his traffic go to the main pages on the site than to the forums. Several “bridges” exist between the forums and the main site but the two seem rather independent of one another. Maybe the traffic issue has been solved in the meantime but the forums remain quite active.

My perception is that the reasons for the forums’ success include some “social” dimensions (the forum readership) and technical dimensions (the “reinvented” forum platform). None of these factors could explain the forums’ success but, taken together, they make it easy to understand why the forums are so well-attended.

In social terms, these forums reach something of a niche market which happens to be expanding. The niche itself is rather geeky in the passion for a product category as well as in the troubleshooting approach to life. Forum readers and participants are often looking for answers to specific questions. The signal to noise ratio in most of the site’s forums seems, on average, particularly high. Most moderation happens seamlessly, through the community. While not completely invisible, the site’s staff is rarely seen in most forum threads. Different forums, addressing different categories of issues, attract different groups of people even though some issues cross over from one forum to another. The forum users’ aggregate knowledge on the site’s main topic is so impressive as to make the site look like the “one-stop shop” for any issue related to the site’s topic. At the same time, some approaches to the topic are typically favored by the site’s members and alternative sites have sprung up in part to counterbalance a perceived bias on that specific site. A sense of community has been built among some members of several of the forums and the whole forum section of the site feels like a very congenial place.

None of this seems very surprising for any successful web forum. All of the social dynamics on the site (including the non-forum sections) reinforce the idea that a site’s succes “is all about the people.”

But there’s a very simple feature of the site’s forum platform which seems rather significant: thread following through email. Not unique to this site and not that expertly implemented, IMHO. But very efficient, in context.

At the end of every post is a checkbox for email notification. It’s off by default so the email notification is “opt-in,” as people tend to call this. There isn’t an option to “watch” a thread without posting in it (that is, only people who write messages in that specific thread can be notified directly when a new message appears). When a new message appears in a specific thread, everyone who has checked the mail notification checkbox for a message in that thread receives a message at the email address they registered with the site. That email notification includes some information about the new forum post (author’s username, post title, thread title, thread URL, post URL) but not the message’s content. That site never sends any other mail to all users. Private mail is done offsite as users can register public email addresses and/or personal homepages/websites in their profiles.

There’s a number of things I don’t particularly enjoy about the way this email notification system works. The point is, though, it works pretty well. If I were to design a mail notification system, I would probably not do it the same way.  But chances are that, as a result, my forums would be less successful than that site’s forums are (from an outsider’s perspective).

Now, what does all this have to do with my original point, you ask? Simple: sometimes reinventing the wheel is the best strategy.

Learning Systems Wishlist

In a blogpost, Learning Systems ’08 host Elliott Masie lists 12 features learning management systems could/should have.
Elliott Masie’s Learning TRENDS – Learning TRENDS – 12 Wishes for Our LMS and LCMS

A summary:

  1. Focus on the Learner
  2. Content, Content and Content
  3. Ratings, Please
  4. More Context
  5. Performance Support Tools
  6. Social Knowledge
  7. Learning Systems as Components
  8. Focus on the Role
  9. UserContent Authoring
  10. Learning Systems as Service
  11. The Lifecycle of Learning Systems
  12. Learning Systems as Human Capital/Talent Systems

While Masie’s focus is on training and learning in corporate situations, many of these ideas are discussed in other types of learning contexts, including higher education. Some of the most cynical of university professors might say that the reason this list could apply to both corporate and university environments is that university are currently being managed like businesses. Yet, there are ways to adapt to some of the current “customer-based” approaches to learning while remain critical of their effects.

Personally, I think that the sixth point (about “social knowledge”) is particularly current. Not only are “social” dimensions of technology past the buzzword phase but discussing ways to make learning technology more compatible with social life is an efficient way to bring together many issues relating to technology and learning in general.

Masie’s description of his “social knowledge” wish does connect some of these issues:

Learning Systems will need to include and be integrated with Social Networking Systems. Some of the best and most important knowledge will be shared person-to-person in an organization. The learner wants to know, “Who in this organization has any experience that could help me as a learner/worker?” In addition to the LMS pointing to a module or course, we need to be able to link to a colleague who may have the perfect, relevant experience based on their work from 2 jobs ago. The social dimension of learning needs to be harvested and accelerated by a new vision of our Learning Systems.

Throughout the past year, I’ve been especially intrigued about the possibilities opened by making a “learning system” like Moodle more of a social networking platform. I’ve discussed this at the end of a longish wishlist for Moodle’s support of collaborative learning:

  • Another crazy idea: groups working a bit like social networking sites (e.g. Facebook). You get “friends” with whom you can share “stuff” (images, comments, chats, etc.). Those groups can go beyond the limits of a single course so that you would use it as a way to communicate with people at school. The group could even have a public persona beyond the school and publish some information about itself and its projects. Moodle could then serve as a website-creator for students. To make it wackier, students could even maintain some of these contacts after they leave the school.
  • Or Moodle could somehow have links to Facebook profiles.

My curiosity was later piqued by fellow anthropologist Michael Wesch’s comments about the use of Facebook in university learning and teaching. And the relevance of social networking systems for learning strategies has been acknowledged in diverse contexts through the rest of 2007.
One thing I like about Masie’s description is the explicit connection made between social networking and continuity. It’s easy to think of social networks as dynamic, fluid, and “in the now.” Yet, one of their useful dimensions is that they allow for a special type of direct transmission which is different from the typical “content”-based system popular in literacy-focused contexts. Not only do large social networking systems allow for old friends to find another but social networks (including the Internet itself) typically emphasize two-way communication as a basis for knowledge transmission. In other words, instead of simply reading a text about a specific item one wants to learn, one can discuss this item with someone who has more experience with that item. You don’t read an instruction manual, you “call up” the person who knows how to do it. Nothing new about this emphasis on two-way transmission (similar to “collaborative learning”). “Social” technology merely helps people realize the significance of this emphasis.

I’m somewhat ambivalent as to the importance of ratings (Masie’s third point). I like the Digg/Slashdot model as much as the next wannabe geek but I typically find ratings systems to be less conducive to critical thinking and “polyphony” (as multiplicity of viewpoints) than more “organic” ways to deal with content. Of course, I could see how it would make sense to have ratings systems in a corporate environment and ratings could obviously be used as peer-assessment for collaborative learning. I just feel that too much emphasis on ratings may detract us from the actual learning process, especially in environments which already make evaluation their central focus (including many university programs).

Overall, Masie’s wishlist makes for a fine conversation piece.

Legal Sense: CMS Edition

This one is even more exciting than the SecondLife statement.

After the announcement that the USPTO was reexamining its patents in a case against open source course management software, Blackboard incorporated is announcing that it is specifically not going to use its patents to sue open source and other non-commercial providers of course management software.

From a message sent to users of Blackboard’s products and relayed by the Moodle community.

I am writing to share some exciting news about a patent pledge Blackboard is making today to the open source and home-grown course management community.  We are announcing a legally-binding, irrevocable, world-wide pledge not to assert any of our issued or pending patents related to course management systems or transaction systems against the use, development or support of any open source or home-grown course management systems.

This is a major victory. Not only for developers of Moodle, Sakai, ATutor, Elgg, and Bodington course- and content-management solutions, but for anyone involved in the open and free-as-in-speech approach to education, research, technology, and law.

Even more so than in Microsoft’s case, Blackboard is making the most logical decision it could make. Makes perfect business sense: they’re generating goodwill, encouraging the world’s leading eLearning communities, and putting themselves in a Google-like “do no evil” position in the general public’s opinion. Also makes perfect legal sense as they’re acknowledging that the law is really there to protect them against misappropriation of their ideas by commercial competitors and not to crush innovation.

A small step for a corporation … a giant step for freedomkind.

Moodle and Collaborative Learning

Something I just posted on a forum about the Moodle course management system.

Using Moodle: Thinking Through Groups

Here are some comments and observations about the “Groupsinterface (where an instructor can put participants in distinct groups) and other group-related features in Moodle.
I’m currently teaching a smallish ethnomusicology seminar and a large (170 students) introductory course in cultural anthropology at Concordia University in Montreal. I decided to get my intro students to work as teams on an ethnography project. It’s the first time in my (still relatively young) career that I’m getting students to do teamwork. Yes, it’s a challenge. Moodle has made it both easier and more difficult, IMHO.
Several of these are probably common feature requests from Moodle users and I’m not enough of a coder to implement any of those ideas. These comments also include “pie in the sky,” wacky, wishful thinking, “you gotta be kidding” thoughts about the potential of Moodle’s group-related features. Please excuse the craziness but don’t worry, it’s not contagious.
I’m using “instructor” for my role as the course creator and “participants” or “students” to refer to the people the instructor is putting in groups.

Observations, Comments

  • Listing participants by first name is inconvenient for large university classes. I would like to be able to sort students as I wish, as in the Participants list.
  • In large courses, it’s difficult to select participants who aren’t in any group yet. I understand that the interface is meant to make it possible for participants to be in multiple groups. But I believe it’s common for the instructor to be putting all students in separate groups. In such a case, it’d be so much easier to have the left-hand list of participants hide the ones which are already in a group and only show participants who still need to be put in groups. With 250 participants, scrolling that list back and forth has been very inconvenient.
  • The Participants and Groups sections overlap in function, IMHO. Maybe they could be merged. This would be especially useful in terms of messages. While searching for participants by group, selecting them, and adding them as recipients for a message works, it becomes quite cumbersome after a while.
  • When I click on a participant’s name in the left-hand list, I expect to be able to see to which team(s) this participant belongs.
  • I can select multiple participants in the left and right columns but I can’t select multiple groups to temporarily merge teams. This could be useful, especially while sending messages.
  • Several students seemed a bit puzzled about finding their groupmates. There could be a “group” section for students where they could not only see links to their groupmates’ profiles but also manage a kind of group profile.
  • It’s still somewhat unclear to me how Moodle handles groups. For instance, what does group visibility (separate or visible) mean for journal entries?
  • Maybe they can but I haven’t noticed how group participants may change the group’s name. That would be useful. Especially if they can add some information (available to the rest of the class or only to the instructor) about their group. Something like a group profile. In fact, it could summarize the profiles from all of the group’s members in one page (visibility to students as an option).

Feature Requests

  • In a way, it would be possible to work with groups as if they were individual participants. For instance, we could give grades to a group as a whole and have those grades show up in the group participants’ grade list. Or we could have one-click messaging for a group as a whole, directly from the Participants list.
  • It would be useful to be able to create a new group with selected students instead of having to prepare the groups in advance.
  • It could be neat to have both a group name and a unique group ID, especially with relatively large numbers of groups (I have about 40).
  • The number of participants in a team is very useful data and it helped me rebuild teams which had lost members during “drop and add.” Such data could be put in the interface so that the instructor can sort groups by numbers of participants.
  • Drag-and-drop (through AJAX) would be much more convenient than the current method for adding participants to groups. I guess this one is in the official plans but I want to voice my support for it! wink
  • It could be useful to be able to upload and download CSV or tab-delimited files with all the team information. The data might be available with grades or some such but it’d be very useful to download a grouped list of participants directly from the group interface. It would also be quite efficient to create groups in, say, Excel and be able to implement those groups in Moodle with a simple upload.
  • There might be a group building tutorial but I haven’t seen it in obvious places. Given the fact that the Moodle community is full of experienced instructors, that tutorial could have some advice about good grouping practices, maybe with some links to pedagogical issues.
  • There might be a group building tutorial but I haven’t seen it in obvious places. Given the fact that the Moodle community is full of experienced instructors, that tutorial could have some advice about good grouping practices, maybe with some links to pedagogical issues.
  • I haven’t checked if it might be available already but it’d be useful to have grouped Reports. I don’t want to monitor the activities of most of my students but it’d be useful to know if at least one group member is accessing Moodle frequently.
  • According to many people, it’s usually best for the instructor to create the groups, and it’s what I did. Yet, I wonder if there’s a way for students to create their own groups. If there is, I haven’t noticed it and my students haven’t either. (Maybe it’s a setting…)

Would These Work?

  • There could be a feature which would divide the course up into randomized teams automatically. I eventually used Lab Partners to create random teams that I then grouped in Moodle. It didn’t take me that long but it’s a bit error-prone and cumbersome. Fortunately, my teams will remain stable during the semester.
  • This one may seem like a far-fetched idea but it would be great to have more information about participants while we’re forming the teams. For instance, there could be a database field for majors or even MBTI results. Then, one could combine teams based on theavailable data. Of course, it’s beyond the purpose of Moodle and can probably be done in Excel, but it’s much easier to have everything in the same place.
  • I will have students assess the participation of their teammates. For a while, I was looking at the Workshop module as a way to implement this in Moodle. I ended up deciding on the use of a custom-made peer-assessment system (built at my university) but it could be an interesting feature of Moodle groups.
  • This might sound crazy but I imagine a way for groups to have their own Moodle subsection. We keep talking about peer-teaching and such and I can’t imagine a better than to have students create and manage their own mini-course. One major benefit would be to improve the interface, IMHO. The main Moodle section for the course would contain all the public information and activities. All the “separate groups” activities and material would appear in “group mode.” Students could then understand very clearly what is visible to everyone in the course and what is meant for their subsection only. In separate sections of a course taught by the same instructor (or, in fact, by different instructors) it could also have amazing benefits. I seem to recall something like this instructor-section idea being discussed for a future version of Moodle. But the Moodle take could also have a student-focused structure. Of course, this should not have to go all the way to the Moodle administrator and instructors should be able to create these subsections themselves. But, if at all doable, it would help Moodle leapfrog Sakai (which does handle course sections).
  • I pretty much like the notion of a “session” or “workspace,” which might be the reason why I tend to separate a student’s participation in the course as a whole (through the main Moodle interface for a course) from a student’s participation in a specific team (through a subsection of the Moodle site for the course). So this might be idiosyncratic (and lunatic) but I’m getting a very clear idea of how this might all work. After all, the granularity of “a course” is both too large (“coarse?” wink ) and too fine for many of our needs. Any “course” could become something of a “metacourse” and the structure could be somewhat recursive.
  • Participants could have profiles to be shared only with their groupmates. As it stands, I think the scope of Moodle profiles is system-wide (students have the same profile for all of the courses they take at the same institution, but not for courses they might take on other Moodle installations). Having group-only profiles would be interesting as students manage their relationship with teammates.
  • Another crazy idea: groups working a bit like social networking sites (e.g. Facebook). You get “friends” with whom you can share “stuff” (images, comments, chats, etc.). Those groups can go beyond the limits of a single course so that you would use it as a way to communicate with people at school. The group could even have a public persona beyond the school and publish some information about itself and its projects. Moodle could then serve as a website-creator for students. To make it wackier, students could even maintain some of these contacts after they leave the school.
  • Or Moodle could somehow have links to Facebook profiles.

Ok, I’m really going overboard. It’s just that I really love Moodle and want it to do everything at the same time. Using groups has opened up a whole new side of Moodle for me and I find myself thinking out loud a lot.