This post originated from an RSS feed registered with Ruby Buzz
by Christian Neukirchen.
Original Post: Nanoki
Feed Title: chris blogs: Ruby stuff
Feed URL: http://chneukirchen.org/blog/category/ruby.atom
Feed Description: a weblog by christian neukirchen - Ruby stuff
Over the weekend, I wrote a Wiki in Ruby called Nanoki, which is
named that way because it’s supposed to be small and lightweight.
Now, writing a Wiki is neither hard nor very complex, and many people
did it before me already; in many different languages and Ruby too, of
course. I wrote Nanoki because I had some special needs related to
the rendering and markup of the pages (yeah, I want to use BlueCloth,
RubyPants, Vooly, Kashmir and ClothesLines everywhere, I know.
You should do too. :-)).
Instead of looking for a Ruby Wiki, I just started to write one. Even
the ones supposed to be small, as
RubyMiniWiki are spread
over multiple files, and not as clean as I wanted them. Others, like
Ruwiki probably require far
bigger changes than I wanted to do. If there was something like
usemod in Ruby
(real Ruby), maybe I’d have adapted it.
Nanoki really is nothing special and I don’t want to publicize the
code yet, but what’s more interesting is the way creeping featuritis set in,
because you think like this: Ok, now I can view and edit pages; damn,
I’d really like to keep a history, and whup, I was keeping old pages.
Then, oh! I’d like to keep informed about recent changes, let’s add
a RecentChanges page. Whup. I don’t want to browse RecentChanges all
the time! Whup, RSS feed of RecentChanges. Now, the first users
complain: It’s too hard to add images, and I don’t have a server
to keep and link to them. Whup, image upload and helpers to refer to them.
These images are too large! Whup, thumbnail generation.
It really hit me. And I really tried to keep it all small and clean.
Well, now it’s a bit over 400 lines of code, but mind that all the
hard jobs were done already… CGI interfacing (rather easy, but I
wouldn’t really want to develop multipart encoding on my own), the
rendering pipeline (I threw a WikiWords filter in) and my templating
engine. Don’t forget the datastore, I use PStore so far, but it may
be too inefficient the way I use it. The code is comparatively clean,
though I still inline templates and (need to) use lots of regexps
for filename twiddling.
Also, although it only runs (and probably only ever will) on CGI, the
design of the application is a bit Railish. For example, the main
method dispatches this way:
if %w{view edit rss upload source}.include? cgi.query_string
send @action=cgi.query_string
else
view
end
And I use some instance variables to add messages (and errors) to my
pages. Mind that I only use(d) Rails for a few days, there were still
some concepts that just sneaked in. :-)
Now, I’m not sure whether to publish Nanoki, as it would probably make
the thing even bigger as some stuff is still hardcoded and the code
really is nothing special. But then, there may be lots of other
people in the situation I was in Saturday morning and who don’t want to
spend a weekend throwing out a few hundred LoC…