Wiki With Programmable Content

Who knows a Wiki-System in which programmers can experiment with programmable content, integrated in a Wiki forum? -- FridemarPache

Why would we want to do this?

Security reasons aside (see below), why not? -- fp

The risk is running high of becoming a never-ending process yielding no results. Why indeed. With no purpose, there is no design. Of course, from an aesthetic perspective, Wiki is its own reward. Still, computers are already wiki enough. Software is never truly complete. Bug fixes and third-party support and beta testing and the like. It's all relative. Even the hardware is dynamic when the software becomes more static, but it's a cycle. It only serves us humans when we make the effort to break the cycle by obtaining and using output, or merely turning it off and breaking from the loop somewhere. Editing is not power, neither is restraint. Wiki enthusiasts need to read more Godel, Escher, Bach: an Eternal Golden Braid.

Swiki can do this - you can embed SmallTalk code directly in the pages you edit. See http://www.cc.gatech.edu/fac/mark.guzdial/squeak/pws/active.html

SeedWiki can also do this, but it's not really limited to a particular language. http://www.seedwiki.com/

I've explored this space with a wiki behind my own firewall. Although it gives my windows/browser environment a bit of the feel I've always had with Smalltalk, some errors I made while using it could only be debugged by the author of the server, i.e. me. -- WardCunningham

This boils down to SecurityPolicy? development. How does one create a SecurityPolicy? that implements a SecureSandBox? and a FunctionalSandBox? at the same time? CapabilitySystems like ErosOs supposedly provide ProvableSecurity?. It would be interesting to put a CapabilitySystem into a WikiWithProgrammableContent. -- TaralDragon

Tcl allows scripts inside a SecureSandBox? to implement a CapabilitySystem in the form of nested SecureSandBox?es. SoftWiki can use this to build a hierarchical access control system where each interpreter can impose its own arbitrary restrictions on interpreters that it creates. Of course the first and most important restriction of this kind is something to prevent the SecurityPolicy? script from being rewritten. -- ZygoBlaxell

I did made a WikiWithProgrammableContent, which we could call LukesProgrammableWiki, which takes the path of of running programs in a custom interpreter which simply doesn't provide any primitives that could be harmful. -- LukeGorrie


Part of the WikiNature as I understand it means that anyone can edit anything. Surely we don't want everybody to be able to run any script on our wiki servers. The really interesting question here is:"what security model do we use?" This causes an essential conflict between the safety and integrity of the server and the open-ended trust of the WikiNature. (N.B. I believe that NikiNiki already embeds JPython.) --

NikiNiki has some access control, so it's a bit safer to allow code, but allowing some pages to be active queries, and authored from a browser, is really cool. -- SteveFreeman

One of my perpetual prototypes allows edit access to the underlying Perl scripts, though I've found it more convenient to use an editor in a separate window. -- DaveSmith
PlatformForInformationApplications does some very neat stuff using ExtensibleMarkupLanguage, <if>,<let>,<while> tags, very interesting, plus the fact that they are using ServletHandlers? to implement the active tags adds another layer of indirection enhancing the security model a bit, and it's OpenSource, and it works. Definite potential, it might be the NextBigThing.
To whet the appetite, what about JavaScriptEnabledWikis. -- FridemarPache

AnotherPhpWiki has it.

There is a simple Lisp interpreter written in JavaScript, I wonder how they'd go together :-).

http://ganley.org/software/jslisp.html


Also a pretty complete ForthLanguage interpreter has been written in JavaScript: JsForth. Works now best with MozillaFirefox, MozillaBrowser, and NetscapeNavigator. OperaBrowser, KonquerorBrowser, and SafariBrowser don't get the cursor position right, InternetExplorer the Backspace key (try alternative backspace keys: Pause, Scroll Lock, center-5, Windows key...)

Together with the wiki markup in work here: http://fwiki.logilan.com , this may become a bundle which, server and client side, bases everything on Forth, though the interpreter is meant in first place as tutorial and practicing system. It can dynamically load Forth screen from cookies, ram drive and web servers!


ZwiKi does this too. The default markup mode permits embedded DTML (a reporting language) and limited python code. I believe these are interpreted in a safe manner. Some of the wiki functionality is implemented this way, eg the recent changes and jumpsearch pages.

Swiki, jslisp, ZwiKi: Then you or every user in your WikiForum could easily program -- FridemarPache


WikiTypeFramework has this too. But there is security to allow only 'trusted' individuals to create code. On http://wtfw.sourceforge.net/wtfw/index.php there are two examples of code that can be placed on pages: a calendar where clicking on a date generates the option of a new page, and the idea of accessing web services on a page. Of course, several other pages are also created on the fly by code.

Question: Fridemar, are you playing with all these constructs like DoubleColonMessage and the {} tagging to see how they'd work in the normal stream of text and how easy they are to maintain? So that if and when you write a WikiWithProgrammableContent you have some experience with them?

You are just testing/playing? (positioning 'Question:' at the start of your writing. You could have omitted it, without loss of content, thus making your note an AddressedAndSignedMessage:-). I thought of doing this, using the public-domain Win32Forth editor component WinView? of TomZimmer?. (See ForthLanguage) This amazing editor comes as Forth source, has two independent hypertext subsystems implemented. In browse-mode html-links (and some other elementary html-format-tags) are supported, and additionally each clicked Forth Word let you jump to its definition). This editor has even built-in a rudimentary online Web Browser. My main activity behind the scenes, the DataMusicProject doesn't allow me to do that at moment. Besides that, I think that there might be better existing solutions, as extensions of the standard Web Browsers. At moment I look urgently for existing DHTML-capable WikiForums. You would make me happy to add your favorite forum with programmable content in JavaScriptEnabledWiki, if you know one more. -- Fridemar


See SmartWiki for Wiki (Engines) With Programmable Content.


Sounds like WikiWithProgrammableContent and SmartWiki refer to any Wiki that allows code (store and execute) as well as text.

And MetaWiki says it's a WikiWithProgrammableContent that includes global options for trusted peers to reprogram the underlying WikiEngine of the respective WikiForum.

So MetaWiki is a subset of SmartWikis.


ZzoWiki you can enter programs in the text. Is that consider SmartWiki, or WikiWithProgrammableContent? Does it have enough commands?


There is no need that publicly programmable WikiClones impose a security threat at all. You only have to do it the right way. I'm currently into writing a ServerSideJavaScript interpreter running in the PhpLanguage (http://phpjs.berlios.de/), which will allow to run user contributed code in a SandBox (mixing it with ErfurtWiki and PhpWiki somewhen). That is safe as long as you do not provide raw access interfaces to the filesystem or allow unfiltered SQL queries. With a powerful API this would still allow for the majority of interesting features to be written, despite any security restrictions. See also the discussions on http://wikifeatures.wiki.taoriver.net/moin.cgi/AutomaticFeatureInstall -- MarioSalzer?


FlexWiki uses a custom programming language called WikiTalk to provide a very simple way to add dynamic content to the Wiki. WikiTalk is based on an object model that is capable of searching pages for WikiProperties? and acting on them.

http://jot.com is a wiki with structured forms and programmable pages. Jot's wiki markup includes search, if, etc.


Why would we want to do this?

On the Cryptodox wiki, it would be nifty to have "live examples" of encryption and cryptanalysis algorithms. Type in some text, see what the encrypted text looks like, etc. I imagine that "live example" for "simple substitution cipher" might look something like the substitution solving tool Simon Singh wrote ( http://www.simonsingh.net/The_Black_Chamber/frequencypuzzle.htm ).

If I ever get my data compression wiki online, "live examples" of data compression algorithms would be nifty. Type in (or paste) some text into one textbox, see several following textboxes show the several stages in compression, followed by the resulting compressed text (in hex?) and the compression ratio. But how do I allow people to improve, wiki-style, each other's experimental compression algorithms, without doing something harmful? I thought that was the whole point of Java and JavaScript -- that they could be contained in a SandBox, guaranteed impossible for them to do anything harmful? -- DavidCary


CollaborativeProgramming? is also a related term - see my summary http://keinze.wordpress.com/category/programming/

Mirko 20.05.2012


See also: SoftWiki, ForumWithProgrammableContent, AnotherPhpWiki, XpSystem, JavaScriptEnabledWiki, WikiWithMoreThanPages, WikiWithMoreThanUsers, ProgrammingInWiki


CategoryWikiImplementation

EditText of this page (last edited May 20, 2012) or FindPage with title or text search