Plone

Fabricating Freedom

Originally posted on theploneblog.org Free Software Developers at Work and Play I haven’t posted much here lately, but I have been writing. I recently finished my first semester as a doctoral student in Columbia’s school of journalism and one of the papers I completed draws directly on my experiences in the Plone Community.  A few years ago I remember being struck at how different open source development was from what I (and presumably others) imagined it to be. I kept pitching human interest stories to journalists, ones that might emphasize the playfulness, the sprinting, and the organizational experimentation, but got very few nibbles. So, I finally wrote some of this up myself before it all fades from memory: Fabricating Freedom: Free Software Developers at Work and Play The paper was for a wonderful class this semester at the New School taught by Paolo Carpignano (The Political Economy of Media - here is the syllabus). The class was all about the shifting relations between fabrication and communication, or more colloquially, work and play. We opened with Marx and Hannah Arendt and closed with Yochai Benkler and danah boyd. The piece I wrote is personal and anecdotal, but reflects on all that our community has taught me about free software, free culture, organizing, consensus building and the day to day politics of software development. enjoy.

Plone University

Originally published on theploneblog.org Open source software as pedagogical scaffolding, and F/OSS ecologies as a dialogical knowledge communities. This is a fun post recognizing the role of open source software and breaking routines in learning new programming patterns and paradigms. 7 Reasons I switched back to PHP after 2 years on Rails

Rails was an amazing teacher. I loved it’s “do exactly as I say” paint-by-numbers framework that taught me some great guidelines. I love Ruby for making me really understand OOP. God, Ruby is so beautiful. I love you, Ruby. But the main reason that any programmer learning any new language thinks the new language is SO much better than the old one is because he’s a better programmer now!

Asymmetric Competition and the CMS

Originally published on theploneblog.org

Beyond the CMS - What are Plone’s greatest future competitors? I recently encountered O’Reilly’s asymmetrical competition meme and think its a good jumping off point to discuss the differences between Plone’s perceived and actual competition. First, let’s catch up to where we are today:

Web 2.0 … The Machine is Us/ing Us

The opensource CMS horserace has seemingly settled on a few players, and without provoking any religious wars, I continue to be impressed with the richness and maturity of all of these projects. But here in the educational sector there are rumblings which I think will spread beyond our corner. In our world ‘C’ stands for Course, not ‘Content’, and the big players are Blackboard (which swallowed WebCT), Sakai and Moodle. Here too, competition may come from surprising corners, as the game itself changes beneath us.

Honest Software

Originally publihsed on theploneblog.org How hybrid economies help keep software honest. Last week’s Plone Conference was truly phenomenal - provocative, intense, and fun (big thanks Jon and ONE/Northwest!). One of the most amazing things I experienced last week was alluded to in Eben Moglen’s keynote (to be posted soon)- the manner in which this community has managed to bring together people who don’t ordinarily interact. Throughout the breakout sessions, I continued to question dividing us up according to our respective vertical sectors - Corporate, Non-Profit, Educational, and Government. As I have begun to write about elsewhere, systems like Plone can help balance the flow of communication and power between people in a variety of situations and settings. Content, collaboration, and community are contexts which exist across sectors, and the tools we all need cross over as well (sometimes with slightly different tunings). In many ways lumping together all the folks involved with education is odd. Universities are microcosms of cities, and their IT needs are as diverse as the the rest of the world. However, there are still structural and social similarities that form the basis for common language and culture. After engaging with my fellow educators a the educational panel session and the BOF session I understood the value of us sharing and strategizing, beyond just commiseration. But through it all, there was one thing that united all of the different attendees - a piece of general purpose software called ‘Plone’. It is worth dwelling on this mixture of participants and the varying forces they apply to the software. Lessig and Benkler have both been writing a great deal about hybrid economies lately, trying to understand their rhythms, and how we might be able to design them to succeed. They have been writing generally about the “commercial economy” and the “second economy” (sharing, social production, etc), but the lessons may cross over directly to our community. I realized in Seattle how beneficial diversity can be for software production. Most of the consultants using Plone are there strictly for traditional market considerations - to make a profit. They are helping to keep the software honest. Unlike some other open source projects which exclusively service the educational world, Plone is not sheltered from the raw, harsh forces of the commercial market. This means that some of the people using Plone use it because it helps them get their jobs done efficiently. Others have called this “productivity arbitrage”, and it is a concept that may hold the key to designing successful open source projects. It is challenging to imagine working backwards and trying to design a software ecology which captures the hearts and minds of such a diverse following. No small task. As Rheingold said “There’s been an assumption that since communism failed, capitalism is triumphant, therefore humans have stopped evolving new systems for economic production.” - Is Plone’s ecology an example of one of these new systems, and if so, what are our distinguishing characteristics?

One Python Per Child

Originally published on theploneblog.org The $100 laptop project has chosen Python as the primary development language for The Laptop. I was lucky enough to get my hands on an olpc developer board, and have spent a little time learning about the platform and project. While there are a few issues I have with the project, it is really an thrilling moment in educational technology and after holding the hardware in my own hands I actually believe this vision might truly manifest. The main reason I am writing about this in the Plone blog is I have learned that the olpc’s application development language of choice is Python!

New York State of Plone

Originally published on theploneblog.org Preliminary report on the Big Apple Sprint July fourth has come and gone, but the fireworks set off at last week’s sprint are still visible. The sprinters arrived at Columbia University bright and early, Wednesday morning. (note to all future sprint organizers: tell the caterers to skip the decaf and double the regular order). About ~13-15 sprinters were present, but we also coordinated remote sprints with Austria (+5 hours ahead) and Utah (-2 hours behind) meaning we were basically sprinting around the clock. We all used the freely available, plone-based, OpenPlans service to manage our collaboration and everyone found the software to be extremely reliable and easy to use. The sprint began with introductions and detailed demos of the tools and products people had been working on and were most proud of. Sprints are difficult to plan in advance since the skills and interests of the attendees are not decided until the final roster shows up. A diverse range of interests were represented, but common themes rapidly emerged

Death and Taxonomies

Originally published on theploneblog.org A forray into drupal 4.7’s taxonomy system and what Plone can learn from it. I have been moonlighting on a Drupal project and paying close attention to their taxonomy system. Drupal’s taxonomy/category/tagging system was completely revamped for their 4.6->4.7 release - a release close to a full year in the making, analogous to the Plone 2.0->2.1 “minor” point release. The site I have been working on, theicarusproject.net has a very rich collection of content, and one of the primary motivations for the migration is to get a better handle on the classification system - noboday can find anything on the current site. They were committed to Drupal long before I arrived, so I dug in with the hope of learning something from the contrast. PHP bashing aside, there are alot of interesting things happening in Drupal land. I hope to follow up this post with a few more cross-pollinating nuggets, but for now I will focus on their taxonomy system. Taxonomies in Drupal are considered the heart of the system, and the essential modules ship with the core and cannot be disabled. Most URLs in Drupal are effectively queries, much like our smart folders (actually, for anything aside from anti-chronological display order you need to install the Views module) but the display results are all instances of content with matching vocabulary terms. The absence of folders and containment initially confuses many administrators, and renders breadcrumbs largely useless, but does allow for the creation of sophisticated information architectures. Taxonomies are managed top-down, not bottom-up, and have a separate administrative interface for their creation and management. Once the taxonomy vocabularies are created, specific terms can be added to these vocabularies without having to create content associated with those terms (in contrast to a bottom-up category system, like the mediawiki). Category Management - Vocabulary Listings: vocabulary_listing Druapl supports multiple vocabularies, which can each be associated with one or more content types. Vocabularies can be flat, one level deep, or N-levels deep (hierarchical). They can be fixed or free form (meaning content authors can make up new categories upon content creation). The core tagging system does not support the creation of tags per-user, per-object - only per-object. Category Management - Add a Vocab: add_vocabulary Category Management - Add/Edit a Term: edit_term The Drupal taxonomy system is very powerful, but its power is very open ended and does not necessarily lead users towards a uniform experience. The confusion around categories and taxonomies is best exemplified by the category module meant to consolidate and simplify taxonomy and navigation, but there is no consensus on its incorporation into the core. A large number of modules are built around taxonomies. Core Drupal supports roles, but no groups (organic groups is a popular access delegatoin solution, but it is incompatible with other access restriction modules - so you have to choose one), and does not have a notion of containment (ie folders). So, for example, one way to restrict editing access is by enabling the taxonomy access module. Another useful module is the taxonomy browser which allows for advanced search against unions/intersections of vocab terms. Category Browser: category_browser Once vocabularies are created, and terms added, content can be associated with these terms: content_creation Working on this site really drove home the value in separating the navigation axis (section) from the thematic axis (keywords), and separating these dimensions was easy to accomplish with the taxonomy/category tools built into drupal. In particular, once the scheme was developed, managing vocabulary lists (even hierarchical ones) is intuitive, albeit slightly clunky. I further chose to introduce a free-form tagging dimension for member contributed posts which may or may not fit into the fixed taxonomy. This is similar to myspace and facebook allowing for free-form hobbies and interests, and banking on a large enough user base that there will be overlap and potentially interesting intersections. section_vocab keywords_listing The system still does not allow for the intuitive modeling of a many-to-many relationship, which I continue to think is the litmus test which will mark of a truly powerful taxonomy UI. There is still quite a bit of programmer know how involved in setting up this system so that it operates the way that content administrators expect, and arguably there are too many degrees of freedom introduced by such a general purpose modeling capability (if you think about it, a tagging system can essentially allow web administrators to model relationships which used to require programming custom applications against an rdbms). Nonetheless, Drupal’s taxonomy/category/vocabulary system definitely captures a few use cases more elegantly than Plone’s current core does. But perhaps the real lesson is the importance of not mixing navigation space and content space, which can be kept separate in Plone, but is all too easy to conflate (in Drupal too!). Note: most things I describe in this case study could have been accomplished within core Plone - I think the most interesting things here are the administrative UI for multiple vocabulary management, the different types of vocabularies, and how central they are in the construction of a Drupal site.

There is no folder

Originally published on theploneblog.org Do not try to bend the folder – that’s impossible. Instead, only try to realize the truth. Then you will see that it is not the folder that bends–it is only yourself. Tagging seems to have spurred a growing amount of research on categories and classification. A recent paper by Clay Shirky, entitled Ontology is Overrated: Categories, Links, and Tags directly challenges the desktop metaphor which currently underlies much of Plone’s UI. To be sure, it is certainly possible to model the connections that Shirky describes using topics, smart folders, and a disciplined use of keywords, but the metaphor is critical for designing and intuitive system, all the way down to the icon. I have recently been working a bit with Drupal, and their handling of this problem is worth checking out.  The core taxonomy module, combined with its corresponding menuing systems (menu, sitemenu, taxonomy menu) provide a great deal of flexibility in this regard. Organization is going organic.

The Me Generation

isomorphic surprises: stickies, tasty, and the importance of user contributed content I have been thinking alot about tagging lately, especially how a complete tagging system - comprised of user-item-tag triplets, is isomorphic to rdf’s subject-predicate-object triplets. It is amusing to think about how egocentric Web 2.0 is - The subject is always me. Web 2.0 might be made of people, but not just any people - Just the most important one in the world. Today I had a fun time trying to explain to people on irc the power and importance of user contributed content annotations within plone. Crucially, user content annotations are per-user, per-object, and in many cases a single user might want to annotate a particular object with more than one annotation. Interesting annotations can come in many flavors. There are free form notes, fine grained annotations (anchored to particular phrases - think msword trackback - or geometrical coordinates on the target - nice for image annotations), keyword annotations (aka - tags), etc ect. There many problems that can be solved with custom per user content annotations, including quiz and poll results, per student answer submission, and lately we have been working on allowing users to clip audio and video by annotating start and end times on media objects. It is important not to confuse per-user tagging with DC:Subject - the dc metadata is shared across all users (like categories in the wikipedia) and in that sense, is global. While we are on the topic of tags, it is useful to talk about the vocabulary that drives the tagging. Vocabularies can be fixed or free, individual or collaborative, and personal or shared. All of these variations are interesting in different cntexts, and have to do with whether or not I see your tags, or if we each are developing our own ontologies. In educational technology annotations are a big part of the problems we are trying to solve, but there are tons of use cases in the world at large. Additionally, a high performance, robust tagging engine can power personal content organization, like gmail’s labels. Which brings me to the products we have been developing at CCNMTL. We have been using PloneStickies, a general purpose content annotation framework, in production for over a year now. Built using AT References, it allows us to create per-user AT objects connected to the target object. AT Schema Annotations won’t do the trick here since, like DC:Subject, these annotations are instance-wide. Z3 annotations might work, but by building AT derived stickies, we pick up search, workflow, permissions, and the richness of AT. This allows us to quickly and easily develop custom stickies, like the StickyClip. PloneStickies has a ways to go, but the basics work great. It is not yet super useful out of the box, since the portlet it ships with only allows users to attach a single free form StickyNote to the target object. But it is great to develop applications with. It ships with with some super snazzy css stickies, complete with colored/resizable/title-barred/drop-shadowed/roll-upable/transparent-when-dragging notes, which can preserve their own x-y position and state across sessions and never fall off your screen. It now supports attaching multiple stickies to a target, but does not yet provide a mechanism for the target object to place the stickies itself. At first we thought we could implement a Plone tagging solution using this framework - just create a StickyTags made out of keyword fields, and voilà - plonr. Trouble was, since tagging is such a symmetrical model, its tough to build an efficient zodb implementation (for me, at least) that can handle all the querrying we wanted to do. Enter the tasty microapp and the PloneTasty proxy (about 90% done). Tasty is a stateful (sqlobject) turbogears component that exposes a REST api, ships with its own snazzy ajax tagging client, and can be used across frameworks, languages, and platforms. We are even hoping it can help make the world a better place. So StickyTags (which doesn’t exist) and PloneTasty are two implementations of the same concept, with StickyTags being the AT/zodb implementation and PloneTasty/tasty the new microapp design (mashup architecture?) we have been working on and are pretty psyched about. And if you act now, you get the knife set and the lint remover too, for just 3 easy installments.

Faster, Better, Cheaper

Originally published on theploneblog.org In this episode, Sean Kelly at NASA compares j2ee, rails, zope/plone, turbogears, django… cue the laughtrack Okay, this is a long one, but it rivals any comparison matrix: better-web-app Plone comes out shining, although arguably it compares apples to pomellas.  Someone with the chops should really cut this baby up into chapters, cause its  a win for dynamic  languages over j2ee, and python, and Plone to boot. (spoiler: he uses the zmi for “hello world” and ArchGenXML for the time tracking app).