## January 20, 2009

### Instiki News

As you probably noticed, I took a vacation from blogging to devote my online time to working on Instiki. I’ve made 82 commits to the source repository since my last post on the subject. Much of the motivation came from helping the n-Category Café folks set up their long-promised Wiki.

They went with a VPS from A2 Hosting. Helping them set up their Instiki installation taught me a bunch of things about installing and running under Linux (CentOS, in particular), and I think the instructions on the Instiki website are much improved, as a consequence.

There also were some new features that they needed. And with new features, one naturally uncovered various bugs — some new, some old — which needed fixing. I decided that, rather than waiting for new circumstance to cause me to stumble upon other long-existing, but obscure, bugs. it would be worthwhile to comb through the bug database for the main branch of Instiki. The experience was quite an eye-opener. Lots of really trivial bugs, and one real doozy, which had languished for years.

The doozy was this one. Go to the HomePage of any Instiki installation, click on Edit, add the line

[[!include HomePage]]

and click Submit. Now, the existing code said:

   def get_unmask_text_avoiding_recursion_loops(rendering_mode)
⋮
if renderer.wiki_includes.include?(@content.page_name)
# this will break the recursion
⋮
end
⋮
end

As my grandfather used to say, “Es shtait doch geshribben!Obviously, the code avoids recursive includes; it says so in plain English!

Umh … well … if you try it you can practically smell the smoke curling out of the webserver, as Rails churns and churns until, mercifully, it finally runs out of stack space.

This really wouldn’t do. So, to usher in 2009, I bumped the version number and am asking everyone to please upgrade.

The other fixes and enhancements, since version 0.15 (10/17/2008), include

• Automatic Theorem numbering: can refer to numbered theorems by \ref{…}, as in LaTeX.
• Add a user interface to delete a Web.
• Add a user interface to delete orphaned pages in a Category. In addition to deleting all orphaned pages, you can now delete just the orphaned pages in a particular category. Among other things, this provides a handy way to delete a (selection of) page(s): just assign them to a new category (“delete”, say), and delete the orphaned pages in that category.
• BlahTeX/PNG Support (from Ari Stern). For the luddites, among you, old-skool pictures of your equations, instead of MathML.
• Serve Webs which use non-Markdown Text Filters (Textile, RDoc or Mixed) as text/html. This makes those Text Filters usable, again, making this branch of Instiki suitable to be a drop-in replacement for the main branch.

#### Bugs fixed:

• Fix to xhtmldiff. Previously, “<ul><li>a</li><li>b</li></ul>” would match “<ol><li>a</li><li>b</li></ol>”, which is somewhat undesirable.
• Fixed an issue in the Sanitizer.
• Worked around an issue where the HTML5lib Sanitizer produces ill-formed XHTML output.
• Do dnsbl lookups more judiciously. Anti-spam effectiveness is undiminished, but the application is more responsive.
• When recovering from an Instiki::ValidationError, upon saving a page, try to avoid throwing away all the user’s changes. Instead, give him a chance to correct whatever it was that caused the error.
• Fix a Session CookieOverflow when rescuing Instiki::ValidationError.
• Domain-independent caching. Previously, Instiki cached pages by domain name. So, editing http://your.site.com/show/HomePage would not expire the cache for http://www.your.site.com/show/HomePage, which was counterintuitive and frustrating.
• Don’t cache pages with Flash messages on them. It was annoying that these Flash messages were getting cached.
• Expire pages that include a modified page. This was another cause of stale cache pages.
• Deleting orphaned pages expires cached summary pages. Yet another source of stale cached pages.
• Links on “published” Webs were all screwed-up. Fixed.
• Make uploaded pictures display in the “published” view.
• Make @import rules in the “Stylesheet Tweaks” work in the “published” view.
• Actually verify the password, when setting a password for a Web, rather than just pretending to do so.
• <nowiki>[[!include foo]]</nowiki>” renders as “[[!include foo]]”, rather than as “chunk18226682includechunk” or some such garbage.
• Prevent Recursive includes (for real, this time).
• Hide Equations From WikiChunk Processing
• Fix a bug in the Chunk handler, which was mangling backslashes in included pages.
• Entering the wrong password on the “CreateWeb” form now redirects back to the form, as it should.
• Allow single-letter WikiLinks (e.g. “[[a]]”). Requested by a Japanese user.
• Allow single-letter includes (e.g. “[[!include a]]”).

Instiki now runs on Rails 2.2.2, which necessitates one less-than-obvious configuration change. If, as I recommend, you run Instiki as an unprivileged user, then the Instiki directory itself needs to be writable by that user.

 chown instiki .

Otherwise, Instiki falls back on in-memory caching, instead of using the desired filesystem caching. This is true, even when the cache directory and all its subdirectories are owned by the unprivileged user (so you’d think he could write to them).

Posted by distler at January 20, 2009 12:14 AM

TrackBack URL for this Entry:   http://golem.ph.utexas.edu/cgi-bin/MT-3.0/dxy-tb.fcgi/1893

### Re: Instiki News

And how was your vacation? You have a nice blog! Especially the science topic.

Posted by: Q5 Webdesign on January 22, 2009 7:23 AM | Permalink | Reply to this

### Re: Instiki News

Great work on your branch of Instiki!
Main branch of Instiki is currently outpaced significantly by your branch, which would make it the main option for users that want to use Instiki.

Posted by: Peter Ljung on January 23, 2009 2:58 AM | Permalink | Reply to this

Post a New Comment