\documentclass{seminar} \usepackage[usenames]{color} \ \vspace{1.1in} == WikiGateway == \vspace{1.3in} \hfill __Presented by Bayle Shanks__ ---- == Start with an example: == == command-line wikiclient == ---- == Write to wiki page == \begin{verbatim} $ wikiclient \ --type=usemod1 \ write http://www.usemod.com/cgi-bin/mb.pl:SandBox \ --summary="just a test" This is a test. \end{verbatim} ---- == Read wiki page == \begin{verbatim} $ wikiclient \ --type=usemod1 \ read http://www.usemod.com/cgi-bin/mb.pl:SandBox \end{verbatim} {\color{MidnightBlue}This is a test.} ---- == Get RecentChanges == \begin{verbatim} $ wikiclient --type=usemod1 rc MeatBall | head -n 7 \end{verbatim} {\color{MidnightBlue} URL=http://www.usemod.com/cgi-bin/mb.pl\\ link: http://www.usemod.com/cgi-bin/mb.pl?SandBox\\ comment: just a test\\ lastModified: 2005-09-09T05:28:23+00:00\\ version: 3091\\ name: SandBox\\ author: user-10cmeae.cable.mindspring.com } ---- == Get AllPages == \begin{verbatim} $ wikiclient --type=usemod1 allpages MeatBall | head -n 4 \end{verbatim} {\color{MidnightBlue} AGroupIsItsOwnWorstEnemy\\ AalbertTorsius\\ AbandonPage\\ AbbeNormal } ---- == Get past versions of pages == \begin{verbatim} $ wikiclient \ --type=usemod1 info MeatBall:SandBox --version=3080 \end{verbatim} {\color{MidnightBlue} comment: [WikiSpam: This is a sandbox, so all editing is, \\ basically, spam. Plus, it covers the \\ occasional spam reversion.] \\ date: 2005-09-01 00:22:00.00\\ version: 3080\\ author: p5496371E.dip0.t-ipconnect.de } ---- === Talk outline === ==== Part I: What is WikiGateway? ==== # WikiGateway as a library: supported programming languages # WikiGateway as a proxy: Supported protocols # Supported WikiEngines ==== Part II: Why is it exciting and what can you do with it? ==== # Why WikiGateway # Problems caused by WikiGateway # WikiGateway applications ---- === What is WikiGateway? === * Middlewear * It's a library * It's a proxy server * It's a suite of tools, including command-line tools * It's a central repository of screen-scraping code ---- == WikiGateway as a library == ---- ---- === WikiGateway as a library === * Perl * Python === Python API example === \begin{verbatim} import WikiGateway wg = WikiGateway.WikiGateway(\ 'http://interwiki.sourceforge.net/cgi-bin/wiki.pl', \ 'oddmuse1') wg.getPage('SandBox') wg.getAllPages() wg.getRecentChanges('April 11, 2005') wg.putPage('SandBox', 'py wg test') wg.getPageHistoryInfo('SandBox') wg.getPageInfoVersion('SandBox', 429) \end{verbatim} ---- === WikiGateway as a proxy server === ---- \centering === WikiGateway as a proxy server === \begin{graph} size="2.5,2.5" client g [label="WebDAV gateway server"] wiki [label="Wiki server\n(running standard\nwiki engine)"] client -> g [dir=both, label="WebDAV"] g->wiki [dir=both, label="Wiki server's\nstandard web\ninterface"] \end{graph} ---- === Interoperate with other standards-compliant tools! === Mount DAV example Supported protocols: * Atom * WebDAV * WikiRPCInterface ---- == Supported WikiEngines == ---- == Supported WikiEngines == A unified interface to different types of wiki engines! * OddMuse * UseMod * MoinMoin * MediaWiki * Or any WikiRPCInterface-supporting server ---- == How you can help extend WikiGateway == * Write a "driver" for your favorite WikiEngine * Modular; each driver is a separate file (a separate Python class) ** getPage, getPageVersion, getPageHTML, getPageHTMLVersion, getAllPages, getPageInfoLatestVersion, getPageHistoryInfo, putPage * Example: oddmuse1.py ** 192 lines of code (about 6 screenfulls) ---- == \begin{latex}Part II: Why is it exciting / what can you do with it?\end{latex} == ---- == Collection of screen-scraping code == * Developers are already spending time implementing interfaces to wiki engines ** WikiRPCInterface ** WWW::Wikipedia ** WWW:Mediawiki ** Pywikipediabot ** Dave Jacoby's UnifiedRecentChanges ** OddMuse:AutomaticPostingAndUploading ** WikiMinion So why not collect all of these efforts into a single library? ---- == Interoperability with standard protocols == Interoperate with other standards-compliant tools * without wiki engine developers having to do anything! * without tool-makers having to do anything! * the wiki community can defer choosing a single protocol \vspace{.5in} See also Janne Jalkanen's Wikimania paper and talk, \begin{latex}\mbox{\textbf{DavWiki - the next step of WikiRPCInterfaces?}}\end{latex} ---- == Wiki page interchange == Two steps to page interchange: # Programs able to read and write to wikis # Programs able to translate between wiki markup languages ---- == Freedom for users to choose their wiki software == \centering Example: users will be able to use MoinMoin as a frontend to interact with a UseMod wiki server \begin{graph} size="4,4" overlap=false rankdir=LR edge [dir=none] "MoinMoin\nfrontend" [shape=box] "UseMod\nwiki" -> "MoinMoin\nfrontend" [label="WikiGateway", len=3] "MoinMoin\nfrontend" -> user \end{graph} ---- == Client-side tool development == * Break the chicken-egg dilemma ** Servers don't provide an API because no clients ** No clients because few servers provide API * Wiki software will develop faster ** Today: *** **Convince 50 development teams** that your feature is a good idea *** **Implement** the feature for 50 different wiki servers *** **Convince 500 wiki admins** to upgrade their software ** With a WikiGateway-based client-side tools: *** Just implement the feature (once) *** Server developers, wiki admins don't need to do anything. ---- == Client-side tool development == * Solves problem of fragmentation of developer effort ** Many wiki developers, but spread between a large number of wiki engines ** Solution: write client-side tools compatible with many wiki engines ---- == Why WikiGateway: summary == * A central collection of screen-scraping code * Interoperability with standard protocols * Wiki page interchange * Freedom for users to choose their wiki software * Client-side tool development ---- == Problems caused by WikiGateway == * Security * Loss of common context ---- == WikiGateway applications == ---- === Applications that already exist: === * wikicp * spamclean.py bot * a tool to recursively upload text files inside a directory structure as wiki pages ---- === Applications of the future: === * wiki client * WikiRefactoringBrowser * wiki page interchange between different types of wiki engines * an offline wiki editer * UnifiedRecentChanges * global Search and Replace * .... ---- == Summary == If you want to access OddMuse, UseMod, MoinMoin, MediaWiki, or any WikiRPCInterface-supporting server, you can now do so using: * the command-line * Perl * Python * WikiRPCInterface * WebDAV * Atom I hope that people use this capability to build client-side tools for wiki. ---- == Acknowledgements == Thanks to * L. M. Orchard, David Jacoby (initial code) * Isolani, Benjamin Trott (Atom server) * Christian Scholz (DAVserver) * whoever worked on WikiRPCInterface * Dana Dahlstrom * Alex Schroeder, Lion Kimbro, David Cary, Mark Dilley, WikiSym reviewers, the members of MeatballWiki and CommunityWiki