MojoMojo - the Elegant wiki, Catalyst-powered

56
MojoMojo The Elegant wiki, Catalyst- powered Dan Dascalescu (dandv) YAPC::NA 2009-Jun-23 Twitter: mojomojowiki

description

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.

Transcript of MojoMojo - the Elegant wiki, Catalyst-powered

Page 1: MojoMojo - the Elegant wiki, Catalyst-powered

MojoMojoThe Elegant wiki, Catalyst-powered

Dan Dascalescu (dandv)

YAPC::NA2009-Jun-23

Twitter: mojomojowiki

Page 2: MojoMojo - the Elegant wiki, Catalyst-powered

Yet Another Perl Wiki?

Not really.

Page 3: MojoMojo - the Elegant wiki, Catalyst-powered

Wikimatrix

Page 4: MojoMojo - the Elegant wiki, Catalyst-powered

…and more

Page 5: MojoMojo - the Elegant wiki, Catalyst-powered

Perl wikis

• TWiki– Foswiki fork

• Socialtext• UseMod

– Oddmuse

• PodWiki• ikiwiki• November• WebGUI

Page 6: MojoMojo - the Elegant wiki, Catalyst-powered

Differentiating wiki features

• Hosted vs. install your own

• Storage: text files vs. database

• Page structure: flat vs. hierarchical

• Editing usability – preview?

• Folksonomy: tags?

• Access control

Page 7: MojoMojo - the Elegant wiki, Catalyst-powered

Storage

• Flat text– Scales “reasonably well”, ~10k pages– CERN: “users of larger webs will

experience slower search and index response times”

– Yahoo!: >300k pages, but slow

• Database– Mediawiki– Pages in the millions

Page 8: MojoMojo - the Elegant wiki, Catalyst-powered
Page 9: MojoMojo - the Elegant wiki, Catalyst-powered
Page 10: MojoMojo - the Elegant wiki, Catalyst-powered

Page structure

Tree hierarchy Flat structure

/geography/europe/france/paris Paris

/geography/usa/texas/paris Paris, Texas

/mythology/greek/paris Paris (mythology)

/botany/paris Paris (genus)

Page 11: MojoMojo - the Elegant wiki, Catalyst-powered

When hierarchy doesn’t cut it

You encounter this dog in a park in Paris, France

Page 12: MojoMojo - the Elegant wiki, Catalyst-powered

SuperFantastic - “Buddha Dog”, http://www.flickr.com/photos/35423169@N00/50088733

Under what path do you wiki about this?

Page 13: MojoMojo - the Elegant wiki, Catalyst-powered

Q: Which hierarchical path?

• travel/france/fun

• travel/fun/france

• fun/animals

• fun/travel

• animals/fun

Page 14: MojoMojo - the Elegant wiki, Catalyst-powered

A: it doesn’t really matter

• Add tags:– travel– France– Paris– animals– dog– fun– Prozac

Page 15: MojoMojo - the Elegant wiki, Catalyst-powered

Editing usability

• Wikipedia editing study

Bolt|peters user experience - http://boltpeters.com/wikipedia/

Page 16: MojoMojo - the Elegant wiki, Catalyst-powered

Study finding

• The vast majority of users pulled up another instance of the Wikipedia page they were editing in order to see what it "really" looked like.

Page 17: MojoMojo - the Elegant wiki, Catalyst-powered

Usability recommendation

• Provide users a live preview of what the page looks like as the user edits it.

Page 18: MojoMojo - the Elegant wiki, Catalyst-powered

WYSIWYG not a panacea yet

• Show me the code

• Crippled - dive demo at Foswiki

Page 19: MojoMojo - the Elegant wiki, Catalyst-powered

Access control

Page 20: MojoMojo - the Elegant wiki, Catalyst-powered

Wiki theory

• “Everyone should be able edit any page”

Page 21: MojoMojo - the Elegant wiki, Catalyst-powered

Theory vs. practice

• In theory, there is no difference between theory and practice.In practice, there is.- Yogi Berra

Page 22: MojoMojo - the Elegant wiki, Catalyst-powered

Wiki practice

• The Movable Type wiki (the old, unofficial one) was closed down due to vandalism they couldn’t stop. - Deane Barker, Gadgetopia, http://gadgetopia.com/post/6595

Page 23: MojoMojo - the Elegant wiki, Catalyst-powered

Other features

• Extensibility

• Markup language

Page 24: MojoMojo - the Elegant wiki, Catalyst-powered

Perl wiki candidates

Page 25: MojoMojo - the Elegant wiki, Catalyst-powered

TWiki

• Evil

• Use Foswiki

Page 26: MojoMojo - the Elegant wiki, Catalyst-powered

Foswiki

• Forked off TWiki

• Storage: text files in RCS

• Page structure: 2-level, web/page

• Tags: no

• Markup language: TWiki only (+HTML)

• Preview: static, sequential; or WYSIWYG

• Tons of plugins

Page 27: MojoMojo - the Elegant wiki, Catalyst-powered

Foswiki:- flat structure+ breadcrumbs

Page 28: MojoMojo - the Elegant wiki, Catalyst-powered

ikiwiki

• Storage: text files in RCS

• Markup language: flexible

• Preview: static - code then output

• Tags: no

• Barebones

• Last release: 2008-Oct

Page 29: MojoMojo - the Elegant wiki, Catalyst-powered
Page 30: MojoMojo - the Elegant wiki, Catalyst-powered

November

• Storage: ?

• Page structure: ?

• Tags: ?

• Markup language: ?

• Preview: ?

Page 31: MojoMojo - the Elegant wiki, Catalyst-powered

PodWiki

• Storage: text files

• Markup language: multiple

• Abandoned since 2007

Page 32: MojoMojo - the Elegant wiki, Catalyst-powered

Socialtext

• Hosted• Target: mostly enterprise• Socialtext Open source code on GitHub• Storage: PostgreSQL via DBI• Markup language: multiple• Socialtext Unplugged works offline via

TiddlyWiki + synching• 3 people on #socialtext

– Topic: #socialtext - your place for git help

Page 33: MojoMojo - the Elegant wiki, Catalyst-powered
Page 34: MojoMojo - the Elegant wiki, Catalyst-powered

UseModWiki

• Derived from the original arcane WikiWikiWeb

• Links are always like “GlueTheWordsTogether”

• Abandoned since 2007

• OddMuse forked off it

Page 35: MojoMojo - the Elegant wiki, Catalyst-powered

Oddmuse

• Storage: text files (no RCS)

• Page structure: abandoned children

• Preview: static - output then code

• Markup language: plugins

• “Oddmuse is one Perl script” (CGI)

• 7 folks on #oddmuse

Page 36: MojoMojo - the Elegant wiki, Catalyst-powered

Who’s the parent of this page?

Page 37: MojoMojo - the Elegant wiki, Catalyst-powered

WebGUI

• Popular as a CMS• A massive case of Not Invented Here Syndrome:

– Auth.pm– Cache.pm– Session.pm– SQL.pm: “Package for interfacing with SQL

databases. This package implements Perl DBI functionality in a less code-intensive manner and adds some extra functionality.”

Page 38: MojoMojo - the Elegant wiki, Catalyst-powered

The problems so far

• Storage in text files

• Preview sucks

• No hierarchical page structure

• No tags

Page 39: MojoMojo - the Elegant wiki, Catalyst-powered

MojoMojo

• 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,

Page 40: MojoMojo - the Elegant wiki, Catalyst-powered

Authors

• Marcus Ramberg

• On GitHub:– http://github.com/marcusramberg/mojomojo

Page 41: MojoMojo - the Elegant wiki, Catalyst-powered

Technology

• Catalyst• DBIx::Class, SQL nested set trees• Template::Toolkit• HTML::FormFu• KinoSearch• Algorithm::Diff• HTML::Defang• …and the rest of CPAN

Page 42: MojoMojo - the Elegant wiki, Catalyst-powered

Live preview, try it @ mojomojo.org

Page 43: MojoMojo - the Elegant wiki, Catalyst-powered

Hierarchical page structureand breadcrumbs

Page 44: MojoMojo - the Elegant wiki, Catalyst-powered

Pluggable syntax

• Formatter chain runs in order:– HTML::Defang– [[Wikilinks]]– POD– Markdown/Textile

Page 45: MojoMojo - the Elegant wiki, Catalyst-powered

Skinnable

Page 46: MojoMojo - the Elegant wiki, Catalyst-powered
Page 47: MojoMojo - the Elegant wiki, Catalyst-powered
Page 48: MojoMojo - the Elegant wiki, Catalyst-powered
Page 49: MojoMojo - the Elegant wiki, Catalyst-powered
Page 50: MojoMojo - the Elegant wiki, Catalyst-powered
Page 51: MojoMojo - the Elegant wiki, Catalyst-powered

RSS feeds

Page 52: MojoMojo - the Elegant wiki, Catalyst-powered

Extending MojoMojo(live demos)

Page 53: MojoMojo - the Elegant wiki, Catalyst-powered

Creating a simple formatter

• A CPAN hyperlink

• {{cpan My::Module}} -> http://search.cpan.org/perldoc?My::Module

Page 54: MojoMojo - the Elegant wiki, Catalyst-powered

MojoMojo’s Future

• Major efforts:– Moosify– KiokuDB?– Migrate MediaWiki databases

• 40+ suggestions at http://mojomojo.ideascale.com

Page 55: MojoMojo - the Elegant wiki, Catalyst-powered

Resources

• http://mojomojo.org

• #mojomojo on irc.perl.org

• Twitter: mojomojowiki

• mojomojo.ideascale.com - suggestions

• Source code on GitHub

Page 56: MojoMojo - the Elegant wiki, Catalyst-powered

<clap/>