I created Fart.Go in July 2007 as part of a SEO experiment to develop a niche website. Initially it started as poopy.info, which is why the logo ALT is still “I See Poopy”, but I had trouble getting Google to index it. The problem probably had something to do with early 404’s and 500’s, but I blamed the TLD and went to register a new domain. I wanted something that included the word fart and ended up reversing my favorite (Go Farts) resulting in fartgo.com. It’s an awkward name, but near-impossible to misspell, and being different is more a boon for the obscure than a bomb in my opinion.
By all counts it is a successful website. I spent a weekend collecting 50 pieces of content and organizing them in a very specific structure. Its initial host was Blogger, but the blog format just doesn’t suit a small, “tight” collection of categorized pages. Thus a JavaScript to run on WSH was born to generate the HTML which I then manually uploaded (some URL’s, you may notice, still use a blogspot structure of YYYY/MM/name.html). At the time I thought the process was painless enough, but later it became clear just how wrong I was based on how infrequent I updated the thing.
Fart.Go simmered in its own stinky stench with nary a helping hand to waft it into greater spaces for nearly two years. It accrued a meager few updates, literally two or three. It floated to the top of Google for certain phrases and traffic steadily climbed to about 200 unique visitors a day. And finally it made about a buck a day on AdSense. I never implemented even a fraction of the fantastical features planned and yet mere age, stability, and URL permanence solidified its success. Imagine if I could make it better, or is meddling bound to make it worse?
We shall see! In the first week of August, over a month and a half ago, I pondered the ability for FanSiter to support Fart.Go on its platform. I reasoned they shared enough common capability to warrant a bit of effort to implement any additional code necessary. This is back when FanSiter2’s spaghetti shop ran the show and FanSiter3 existed locally in mostly-untested, fragmented form. Thus only last week with the advent of the Blogger Firehose did I set out to complete this task.

Fart.Go (via FanSiter platform) in FireFox 3.X on a EEE 901 netbook.
Talk about underestimating requirements! Tons of programming and manual conversion later, it’s finally online. The only thing that kept me going was my own stubbornness and that feeling of “I’ve already come this far …”. Before I talk about some of the new engine capabilities, let’s look at a couple of the new things about the site output itself:
- FavIcon is transparent: Whatever I used to create the original ICO from my GIF did a very poor job and I shrugged my shoulders at the result, despite shuddering every time I saw the white boxed poop in the browser. This time I did some simple GIMP edits to remove the more conspicuous anti-aliasing artifacts and the ran
convert in Ubuntu (wonderful utility BTW). Voila! It turned out so good that I also used it for list items!
- Newest content list actually works. Previously it generated the list of 4 or so and then popped off drafts. Thus you’d only see maybe one item since I had a lot of drafts taking up space. That list also shows their publish date, which is hidden elsewhere, to indicate freshness. Yes, that is a deliberate decision to encourage updates!
- Next post arrow based on date. I don’t remember what the » link went to before, but now it goes to the next, older item by date. Thus when you read the newest page, you can click that to go to one older, and on and on regardless of what categories those pages are in.
Internally I expanded the site-text parsing capabilities to encompass near-arbitrary HTML. FanSiter3 divides page items into discreet objects that then have a type: picture, video, paragraph of text, link, etc. Generally this is done by splitting by line and parsing each of those individually. Now there is a simple buffer between lines of HTML content which allow tags to span multiple lines whereas before these would be repaired individually.
On the rendering side there are now type and block wrappers allowing specific tags surrounding individual page objects and collections of those of the same type. Fart.Go’s category pages require this since it uses a HTML list (<ul>). They also have different title structures since the site name and category are displayed at the top (more like a blog) and the page title is not connected. On the same token, it uses different tags for each category page and their URI’s are /category/ not /category.html. Plus there’s the complication of directory redirects (/games => /games/). Whew! Liberal formatting capabilities and use of vsprintf() are now customization options for templates and sites.
Finally, because I’m tiring myself writing this, I introduced the Blogger Firehose which allows one to utilize the UI and layout of a blog to write and post content for multiple sites. Fart.Go needed this because it’s already pushing the limits of how much I can stuff into a single Google Sites page reliably (FireFox on my netbook can barely handle all those DIV’s and BR’s) and I want to be able to recruit a writer or writers without overloading them with unnecessary internals knowledge.
It works reasonably well by parsing the actual HTML output and configuring various settings to discourage people from visiting the raw blogspot and/or (more importantly) linking to it. One issue I’m still working out is the PHP DOM creating empty tags from ones which need to be self-closed (e.g. <img></img>). Pictures and videos are parsed out assuming they meet certain conditions and relevant page objects are created. Other HTML becomes text paragraph objects and tags can be used to set variables like category. Oh yeah, and the title can specify the URI, which has the useful side effect of letting multiple posts add to the same page!
It’s all very cool, but I need to get back to expanding and testing it. Next up is some more Delicious parsing for objects/pages and working with the media namespace in RSS for photostreams.