The Genealogy of SAFARI (Or How Blogging Revived Old Code)
SAFARI (Standardized Automated Format and Retrieval Interface) began its life in 1999. I had a simple goal and wanted a simple solution: I was redesigning my church's web site and I wanted an easy way to post the entire church newsletter online. At the time, I had been tinkering with Perl for about two and a half years and thought I was a much better Perl wrangler than I really was. So I decided what every overambitious Perl programmer would decide: I'll write a content management system.
At the time, there were far less CMS's out there, I wasn't aware of more than a handful, and none of them did what I wanted — provide a way to sort articles by issue, a must for a monthly publication. I started working on SAFARI, and quickly started to realize the enormity of what I had taken on. I had no idea where to begin. But I trudged ahead, creating a relatively modular CMS that uses a flat-file database (that's a fancy term for a text file that stores your data), provided multiple levels of user access and eventually even a rudimentary search engine. In 2001, I released the code here, although honestly the code has some serious flaws which I knew, even at that time, needed to be corrected.
In fact, SAFARI was so focused on issue-based content, that I had to go with PHP-Nuke when I launched OfB, simply because SAFARI didn't work in the proper fashion for a normal internet publication. It was rather depressing, but laziness has a way of winning over pride, and so that was that. OfB was launched two months before I even released the SAFARI code, which made the release of SAFARI ever more depressing. However, SAFARI did serve its niche well, so I did release it with hopes that maybe someone would find it useful.
Blogging Days
My blog launched in February of 2002, at the time before blogging had really become all that well known. In fact, while I had heard the term, I had ignored the trend, and when my friend and fellow DMOZ-editor Ciaran Hamilton told me he had started a blog and offered his then-unreleased Journal script to use, I decided to give blogging a spin. This did compound the fact that within four months I had passed over using my own SAFARI script not once, but twice, but by that time I had given up any grand plans for SAFARI.
Hiya! My friend Ciaran Hamilton gave me this nice script, waddya think?How I wish I had the foresight that I'd still be blogging today. Eduardo started by invoking the muse from Homer's Illiad, I start with broken English that makes me cringe. But, I digress…
Ciaran's Journal code is probably one of the tightest blog codebases you will find. It is a compact, two file package that gets the job done well. I know that much, since it served me well from February 21, 2002 through December 23 of this past year, when it finally died for a reason I still do not know. During that time, I synchronized with his official code based once in November of 2002, after which I forked the code, adding commenting capabilities, a much more standard issue look (attempting to mimic MovableType somewhat) and a few other features.
This is the point at which my interest in blogging would become galvanized. Blogging was only so interesting when you didn't know if people were actually reading the posts. I know Ciaran and Kevin were at least occasional readers, but only because I knew them from elsewhere. It was my first post with commenting support that Christopher left a short comment and I realized I had a reader originating from the blogosphere — maybe I could get into this thing after all!
The Christian Directory Project (OpenMoz/FreeMoz)
Another important thread in this genealogy is the ill-fated FreeMoz project. FreeMoz is key for two reasons — first it is the project that brought me into contact with Ciaran and also some of the lessons in database design that I learned working on it figure into SAFARI later on. Long before my DMOZ-editorship lapsed, I made a post on the editors forums asking if anyone knew of a way to get the DMOZ codebase to create another specialized directory. Ciaran answered and after exploring the options, we decided to write our own replacement. I hacked the basics together in December of 2001, Ciaran added some much needed functionality and we would continue to work on it on-and-off for about a year. The project died, as Antony Flew would say, a death of a thousand qualifications, as we sought to garner support to develop the software needed to create a Christian variant of DMOZ. The impetus for the project was an issue, or I should say, issues with DMOZ, such as DMOZ's listing of X-rated material as well as the simple fact that “FaithMoz” could hopefully leverage the same concept to bring together a directory of Christian sites perhaps even better than DMOZ's, since there would not be as much “noise.”
Like SAFARI, building a whole directory project was a big deal. Hoping to attract developers to create the code-base, which would be useful for many directories, I began talks with Richard M. Stallman (RMS) of the Free Software Foundation about making the software, re-badged FreeMoz by RMS's request, an official GNU Project. We ended up getting bogged down in legal (i.e. avoiding infringement of AOL/Netscape's DMOZ) and editorial freedom issues, and the months we spent on that ended up killing off the momentum of the project. It was my fault for worrying to much about amassing major support, rather than the FSF's fault for worrying about legalities.
Back to SAFARI
In March of 2003, OfB was hacked, thanks to PHP-Nuke's poor security model. Having taken a week of vacation that very week, I resolved to spend the time figuring out a replacement for PHP-Nuke. I became convinced that all of the Nuke-spinoffs had issues, and blogging software simply wasn't quite right for a news site. What was I going to do? I decided it was time to revive SAFARI. However, SAFARI needed to be improved vastly for it to work on OfB. I would need to lose the issue based mentality of the CMS (or, more correctly, relegate it to one of several modes of viewing the content), add commenting, and most importantly, port the whole thing over to a SQL backend instead of the inefficient flat-file database.
I was able to do the last item within about three days, but after my work-vacation ended, I did not have time to finish the project. I also invested some time in fixing parts of PHP-Nuke, so I gave up the idea of bringing back SAFARI, once again. The promise of a really useful version of SAFARI, that I could use somewhere other than just my church's web site, was starting to seem like vaporware.
Over the next year, OfB would be compromised again and, at the same time, I started noticing things that were lacking in my forked version of Ciaran's Journal code. For example, I could not delete or edit posts or comments without editing the database manually (editing was especially tedious because the db was encoded). I also noticed that asisaid was becoming extremely slow and a huge resource hog, since each view of any post required the entire one megabyte database to be processed thoroughly. At some point, I resolved that I would make asisaid a test site for SAFARI, since it was a low traffic site and needed a needed a CMS — once I got SAFARI into a state where it worked satisfactorily here, I could move OfB to it as well.
Over the past year or so, every few weeks I'd take some time (usually a few hours) and start rewriting functions of SAFARI. I integrated the comment code I had written from my old Journal code, finished SQL-support and started implementing a more sensible theme system, similar to the one used by PHP-Nuke. The comment code is essentially SAFARI's only link to Ciaran's code, although it also incorporates some of the ideas from Journal codebase.
Back to Genealogy
If you've been following this byte-wasting toy of mine all the way to this point, you've probably noticed that SAFARI doesn't have a clear genealogy. SAFARI is an older codebase than Journal is, but it is also, in some senses, the decedent of Journal. Likewise, while porting SAFARI to SQL, I incorporated many of the ideas I had first tried out for FreeMoz, which had, conversely, borrowed some ideas from the original SAFARI. Once I complete the project, SAFARI 2 will probably have enough new code that it might be fair to say that it is the grandchild of SAFARI 0.9, Journal and FreeMoz, but it is not a simple linage at all.
Lastly, to believe themselves, when they tell you they will make you immortal by their verses. Thus doing, your name shall flourish in the printers` shops. Thus doing, you shall be of kin to many a poetical preface. Thus doing, you shall be most fair, most rich, most wise, most all; you shall dwell upon superlatives. Thus doing, though you be libertino patre natus, you shall suddenly grow Herculea proles — Sir Philip Sidney
OK, So It'll Be Tomorrow
Well, I had good intentions, but they don't always work out, right? Expect a real post tomorrow… hopefully. Also, I really hope to do the SAFARI upgrade tomorrow. It will include a real, verified RSS feed, properly working cookies, elimination of some display bugs and various other fixes. Hopefully I can get topics working again soon, as well. Plus the blogroll!
Say tuned….
Back Tomorrow
Sorry, but I guess Friday's post will have to become Saturday's post. I spent my “blogging time” working on getting some fixes and improvements to SAFARI ready. Hopefully I'll do an upgrade tomorrow of the site.
Hitting the High Points
Coming Home Again: Dad was discharged this afternoon from Barnes-Jewish St. Peters Hospital with a fairly clean bill of health. He'll need to go back in a few weeks to get his gullbladder removed, probably at BJC sister hospital Missouri Baptist, and they may also do something about his heart condition. An apparently amazing doc at Mo-Bap is looking into the case. The cardiologist that scared my dad at the beginning of the week by saying it was urgent that something be done for the heart, and not the gullbladder, changed his mind yesterday and said they probably didn't have to do anything in that department after all. Continued prayers for him are still needed, he isn't out of this stretch yet, but is progressing!
Music to My Ears: I finished my music reorganization project — a good nighttime project over the past week — which included the replacement of about 200 Ogg Vorbis files with AAC files (for iPod compatibility), the replacement of several dozen 96 kbps MP3 files from 1999 also with AAC files, and the elimination of almost all 128 kbps MP3 files in favor of AAC's as well. That was about 300 tracks to re-rip.
Plus, I ripped some CD's that I had bought for between $2-$7 at a big sale at Family Christian Stores this summer. I picked up Twila Paris' True North, Chris Rice's Smell the Color Nine and Past the Edges, Phillips Craig & Dean's Let My Words Be Few and Streams (a collection featuring, among other things, an excellent song from Sixpence None the Richer). The prices were much better than normal, needless to say. Even now, I barely put a dent into the iPod's hard disk, but at least all of my music will actually be playable and decent sounding now.
Coming topics on asisaid Music will include something on Evanescence. Kevin noted that for some reason he was connecting me with them, but I've never mentioned them on asisaid prior to the Challenge. I want to fix this, so I'll take a look at this interesting band. I'll also be doing one or more posts on Sixpence None the Richer — sort of a delinquent eulogy on this exceptional duo of Leigh Nash and Matt Slocum (and the others that joined and left the band over its history) that dissolved last March. If you aren't familiar with this C.S. Lewis-inspired band, I'll provide a few pointers on how to get a good taste of Sixpence without much effort. I may also do mini-reviews of Michael W. Smith's new Healing Rain and Steven Curtis Chapman's All Things New — both excellent, don't wait for me to recommend them, get them now if you are looking for a new CD or CD's.
Colorless Green Ideas Sleep Furiously: Or maybe they don't. But more quotes and other questions will return to the asisaid Challenge in the coming days. I need to go back and see if anyone answered any of the pending questions and re-tally the score. Then expect to be frazzled, even more so than those sleeping ideas.
Rain
It was a rainy day. Actually, it has been a rainy week. The Missouri River looks like it is nearing its banks, and the Mississippi River is swelling downtown. I wonder if this is a foreboding sign for the spring to come?
Mulling
I'm mulling over the stuff I mentioned yesterday. I might write something more about that tomorrow.
A bit of an update on Dad. Things are progressing, I think. They've got the gallbladder stabilized until his heart can take surgery again, but the heart issue remains. Things are looking good that a transfer might happen to a hospital with a world-renowned heart doctor that just happens to be in the area. This doctor is reviewing the case to decide if he wants to take it on. Its a long road ahead for Dad, I think, but if he can get in the hands of a doctor of this man's caliber, I think that might help lead to a solution.
Sadness
It is weird, having spent the better part of the last fourteen days back and forth between the hospital (yay for the flexibility of consulting work), I guess you might expect one to be a bit depressed. Yet, I've been a bit too dazed from the rushing about and all that's happened to really get to that point — and I'm not really there yet. Quite to the contrary, I think things are finally progressing for Dad, albeit slowly, and that makes me feel hopeful.
Yet, I've felt a profound sadness today. I had a dream last night that reminded me of something that I had shoved to the back of my mind — nothing big, really. I take that back — I shouldn't say it isn't big, just not the thing that needs to be dealt with at this moment. But it snowballed and made me think deeper and deeper about things, and it, well, has made me rather depressed today. It's funny how things like that work. The things that should make one depressed don't always and much more distant things may in fact do just that.
I'm not sure why I'm writing this, but there you are. I'll try to write something more cheerful tomorrow.
A Bunch of Questions
Ed did this questionnaire meme, so I guess I better do it. Ed never ever uses memes, so this one must be worthwhile. Mark did it as well, and I followed his link back to the source to get the full thing, omitting only the last (nasty) question. Leave your answers below or post a link to them if you make it a blog post (trackback functionality is still unavailable).
Three names you go by:
Tim, Timothy, Ryan (good for being incognito, you don't get to use it).
Three screennames you have:
trbutler, uninet, asisaid
Three things you like about yourself:
This is tough — well…
I am curious and love learning things… and not any one kind of thing.
I am (at least somewhat) caring and empathetic, although I'm not always good at expressing it.
I like getting things done early.
Three things you dislike/hate about yourself:
I am a lazy procrastinator
I far too good at breaking the 10th commandment — I covet.
I wallow in doubt and indecision.
I frequently put my foot in my mouth.
I'm not always good at resisting temptation.
I get too prideful at times.
Oops, I'm going overboard!
Three parts of your heritage:
Austro-German, British, French.
Three things that scare you:
Growing old alone (I'm not nearing “old,” but I know I'll be there eventually), completely failing in my goals, dying (not death — it's the process that is the hard part).
Three of your everyday essentials:
Good food, talking to friends and/or family, prayer (I should do more of the latter, but that doesn't mean it isn't an essential).
Three things you are wearing right now:
T-Shirt (received as Christmas gift — normally I wear polo/golf shirts), shorts, watch.
Three of your favorite bands/artists:
In no particular order:
Christian-Pop - Michael W. Smith, Steven Curtis Chapman, Nichole Nordeman
Christian-CCM - Michael W. Smith, Twila Paris, John Tesh
Pop/Rock - Sixpence None the Richer, Jewel, Sarah McLachlan
Alt/New Age - Evanescence, Engima, Loreena McKinnett
Classical - Bach, Beethoven, Handel
Miscellaneous - John Williams, Glenn Miller, Aaron Copland
Three of your favorite songs at present:
This can change quite frequently, but presently…
Missing - Evanescence
Healing Rain - Michael W. Smith
Moving On - Sixpence None the Richer
Three things you want in a relationship (love is a given):
Honesty/Openness/Connectedness… good conversations, anticipation of each other's thoughts, etc.
Warmth and Humor
A mix of common and non-common interests; plenty of common that can be enjoyed together, non-common to keep thinks interesting and encourage new interests.
Two truths and a lie:
I love the Ozarks.
I love God.
I have won five marathons and can lift 300 lbs without breaking a sweat.
Three physical things about the opposite sex that appeals to you:
Black hair (not a “hard and fast” rule — exceptions abound.)
Sparkly eyes (most often blue, but same disclaimer goes on color as above)
Contagious smile (hopefully with accompanying sense of humor and wit)
Shared interests, intellectual curiosity, etc., would be more important…
Three things you just can't do:
Steal
Show more than a “hometown loyalty” kind of interest in sports
Live without God.
Three of your favorite hobbies:
Reading
Tinkering with gadgets, computers, etc.
Debating
Three things you want to do really badly right now:
Stop visiting the hospital (and, logically extending this, having the reason to visit), then take a week off in the Ozarks.
Finish organizing my hard disk and re-ripping CD's (as mentioned last night).
Finish this questionnaire.
Three careers you're considering:
That seems to suggest excluding present “hats one is wearing”?
Professor of Religion, with dash of Philosophy… throw in some English too. Humanities in general, really.
Writer outside of computer field — preferably both journalistic/non-fiction stuff and fiction.
Politician.
Three places you want to go on vacation:
I've already mentioned the Ozarks a few times, so, let's do some others:
Grand tour of the East Coast (start in Canada, maybe, and sweep all the way down to D.C. — spend majority of time there).
Europe - Germany/Italy/Greece, etc.
Holy Land
Three kids names:
Uhm… that's tough. I'm just going to skip it.
Three things you want to do before you die:
To avoid sounding cliched, I'm going to avoid a few obvious and quite true answers.
Write some things of substance.
Get better at seeing God at work.
Read as much as possible.
Rip'n
Today was a quiet day. I went to visit dad, but he was pretty sleepy. The doctor had him up all night drinking a saline solution for a test they did today. I spent the rest of the day taking it easy. Tonight I worked some more on cleaning up my hard disk (I've gone from 39 gigs free to 75 [of 160 GB total on the disk]) and reripping my CD's that were either in Ogg Vorbis format, and therefore incompatible with the iPod, or in 96 Kbps MP3 format. The latter were ripped in 1999 or early 2000 and it was time to up the bitrate and switch to a better format. So I did.
Johnny English
I watched Johnny English tonight (with Rowan Atkinson of “Mr. Bean”). It was quite a bit like I expected — completely ridiculous. Sometimes that's exactly the kind of film you need to see, ya know? Don't expect a long blog post on this — there isn't all that much significance to it. But, if you like Atkinson's brand of humor, you'll enjoy this film. I know Christopher posted on this film in 2003, but I cannot seem to locate that post. At any rate, it was a good movie for ninety-nine cents at the drug store. I made my throat hurt from laughing.