Software & IT

The Great Child Blog Opportunity

Currently, the Blog module implements a concept called “child blogs”.  These are sub-blogs of a parent blog, which are broken out in the user interface as separate sections, each with its own administrative rules.

Since the Blog module doesn’t currently support the idea of categories or tagging, a lot of people use the child blog functionality as a means of providing a categorization function.  In fact this is often the recommended use of child blogs.  IT Crossing’s lovely metaPost product takes this one step further, by integrating the categorization function in LiveWriter to the child blog capability in the Blog module.  Unfortunately, this misuse of the existing functionality is going to have to change, and the sooner, the better.

Currently, the Blog module implements a concept called “child blogs”.  These are sub-blogs of a parent blog, which are broken out in the user interface as separate sections, each with its own administrative rules.

Since the Blog module doesn’t currently support the idea of categories or tagging, a lot of people use the child blog functionality as a means of providing a categorization function.  In fact this is often the recommended use of child blogs.  IT Crossing’s lovely metaPost product takes this one step further, by integrating the categorization function in LiveWriter to the child blog capability in the Blog module.  Unfortunately, this misuse of the existing functionality is going to have to change, and the sooner, the better.

What the Hell is a Child Blog Anyway?

I can’t read the minds of the original designers.  However, a peek at the database helps to shed some light on the issue, and it reveals an altogether different (and better) purpose for child blogs than categorization.

Child blogs are implemented as complete blogs in their own right, the only difference being that they have a “ParentID” that points to an uber-blog.  This parent-child relationship allows child blogs to “roll up” into a parent blog in a very useful way.

Why is the child blog structure a poor place into which to pour the concept of a category?

1. Blog entries can belong to more than one category / topic
2. Categories, as a concept, do not possess all the other managerial attributes of a blog (e.g. “allow anonymous comments” is not an attribute of a “category”)
3. Categories do not have “owners”
4. There can be more than one category hierarchy (for example, an auto-review publication might have an index of cars by manufacturer, and another index of cars by car type)

It seems apparent to me that a category scheme for blog entries ought look a lot different from that of a child blog.  In summary, there ought to be an organized list of category “topics”, with a many-to-many relationship between blog entries and topics.

What, then, are child blogs?  And how should we steer their use going forward?

To me, it’s clear that child blogs represent “sub-publications”.  In a large publishing organization, say, a newspaper, different sections of the paper are managed by different organizations.  They all roll up into a single publication, but by and large each publication is an almost stand-alone entity.

Consider the sports section of a major newspaper.  It has its own editorial staff, its own submission policies, maybe even its own index.  There really isn’t any reason that it couldn’t be sold separately as a sports-only specialty newspaper (and some are), except for the fact that it’s bundled together with the rest of the content.

Or consider the test-drive section of a car magazine.  There is a dedicated team of reviewers who do nothing but drive and rate cars.  They have their own procedures for this.  They’re answerable to a Practices editor who manages the review practices for fairness.  They have their own team of people who manage the pipeline of new cars that need to be tested and evaluated.  Really, there could be a publication that is nothing but car reviews, except that the auto magazine has decided to include it with all of the other sections in a bundle.

I think it’s clear that child blogs ought to represent “sections” – pieces of the publication that are broken out for arbitrary business reasons, and not necessarily because they relate to common topics.  Now, a given publication might very well like to split out its publication according to some major topical divisions, and child blogs could be the right way to handle this task.  But in this case it’s simply a coincidence that child blogs are split out according to major topical divisions.

The other thing that a child blog shouldn’t necessarily be is a set of entries by a given author.  Of course, it may be useful in a given publication (a moblog, for example) to give each author his own child blog and let each one be individually managed.  But it shouldn’t be necessary.

Child blogs really map to the idea of organizational structure.  Some companies are organized by product.  Others by function.  Some are organized geographically, others by technology.  Some are split in order to serve government customers separately from private industry.  In every case it’s a mistake to confuse the org structure (e.g. “product organization”) from the thing itself (e.g. “actual products”).  Likewise, child blogs ought to be used to solve the arbitrary managerial or organizational needs of a publication – which may map to high-level topics or authors / author groups, but only by coincidence.

Get to the Point Already

Where am I leading this?  Let’s get to the punch line.  I want to separate the semantics from the presenation.

Categories and tags – which I am increasingly beginning to think about collectively as “topics” – represent ways to chunk the content by its meaning, organizing it hierarchically (as with a category) or flat (as with a tag).  There are different user interface widgets we can employ to get at the content by topic, including widgets that display “index views”, widgets that display “tag clouds”, and widgets that display “related entries”.  Ultimately, however, we’re just talking about different ways of doing the same thing – grouping entries by topic.

Child blogs – which I am increasingly beginning to think about as “sections” – represent ways to chunk the content according to arbitrary managerial need.  Child blogs should allow a large publishing team to segment the ownership of pieces of the publication and roll up the content into a coherent whole.  In fact the current design of the Blog module comes surprisingly close to this goal.  If any workflow capability is attached to the Blog module, it’s clear that child blogs represent the set of structures needed to pull it off, each offering its own set of editors and authors, approval workflows, roll-ups to parent teams, etc..  As with “topics”, there are different user interfaces we can employ to get at the content of “sections”, including widgets that allow individual child blogs to live on different DNN pages (each with its own look and feel) while rolling up to a “summary” page elsewhere, widgets that roll up the child blogs together by section (rather than grouping all the content together chronologically), or widgets that provide category “indexes” within a given section (like a sports section index).  Ultimately, however, we’re just talking about different ways of organizing content according to an arbitrary managerial need.

Authorship – which needs to be thought about independently from “blog ownership” and “sections” in a multi-author publication system.  Authorship is an attribute of an “entry”, while “editorship” is an attribute of a “section”.  While a given publication might create a different “section” for each “author” (e.g. a moblog) I think that ought to be the exception instead of the rule.  A given author might create content in various “sections”.  Yet there remains a need to be able to find content by author.  Ideally, we should provide widgets that can display content by author – even allowing a publication to create “author pages” – without necessarily creating a child blog for eah author.  So, for example, a moblog like CuzWeSaidSo would probably create one section per author – because that’s the idea behind the publication – whereas a product-review magazine like ProRec would have sections like “From the Editor”, “Product Reviews”, and “Industry News”, with a given author publishing content in any or all sections.

The Pain of Change

One reason I mentioned metaPost earlier in the article is because I believe that improvements in the blog module, as well as its support tools like metaPost, will lead more people to choose the DNN Blog module for their publication needs.  Let me be blunt: what we have now is a sort of bastardized system that solves none of the above problems well at all.  The longer we go on without making these critical structural changes, the more we doom the Blog module to a second-class existence.  Conversely, the sooner we tackle these problems, and the sooner we address the pain associated with making these changes, the easier it will be.  Delaying these changes only means more pain later on.

Tags, Categories… What’s the Difference?

I’m cooking up a categorization / tagging module for the DotNetNuke blog module, and really would like to get it right the first time.

I want to balance ease-of-use, practicality, and power.  Right away, the issue of managing a “true” hierarchical tag structure with multiple selection capability rears its ugly head.  Building a tree-style hierarchy manager is tricky, and can be confusing to users.  And then, assigning categories from a tree structure can be very clumsy, especially if the tree is very tall.  I’ve seen this done with side-by-side listboxes & tree controls, and it’s always really clumsy.

If we set aside the idea of hierarchy for a second, and just look at good ways to apply tags, I like the way Amazon handles it by using a simple Ajax-enabled auto-suggestion textbox.  You can easily type a few characters of an appropriate tag, and the app will suggest the rest of the word.  More tags can be added with a comma delimiter.  If you want to add a brand new tag, you just type it.  This eliminates the need of a long list with checkboxes or a UI for creating and managing tags.  A significant advantage is that it works for short lists yet scales up very well for long lists.   I strongly prefer this UI for applying tags to blog posts.

Trying to implement this with true hierarchies is trickier.  My idea is the use of a hierarchy delimiter.  The user can create hierarchies as deep as they like, and the auto-suggestion box helps them out.  So a blog post might be tagged up as follows:

——————–
[MyBlogPost]
Tags: [PlacesDallas; PlacesNew York; PlacesParis; FoodsSteak; FoodsFish; FoodsPizza; Time of DayMorning; Time of DayEvening]
——————–

The data-entry UI would automagically suggest each portion of the hierarchy at a time, so when the user types “Pl” the textbox responds “Places”, and the user hits the delimiter key “” to accept and begin entering the next hierarchy component:

——————–
Tags: (type) Pl
Tags: (UI responds) Places
Tags: (type) Places (user enters delimiter key)
Tags: (UI presents) Places[drop-down list of places in the places list, if list is < 10 entries]
Tags: (type) PlacesDal
Tags: (UI presents) Places[drop-down list: Dalhart Dallas Dalton]
Tags: (user selects Dalhart)
Tags: (UI presents) PlacesDalhart; (adds delimiter so user can begin entering next tag)
——————–

The data can be stored in the database using a traditional n-level-hierarchy (parent-child) structure.

A hierarchical list can then be presented:

——————–
Places
..Dallas
….[MyBlogPost]
..New York
….[MyBlogPost]
..Paris
….[MyBlogPost]
Foods
..Steak
….[MyBlogPost]
..Fish
….[MyBlogPost]
..etc
——————–

Not Alone

In my latest post, I mentioned that I really view tags and categories as two facets of the same thing.  Turns out I’m not alone.

This interesting post explains how WordPress implements tags and categories.  Like me, it’s apparent that they view both tags and categories ultimately as the same entity type: “terms”.  They then overlay a set of structures that enable various use of “terms” in the WP UI.

I think a similar – if not identical – approach should form the basis of tagging and categorization in the DNN blog module.

Tags, Categories, and Knowledge Management

I’m inclined to view “tags” and “categories” as just two facets of the same thing: knowledge hooks we apply to content to help us find it.  My gut tells me that these things tend to be viewed as two different beasts because of the way they’ve historically been implemented.

While I’d love to get the concept of tags and categories right the first time, and do it in a way that’s cohesive and elegant, in the end, compatibility with other approaches is probably the right solution.  So we may just need both tags and categories regardless of personal beliefs on my part.

Of course, one way to kludge both into a common solution – that isn’t terribly kludgy – is to have a predefined “category” called “tags” (or “Keywords”) that contain all the “tags” and which are wired through API to the correct fields in LiveWriter.  They could be presented in the DNN module as a separate field that works just like “categories” only without hierarchy separators.  It would still reside in the same data structures and produce the same lists and “related entries” capabilities.

I have a lot of experience with knowledge management solutions (I’ve been doing KM since 1993), and think that “best of both worlds” is really the best approach, because it offers the flexibility of tags with the structure of categories – in other words, it’s a lot more like the way the mind manages these knowledge structures.  My experience is that “structured categories” always start out as “flexible keywords”.   At some point, there is sufficient comprehension to establish the structure that was previously invisible, and then your “keywords” become “categories”.

Let’s take a cue from Amazon.  They sell items in categories.  And items can have multiple categories.  They also assign author (artist) and other common attributes.  However, they only offer one “category” structure – a “genre” list.

They also offer tagging.  If you look at what sort of tags get created, it becomes plain that there are three sorts of tags:

1. Spurious tags – tags that duplicate existing attributes and shouldn’t be there in the first place, e.g. “Monty Python” tag associated with the movie “Monty Python and the Holy Grail” which has an artist of “Monty Python”, or tags which just don’t add practical value, like “Movies that Include the word ‘swallow'”.

2. Tags that ought to be part of a data structure that just doesn’t exist – e.g. “Graham Chapman” tag on “Holy Grail”, which really ought to be part of a structure called “Actors” but isn’t provided by Amazon.  Or “British Comedy” which really should have been a subset of the “Comedy” genre, but Amazon didn’t provide this option.  Or “Arthurian Legends” – a tag that could easily have been a category in the “Subject Matter” hierarchy.  Or “Party” – a tag that could well belong in a “Mood” category.

3. Tags that don’t seem like they should be part of a data structure, YET, because not enough material has been tagged on this dimension to understand the dimension.  For example, your hypothetical post that you wanted to tag “suggestions”, could easily have been a node in the “Article Type” category, along with “Ratings”, “Reviews”, “Comparisons”, and “Recipes”

Back in the olden days of doing KM in Lotus Notes, there was often great confusion about the difference between “Categories” and “Keywords” and the reality is that they’re both the same thing, with differing amounts of structure.

IMHO the problem that “tags” have shown up to address is the same one that “keywords” showed up to address – the problem of only offering one category dimension.  People get stuck in the paradigm and can’t get out.  Consider this article covering the subject – it’s clear that the author views “tags” and “categories” not as KM abstractions in and of themselves, but as artifacts of the particular implementation in WordPress.  WordPress has a particular implementation of Categories that lends itself to a limited use – e.g. you can’t have too many, because the sidebar list will be too long.  Well, that’s an artifact of putting the whole thing on a sidebar all at once, and not a consideration of the KM implications at all.

Consider that most books just have an “index”, which is a “subject category” structure.  But some reference books have indices for many different dimensions.  Likewise, most blogs just give you the capability to build the single “subject category” structure.  But if we built just one iota of flexibility into the “category view” module, then you could (for example) have one category hierarchy that is short and highly topical and shown on the sidebar (like WordPress) as well as other hierarchies that are deep and multi-layered, but viewed through a larger display on a different page, and other views like the “Related Entries” views that mine the hierarchies and just return the most relevant entries.

Not only does this offer a lot of UI flexibility for sites with a lot of structured content, but also, given the way the topics, keywords, and URLs are all associated, it’s a real SEO boon.  You can build a very strong semantic map into the linked content.

Having said all that, I will return to the position that I suppose we’ll have to support both tags and categories, but perhaps we can do it in a more powerful, elegant way than just duplicating a bunch of middle-of-the-road functionality.

The Valid Lure of The Next Big Thing

Jeff Atwood writes about the “The Years of Experience Myth” in his usual, dead-on style:

Imagine how many brilliant software engineers companies are missing out on because they are completely obsessed with finding people who match– exactly and to the letter– some highly specific laundry list of skills.

Somehow, they’ve forgetten that what software developers do best is learn. Employers should be loooking for passionate, driven, flexible self-educators who have a proven ability to code in whatever language — and serving them up interesting projects they can engage with.

Jeff goes on to make the point that you can use job requirements like “3-5 years of experience in such-and-such” as a baseline for determining the quality of the hiring company.  If they hire based on irrelevant (or counterproductive) measures of skill, chances are good that “the rest of the team will be stooges picked for the wrong reasons.”

Let’s take this a few steps further.

Consider the impact of this situation on emergent technologies, and I think a case can be made for why new, “special” technologies have the lifecycle they do.

I’ve often wondered why new technologies get the hoopla that they do.  Is C# really such a huge improvement over C++?  Is Ruby on Rails really such an extraordinary step up from PHP?  Sure, these technologies usually represent improvements – sometimes significant ones.  But by now we all should know that the real cost – and opportunity – of technologies lies in the human capital involved.  I for one will take an A+ PHP developer over a B- Ruby developer any day.

So why do new technologies get the buzz?

If the best programmers are learners, then it stands to reason that when a new technology is introduced, it will be the curious learners – the best programmers, in other words – who early-adopt it.  It therefore follows that the first wave of solutions based on the new technologies are often the outstanding solutions – not because the technologies are so great, but because by virtue of their newness, only the very best programmers are using them.

Once the technology has matured somewhat (and the requisite training curricula, certifications, and dead-meat programmers take their places in the market), productivity understandably falls off.  The quality and novelty of the solutions drop.  The buzz and hype fade.  And the best programmers, having been a part of this technology shift for several years at this point, start looking for something new to learn, and move on.

This offers some interesting lessons to learn.

  • If you’re a software badass, then it really pays to stay on the leading edge of new technologies, even ones that don’t seem to offer a real benefit.  By doing so, you not only differentiate yourself from your peers, but you also will probably end up in the company of other badasses doing badass work.
  • If you’re a company looking to start some new development, consider implementing using new technology as a way of discerning and attracting talent.  Your risk – that of implementing an untried technology – may be lower than the risk of implementing an established technology with tired, unproductive, uncreative developers.
  • If you’re a software toolset provider, your marketing strategy should be based on finding the software badasses and convincing them to early-adopt your technology.  This may even dictate that you do not offer training or certification, and keep your documentation sketchy and terse – just the way badasses like it.

The Sheer Magic of DynDNS.org

If you aren’t yet familiar with DynDNS.org, you should be.

For several years now, DynDNS has offered a free (yes, ma, free) DNS service for people with dynamic IP addresses.  This allowed people with a highspeed always-on internet connection to get a domain name.

See, if you have cable modem or DSL, you really have enough bandwidth to run a light-volume internet host from your home.  The problem is, you can’t register a domain name, because your IP address changes from time to time.  Enter DynDNS.  They have software that detects when your IP changes, and it updates their routing table.

Unfortunately, the only domain names you can use are extensions to their preset names (names like myserver.dynalias.net).  For many uses this is enough.  I’ve been using webculture.dynalias.net for years as a domain name for my company’s backoffice server.  It really works, and it’s free.

Free. The word seductively rolls from my tongue.  MMMmmmmm freeeeeee.

But now, DynDNS offers another service that may change everything for me.

For about $25 per year, they’ll run a dynamic DNS service for any domain name.  You register the name with the registrar of your choice (say, GoDaddy) and point the domain to DynDNS’ nameservers.  That’s it.

What you’ll find is that if you have a reasonably reliable high speed internet service, you can easily run a web site on your personal machine (or, if you’re like me, on your own server at home).  In case you’re wondering, Dell sells servers perfect for this sort of light-duty use starting around $350.

If this works well enough, I may even decide to host ProRec.com at home.