It's been just over a year since I publicly laid my considerable powers of persuasion behind HD-DVD, only to see the format die a horrifying death just over two months later.
Quite an embarrassment. It was so bad I had to exile myself from blogging.
Even worse than the online embarrassment was the awkward discomfort and shame that owning an HD-DVD unit brought. When the HD-A3 eagerly popped up its now foolish looking HD-DVD logo as a guest happened in the room, the outcome was generally one of two shades of humiliating: Half the time they'd feel a little sorry for it, and by extension me. The other half was even worse, as they'd eagerly ask "Gosh, what's that? Is that the new high definition format?", forcing me to divert the conversation to whatever conflict was going on in the Middle East at the time (always one to fall back on). I quickly deported the player to the basement, if only to be free of the logo.
Seriously, though, having three
young children is quite a lot of work. A former boss once remarked,
on learning that I had my first child (my beautiful daughter
Elizabeth), that I was a "hobbyist". I laughed at the time,
thinking that he was just being elitist, what with his 8 kids or
whatever it was. Turns out he was somewhat right, and I now look
back at the relaxed life of free time I had with just one child.
Even two seems relatively tame in comparison. Three, with them now
edging towards the ages of two, four and six, introduces a lot of
difficulties, as providing them all with age appropriate activities
and challenges is a non-trivial task. The time available to post
insightful blog entries has suffered.
But there is hope, faithful fans! I've devised a new technique that I'm going to try over the coming weeks. It's a sort of hybrid of "microblogging", but privately accumulating until it's a worthwhile post. I consider such writings cathartic and often self-elucidating, so I want to do it if only for personal satisfaction.
There's also the matter that with the recent addition of a "recent posts" panel on the right, that ungainly HD-DVD entry still falls in the list...so I've got to push out some content to scroll it off the list....just one more entry and it's outta there.
Oh and I also added the feed bag — again it was to try out a new technology and it proved a useful prototype — of links that I think are worthwhile, for anyone who might be interested.
Thanks for reading and have a great week!
Dennis
It’s been a quiet year, blogwise.
It wasn’t unexpected.
Early 2007 saw the addition of my 3rd child (my second boy, giving me three children under five years old). I can’t overstate how much time and work goes into children, especially when they’re this young (every outing of any sort is a campaign of epic proportions). The reward is worth it a trillion times over, but it means that things like blogging tend to get sacrificed on the priority list, and the entries that do happen occur through creative time usage. Such as this one that’s being authored in my son’s room while I wait for him to fall asleep.
Add the fact that I’d switched from running a mostly one-man consulting company
(which was yafla’s former purpose, providing business justification for the time
spent on every entry – they were gaining eyeballs, clients, PageRank,
professional credibility, and so on for consulting and development
opportunities) to instead dedicating my time and energies exclusively to one
client.
My mental efforts these days are focused on an amazing New York City back-end financial services company, imagining and building the next generation of software for the industry. While it is very rewarding professionally and financially, basic professional courtesy and confidentiality restrictions limit how much I can discuss the discoveries, trials and tribulations of that adventure.
So where does material come from then? Much of the wisdom I had to dole out had been exhausted earlier in the lifecycle of this blog (all bloggers have a finite amount of accumulated wisdom to espouse before they start recycling, or worse outsourcing, content. Beware any blogger that operates on a schedule, because their creation will almost certainly be vacuous or intellectually stolen tripe). I've since accumulated a lot of observations and suggestions about mixing work and family life in this industry, and at some point I need to put virtual pen to virtual paper, however the low hanging fruit material has already been stored in the archives.
When I agree with things I’ve read and seen elsewhere, I don’t see much point in a toss-off “I agree” post, so instead the limited content was usually seemingly negative – where I disagreed with something or someone. Like most people (excluding cults and fan clubs), I’m more motivated by disagreement than agreement, so it inspired the extra effort to find a moment to author a post.
Lacking the opportunity to post normal posts to balance things out, it gives an unsavory “critic” feel to the blog, which was never my intent.
There is hope, however!
With the dawn of a new year, yafla is going to gradually (but immediately) start morphing into something new (this isn’t a new year's resolution or anything of that sort, but was the planned timeline all along). For far too long I’ve sat on the sidelines waiting for the perfect idea for casual development to reuse a relatively well-ranked domain. Realizing that is a self-defeating bar, I’ve decided to go with an imperfect but viable secondary option.
So where is it going? Failing a market segment categorization, let’s just say Slashdot * Digg ^ Wikipedia * Reddit + StumbleUpon + Delicious ^ Blogger. There are a million and one competitors in this space already, but I’m targeting something special, implementing ideas that have clattered around in my head since the early Slashdot era (having one’s carefully crafted, timely submissions rejected by a Slashdot editor was undoubtedly the impetus behind the creation of a lot of the follow-up sites).
In a nutshell, the yafla realization will be quality above quantity, and value
above distraction (I have no intent of catering to the crowd using it to avoid
work. I want to cater to the people using it to further their pursuits, whatever
they are pursuing, not to avoid life.) The differentiator will be the people
empowered by the analytics, bringing a special perspective to information
coalescence.
It’s going to start terribly and hackishly (a transparent, ultra-agile work in progress), and will probably be ignored and seldom used for a while after inception, but it will at least give me comfort that something is being done with the domain, and will most certainly provide unencumbered source material for the blog.
Let’s see what the new year brings.
I recently opted to throw together my own blog software (after going through the standard Build or Buy analysis), expediting deployment as a means of forcing follow-thru. The goals of this micro-project were to improve the authoring and content management experience, to improve searchability of the content (without having to cast content out from the blog to a static form), and to improve the usability and navigation from the user's perspective (for instance the classic "date" navigator common on most blogs is something that I've opted to remove).
Despite having close to no time to allocate to this task, my tendency to over-engineer still showed through: The easiest option would have been a content-management system defined entirely in code (it's as easy for me to change and deploy code than it is to change templates and metadata), and of course to build it for a single author. Instead it supports many blogs through the same URLRedirector, blog aggregations (where a blog is a publication of a set of blogs, each with distinct authors) each using its own templates and configurations.
Which brings me to templates -- failing to find a decent Smarty-type templating system for .NET (basic ASPX is really a templating system, but I'm speaking more towards something that can enumerate sections, retrieving data based upon an object structure of relationships and containment).
So I had to build a basic templating system, yielding the templates that follow. The first for HTML output--
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>
<title>{#blog.Title} {#docTitle}</title>
<link rel="stylesheet" type="text/css" media="screen, projection"
href="http://www.yafla.com/dforbes/style/css/blog.css"></link>
<script type="text/javascript" src="http://www.haloscan.com/load/dforbes"> </script>
</head>
<body>
<div class="clsHeader">
<div class="clsBlogHeader"><a href="{#blog.BaseUrl}">{#blog.Title}</a></div>
<div class="clsSubheader">{#blog.Description}</div>
</div>
<div class="clsBody">
{foreach $entry in $entries}
<div class="clsEntry">
<div class="clsDate">{#entry.EntryContent.PublishDateUTC|dddd, MMMM dd yyyy}</div>
<div class="clsTitle"><a href="{#entry.Permalink}">{#entry.EntryContent.EntryTitle}</a></div>
<div class="clsBody">{#entry.EntryContent.EntryContent}</div>
<div class="clsKeywords">{foreach $keyword in $entry.EntryKeywords}
<a href="{#blog.BaseUrl}{#keyword.KeywordText|escape}">{#keyword.KeywordText}</a> {/foreach}
</div>
<div class="clsPermalink">
<a href="javascript:HaloScan('{#entry.MappingId}');" target="_self">
<script type="text/javascript">postCount('{#entry.MappingId}'); </script></a>
<a href="{#entry.Permalink}">permalink</a>
</div>
{foreach $relatedentry in $entry.RelatedEntries}
{ifcond $LoopFirst = "True"}
<center>
<div class="clsRelatedEntries">
Related Entries
{/ifcond}
<div class="clsRelatedEntry">
<a href="{#relatedentry.Permalink}">{#relatedentry.EntryContent.EntryTitle}</a>
</div>
{ifcond $LoopLast = "True"}
</div>
</center>
{/ifcond}
{/foreach}
</div>
{/foreach}
<div class="clsAdBlock">
{#adBlockHorizontal}
</div>
<div class="clsNavigator">
<span class="clsNavigateEarlier">{#moveEarlier}</span><span class="clsNavigateLater">{#moveLater}
</span>
</div>
</div>
<br/>
<div class="clsAttribution">
<a href="mailto:{#entry.EntryContent.ContentAuthor.EmailAddress}">
{#entry.EntryContent.ContentAuthor.Name}
</a> -
{#entry.EntryContent.ContentAuthor.Description}
</div>
</body>
</html>
The next template is for RSS consumers--
<rss version="2.0">
<channel>
<title>{#blog.Title|escape}</title>
<link>{#blog.BaseUrl}</link>
<description>{#blog.Description|escape}</description>
<lastBuildDate>{#buildDate|r}</lastBuildDate>
<language>en-us</language>
{foreach $entry in $entries}
<item>
<title>{#entry.EntryContent.EntryTitle|escape}</title>
<link>{#entry.Permalink}</link>
<guid>{#entry.Permalink}</guid>
<pubDate>{#entry.EntryContent.PublishDateUTC|r}</pubDate>
<description><![CDATA[{#entry.EntryContent.EntryContent}]]></description>
</item>
{/foreach}
</channel>
</rss>
All in all, I think it works pretty good, and I can successfully run the W3C validations on the vast majority of generated pages and get the comforting green checkmark.
My original foray into the land of blogging was delayed while I stumbled towards the goal of building my own blogging software: like many software developers, I have a sometimes irrational desire to build it myself rather than admit “defeat” and use one of the many (and in the realm of blogging, there are many) available products.
I took a couple of stabs at building it myself originally, but due to another common foible – a tendency to over-engineer (I couldn’t simply write some blog software to post and publish my own thoughts. No…it had to be a full multi-author aggregation and collaboration suite, meaning that weeks went by while I mentally debated the database model for such a machination) – it just never seemed to get finished.
Other priorities always trumped it, and the little time I did allot towards this goal saw me solving absurd edge conditions.
I finally set a deadline for myself, and when I couldn’t find the time to finish anything before my marker (billable hours always came first), I went and bought a copy of Radio Userland and started publishing content the blog way.
That worked well enough for a while, but Radio Userland is a venerable publishing tool that is really showing its age. Authoring to it is a less than pleasant experience – which has been a huge contributor towards the dearth of content (it’s always a bit of a roll of the dice to see which characters it randomly replaces in posts, or which carefully authored HTML blocks it’s decided to mangle) – and simple tasks like cross-linking posts (e.g. a “related posts” sidebar to allow users to easily see follow-ups) was just far too manual to be worth the bother.
Now that I have a powerful, fully dedicated server, it’s also grossly under-featured for users, making the experience of consuming and navigating through the information far less usable than it should be.
So I’ve gone and built my own blogging software, this time quickly bringing it to a sort of beta release.
Given that this is the venue with which I will publicize a ton of changes elsewhere on the site, I really considered this a roadblock on the critical path to the release of other web application functionality elsewhere on yafla.
With some focus, it took only a couple of hours this time, mostly accomplished while putting my toddler son to bed over the weekend. It was so ridiculously quick and easy that I kick myself for not having done it sooner.
I’m extremely pleased about the functionality built out (hey it isn't rocket science, and definitely falls within the realm of "trivial", but there's lots of little "gotchas" with software like this), though most of the kudos go towards .NET 2 and SQL Server 2005: A couple of tools that make short work of what would once have been an enormous task, bringing a robust, secure, high performance web application to a usable stage in less time than it takes to watch the Lord of the Rings trilogy.
Right now you’ll probably notice that – at this moment at least – the HTML version of the blog looks absolutely terribly. That is somewhat by design (or rather an intentional time compromise)…momentarily. I’m working on the template (it’s of course parameterized template driven), and wanted to force myself to follow through by deploying (perhaps prematurely).
So what are the features of the blog software?
Well, firstly I migrated 100% of the old content over (including metadata such as categorization), running it all through Tidy first to try to make it a little more XHTML legitimate. Using an identifier mapping structure, every single link to the legacy content still works (which was important to me: I didn’t want to give link followers the frustrating “We moved everything so have fun trying to find it” 404 experience).
Everything works via URL remapping, and for now I’ve set it to redirect from old links to the new links where possible. E.g. http://www.yafla.com/dforbes/categories/softwareDevelopment/2005/09/28.html redirects to http://www.yafla.com/dforbes/Clean_Code. All new entries Will follow that more transparent and obvious structure.
But the URLs aren’t limited to just single documents – All entries in June of 2006 can be accessed via http://www.yafla.com/dforbes/2006/06. Add in a category and you can refine further – http://www.yafla.com/dforbes/2006/06/.NET (or http://www.yafla.com/dforbes/.NET/2006/06. Whatever makes you happy).
Want that in RSS form? http://www.yafla.com/dforbes/2006/06/.NET/rss.xml. Add in the day if you wanted to refine further.
Of course, no longer are entries limited to the archaic “categories”. Now they’re basically keywords, so if you want to see the posts where I’ve abused categories and multi-tagged, take a look at
http://www.yafla.com/dforbes/.NET/SQL/Blogging/SoftwareDevelopment/Personal/IT/
Yikes!
So the tagging will be much more logical now that there aren’t broad categories, and given that anyone can filter content however they want (stick rss.xml on the end and you can get a feed of whatever you want).
There’s also search, though I’m not comfortable enough with the finality of the API to publish anything about that.
Entries now have versioning, given that I want to be more transparent with edits that I make (I’m endlessly doing minor corrections and improving wording, and for those who consider that deceptive there’ll be a little version history to see what changed and when, along with a label of why the change was made). All links are auto-parsed and logged, so every entry has a list of posts that link into it, making for much more elegant self follow-ups without resorting to post-editing some “UPDATE: See also…“ notes into old entries, and without resorting to the ugliness of trackbacks.
Extensive caching ensures that it’s still spritely and capable of handling peak loads with no fuss.
Oh, and the system supports many blogs by many authors, including publishing multiple authors into one system…so I still over-engineered, but in the end it was workable and I’m extremely happy with the core structure.
Great things lie ahead.
Summer is waning here in the Northern hemisphere.
While it's sad that the warm weather and summer activities will soon be packed in the garage for another year, it's almost the time for fall fairs, rich soups, apple picking, walks in the gorgeous escarpment country when the leaves have changed color, pumpkins and costumes.
'Tis a wonderful season ending, to be replaced by another great time of year.
With the decrease in outdoor activities, I'll be posting more frequently. I've been kicking SQL Server 2008 around, and look forward to writing about it (I'm excited about its new hierarchical functionality, which has echos of versatile high performance hierarchies), along with many other thoughts that have percolated in my head.
yafla has moved to some new, dedicated hardware, opening up some tremendous possibilities.
Some very exciting changes are afoot!

While most prospective bloggers (online content authors) have already been doing it for some time, every now and then someone anxiously asks me whether they should start a blog, feeling like the train is leaving the station and in future world they'll be relegated to the info-slums because of their lack of participation. For these recurring queries I thought it worthwhile posting an entry, giving me a a simple URL to reference.