Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

MojoMojo - the Elegant wiki, Catalyst-powered


Published on

MojoMojo is the most complex open source Catalyst application developed to date.

It is a Web2.0 wiki with AJAX live preview, hierarchical structure, tags, diffs, pluggable syntax, permissions/ACL, attachments, RSS feeds, a photo gallery, edit conflict resolution via 3-way merge, themes/skinning, localization, built-in full-text search, and a reverse index. Since it's built on top of the Perl Catalyst Web framework, MojoMojo supports any Web server, and includes its own standalone one. It also support any database backend supported by the DBIx::Class ORM, and has been successfully tested with PostgreSQL, SQLite, and MySQL.

Published in: Technology
  • Be the first to comment

MojoMojo - the Elegant wiki, Catalyst-powered

  1. 1. MojoMojo The Elegant wiki, Catalyst-powered Dan Dascalescu (dandv) YAPC::NA 2009-Jun-23 Twitter: mojomojowiki
  2. 2. Yet Another Perl Wiki? Not really.
  3. 3. Wikimatrix
  4. 4. … and more
  5. 5. Perl wikis <ul><li>TWiki </li></ul><ul><ul><li>Foswiki fork </li></ul></ul><ul><li>Socialtext </li></ul><ul><li>UseMod </li></ul><ul><ul><li>Oddmuse </li></ul></ul><ul><li>PodWiki </li></ul><ul><li>ikiwiki </li></ul><ul><li>November </li></ul><ul><li>WebGUI </li></ul>
  6. 6. Differentiating wiki features <ul><li>Hosted vs. install your own </li></ul><ul><li>Storage: text files vs. database </li></ul><ul><li>Page structure: flat vs. hierarchical </li></ul><ul><li>Editing usability – preview? </li></ul><ul><li>Folksonomy: tags? </li></ul><ul><li>Access control </li></ul>
  7. 7. Storage <ul><li>Flat text </li></ul><ul><ul><li>Scales “reasonably well”, ~10k pages </li></ul></ul><ul><ul><li>CERN: “users of larger webs will experience slower search and index response times” </li></ul></ul><ul><ul><li>Yahoo!: >300k pages, but slow </li></ul></ul><ul><li>Database </li></ul><ul><ul><li>Mediawiki </li></ul></ul><ul><ul><li>Pages in the millions </li></ul></ul>
  8. 10. Page structure Paris (genus) /botany/paris Paris (mythology) /mythology/greek/paris Paris, Texas /geography/usa/texas/paris Paris /geography/europe/france/paris Flat structure Tree hierarchy
  9. 11. When hierarchy doesn’t cut it <ul><li>You encounter this dog in a park in Paris, France </li></ul>
  10. 12. SuperFantastic - “Buddha Dog”, Under what path do you wiki about this?
  11. 13. Q: Which hierarchical path? <ul><li>travel/france/fun </li></ul><ul><li>travel/fun/france </li></ul><ul><li>fun/animals </li></ul><ul><li>fun/travel </li></ul><ul><li>animals/fun </li></ul>
  12. 14. A: it doesn’t really matter <ul><li>Add tags: </li></ul><ul><ul><li>travel </li></ul></ul><ul><ul><li>France </li></ul></ul><ul><ul><li>Paris </li></ul></ul><ul><ul><li>animals </li></ul></ul><ul><ul><li>dog </li></ul></ul><ul><ul><li>fun </li></ul></ul><ul><ul><li>Prozac </li></ul></ul>
  13. 15. Editing usability <ul><li>Wikipedia editing study </li></ul>Bolt|peters user experience -
  14. 16. Study finding <ul><li>The vast majority of users pulled up another instance of the Wikipedia page they were editing in order to see what it &quot;really&quot; looked like. </li></ul>
  15. 17. Usability recommendation <ul><li>Provide users a live preview of what the page looks like as the user edits it. </li></ul>
  16. 18. WYSIWYG not a panacea yet <ul><li>Show me the code </li></ul><ul><li>Crippled - dive demo at Foswiki </li></ul>
  17. 19. Access control
  18. 20. Wiki theory <ul><li>“ Everyone should be able edit any page” </li></ul>
  19. 21. Theory vs. practice <ul><li>In theory, there is no difference between theory and practice. In practice, there is. - Yogi Berra </li></ul>
  20. 22. Wiki practice <ul><li>The Movable Type wiki (the old, unofficial one) was closed down due to vandalism they couldn’t stop. - Deane Barker, Gadgetopia, </li></ul>
  21. 23. Other features <ul><li>Extensibility </li></ul><ul><li>Markup language </li></ul>
  22. 24. Perl wiki candidates
  23. 25. TWiki <ul><li>Evil </li></ul><ul><li>Use Foswiki </li></ul>
  24. 26. Foswiki <ul><li>Forked off TWiki </li></ul><ul><li>Storage: text files in RCS </li></ul><ul><li>Page structure: 2-level, web/page </li></ul><ul><li>Tags: no </li></ul><ul><li>Markup language: TWiki only (+HTML) </li></ul><ul><li>Preview: static, sequential; or WYSIWYG </li></ul><ul><li>Tons of plugins </li></ul>
  25. 27. Foswiki: - flat structure + breadcrumbs
  26. 28. ikiwiki <ul><li>Storage: text files in RCS </li></ul><ul><li>Markup language: flexible </li></ul><ul><li>Preview: static - code then output </li></ul><ul><li>Tags: no </li></ul><ul><li>Barebones </li></ul><ul><li>Last release: 2008-Oct </li></ul>
  27. 30. November <ul><li>Storage: ? </li></ul><ul><li>Page structure: ? </li></ul><ul><li>Tags: ? </li></ul><ul><li>Markup language: ? </li></ul><ul><li>Preview: ? </li></ul>
  28. 31. PodWiki <ul><li>Storage: text files </li></ul><ul><li>Markup language: multiple </li></ul><ul><li>Abandoned since 2007 </li></ul>
  29. 32. Socialtext <ul><li>Hosted </li></ul><ul><li>Target: mostly enterprise </li></ul><ul><li>Socialtext Open source code on GitHub </li></ul><ul><li>Storage: PostgreSQL via DBI </li></ul><ul><li>Markup language: multiple </li></ul><ul><li>Socialtext Unplugged works offline via TiddlyWiki + synching </li></ul><ul><li>3 people on #socialtext </li></ul><ul><ul><li>Topic: #socialtext - your place for git help </li></ul></ul>
  30. 34. UseModWiki <ul><li>Derived from the original arcane WikiWikiWeb </li></ul><ul><li>Links are always like “ GlueTheWordsTogether ” </li></ul><ul><li>Abandoned since 2007 </li></ul><ul><li>OddMuse forked off it </li></ul>
  31. 35. Oddmuse <ul><li>Storage: text files (no RCS) </li></ul><ul><li>Page structure: abandoned children </li></ul><ul><li>Preview: static - output then code </li></ul><ul><li>Markup language: plugins </li></ul><ul><li>“ Oddmuse is one Perl script ” (CGI) </li></ul><ul><li>7 folks on #oddmuse </li></ul>
  32. 36. Who’s the parent of this page?
  33. 37. WebGUI <ul><li>Popular as a CMS </li></ul><ul><li>A massive case of Not Invented Here Syndrome: </li></ul><ul><ul><li> </li></ul></ul><ul><ul><li> </li></ul></ul><ul><ul><li> </li></ul></ul><ul><ul><li> “Package for interfacing with SQL databases. This package implements Perl DBI functionality in a less code-intensive manner and adds some extra functionality.” </li></ul></ul>
  34. 38. The problems so far <ul><li>Storage in text files </li></ul><ul><li>Preview sucks </li></ul><ul><li>No hierarchical page structure </li></ul><ul><li>No tags </li></ul>
  35. 39. MojoMojo <ul><li>A Web2.0 wiki, web-server and database-backend agnostic, with live side-by-side AJAX preview, hierarchical page structure, pluggable syntax (HTML + Markdown/Textile, POD), tags, page permissions, RSS feeds, conflict resolution via 3-way merge, attachments with photo gallery, skinning, built-in search, localized in 9 languages, and plugins for DocBook, </li></ul>
  36. 40. Authors <ul><li>Marcus Ramberg </li></ul><ul><li>On GitHub: </li></ul><ul><ul><li> </li></ul></ul>
  37. 41. Technology <ul><li>Catalyst </li></ul><ul><li>DBIx::Class, SQL nested set trees </li></ul><ul><li>Template::Toolkit </li></ul><ul><li>HTML::FormFu </li></ul><ul><li>KinoSearch </li></ul><ul><li>Algorithm::Diff </li></ul><ul><li>HTML::Defang </li></ul><ul><li>… and the rest of CPAN </li></ul>
  38. 42. Live preview, try it @
  39. 43. Hierarchical page structure and breadcrumbs
  40. 44. Pluggable syntax <ul><li>Formatter chain runs in order: </li></ul><ul><ul><li>HTML::Defang </li></ul></ul><ul><ul><li>[[Wikilinks]] </li></ul></ul><ul><ul><li>POD </li></ul></ul><ul><ul><li>Markdown/Textile </li></ul></ul>
  41. 45. Skinnable
  42. 51. RSS feeds
  43. 52. Extending MojoMojo (live demos)
  44. 53. Creating a simple formatter <ul><li>A CPAN hyperlink </li></ul><ul><li>{{cpan My::Module}} -> </li></ul>
  45. 54. diff wiki blog <ul><li>wiki </li></ul><ul><ul><li>Timeless </li></ul></ul><ul><ul><li>One topic = all info </li></ul></ul><ul><ul><li>Prefers collaboration to comments </li></ul></ul><ul><li>blog </li></ul><ul><ul><li>Time-sensitive </li></ul></ul><ul><ul><li>Series of posts on one topic </li></ul></ul><ul><ul><li>Prefers comments to collaboration </li></ul></ul>A blog formatter - demo
  46. 55. MojoMojo’s Future <ul><li>Major efforts: </li></ul><ul><ul><li>Moosify </li></ul></ul><ul><ul><li>KiokuDB? </li></ul></ul><ul><ul><li>Migrate MediaWiki databases </li></ul></ul><ul><li>40+ suggestions at </li></ul>
  47. 56. Resources <ul><li> </li></ul><ul><li>#mojomojo on </li></ul><ul><li>Twitter: mojomojowiki </li></ul><ul><li> - suggestions </li></ul><ul><li>Source code on GitHub </li></ul>
  48. 57. <clap/>