Skip to content

Things do not happen overnight!

So I’m reading this article about how the long tail theroy is bunk because some one drew some charts that show otherwise. I have not read the article with the charts and I have not read The Long Tail, but I think that the theroy has been explained very well, “If given a choice people will choose what they really want over what they are told to want”. Ok I get it, I think that’s true, but you also have to remember that THIS IS A DRASTIC PARADIGM SHIFT and it will not just flip overnight.

You have to take in to account that the masses are still pelted with ads all over the place about what they are being told is cool, they have social groups that tell them what is cool, there’s an entire echo chamber built up to support the existing model of mass advertising, and that’s not going away any time soon. The most painful thing about this article is that the entire premiss is built on that there was some expectation that in 2008 there would be some HUGE flip and everyone would say “fuck whats popular this thing that no one heard about is awesome.”

Well Mr. Lee Gomes, your last paragraph I think completely supports the idea that the long tail IS working. The important bit about the long tail is ownership of decision. The ‘OLD’ way was that some one other then you got to decide what your options were going to be, the ‘NEW’ way is that you have that ability. As you clearly point out though, we do not have sole and complete power over everything but it’s vastly improved in the past few years with no data to show a slow-down any time soon. So by this logic, yes the book might have been over-zelious in it’s predictions, but it’s not a complete lie.


benh~

Simple CMS… not so simple.

First thanks for everyone tonight that listened to me yammer on about what I really see as the true function of a CMS. I’ll try and get those slides finished up and posted but untill then this will have to do ( http://develonizer.com/svn/talks/SimpleCMS.xul ). And now on with the show.

So a CMS is intended to manage content, and users make and shuffle content so a CMS also needs to manage users (point of distinction, and for lack of a better example, “user” here is the “blogger” not the “reader”). Being able to have structured data in some perfect IA design is a very different problem to solve then dealing with what some one can and can not do. So we have two completely different problems that I have yet to see a CMS really do well. In fact more to the point, I see a good CMS should be the thin sewing together of a really good content structure system and a really good user role system.

So how does one go about writing a good CMS… well you don’t have the parts yet, you need to design two completely different systems that are sold enough to stand on there own, yet are flexable enough to allow for any thing to happen and open enough to allow intercommunication. Not an easy task.

So what do we really need? Well with content you have 4 layers “raw unordered data”->”groups of ordered data”->”groups of groups of data”->”templates”. This is not a new distinction, it’s the MVC idea. What were missing though is an API of sorts on how to do this. Same with users, not a new problem, you need permissions to do something and an events structure to create work flows, but there’s no common API.

So if these are not new problems… why do we find ourselves in this situation? Well the problem is easy enough to solve so most people just roll there own, it’s not the best most complete solution, but it works. The other option is to pick some off the shelf solution that tries to be the perfect jack of all trades while failing to be exactly what you need. Most of the time you can mold things in to what you need but there not really designed to be mold-able from the start.

So here goes nothing… I think that I’m going to embark on starting out on the quest for a better CMS, I’ll see where this road takes me, who knows it could be the start of something interesting, or just another project that never gets off the ground.


benh~

Exception handling intelligently

With any process, there are times when the train comes off the rails, how should this be dealt with? Well there are many different schools of thought but here’s what works best for me, die as soon as there’s a problem. For me there are many reasons for this, but mostly it really boils down to two simple points:

  • you write cleaner code as you know what your really dealing with.
  • you debug faster as you know why and where things break.

As a really basic example:


sub add_one {
   my ($in) = @_;
   return $in + 1;
}

add_one(1); # returns 2
add_one('a'); # returns 1 !?!?!

Some how I do not think that we really want to come back with 1 when given a, just a guess. So if we do not check our input then we go about our day just assuming everything works because things appear to work… but in reality they are silently broken. The scary thing is the silent part, now anything downstream could logically break with out any notice of things going wrong. This is a headache just waiting to happen.

So how do we fix this? Check our input!

Passively checking input


sub add_one {
   use Scalar::Util qw{looks_like_number};
   my ($in) = @_;
   if ( looks_like_number($in) ) {
      return $in + 1;
   }
   else {
      warn sprintf( q{%s is not a number, I'm ignoring it}, $in);
      return $in;
   }
}

Ok now we side step getting 1 back and we have a nice warning about the issue. The nice thing is that now we have something in the error logs that explains the problem and shows what the input was and where were having the issue. This will solve some of your problems but it does not allow for the caller to change it’s behavior if there was a problem. The current warning method makes the decision for the caller, and this might be ok, it might not be. So how do we go about passing authority to the caller? Die!

Check by Assertion


sub add_one {
   use Carp::Assert;
   use Scalar::Util qw{looks_like_number};
   my ($in) = @_;
   assert(looks_like_number($in));
   return $in + 1;
}

=pod
add_one('a');
Assertion failed!
 at /usr/local/share/perl/5.8.8/Carp/Assert.pm line 281
   Carp::Assert::assert(0) called at /home/benh/mirror/benh/src/general_toys/asserrt.pl line 14
   main::add_one('a') called at /home/benh/mirror/benh/src/general_toys/asserrt.pl line 19
=cut

Now we get the same info, but we die on bad input. The other thing that should be obvious is that even in this little example we have less code because we know what were dealing with. The added bonus is that we also allow any code that uses add_one do decide what to do on error.


$data = 'a';

# fail loudly on bad input
$data = add_one($data);

# gracefully ignore bad input
eval {
  $data = add_one($data);
} or do {
  # nothing
};

# do something else if things is bad
eval {
   $data = add_one($data)
} or do {
   $data .= $data; # or whatever
}

We have returned authority to the code that understands the problem the best, we’ve written less code, and it’s better code. All sounds like a win to me.

Bram Pitoyo lays down the rules

Local portland uber-thinker Bram Pitoyo has yet again shared some wonderful nuggets of wisdom with the world and I think that there too good to pass up and not share so here goes.

The Anonymous Coward Rule: Not many brands have achieved this. Positive comment from Anonymous Cowards is a telltale sign of your success.

The Control Freak Rule: Free flowing conversation & critique is paramount to a brand’s success. Do not inhibit them, no matter how negative.

The Customer Rule: A brand is only as good as what its customers say about it.

I think that the magic in these rules is that a brands success is really out of the owners hands, they can try and mold something, but in the end it’s up to the users. Brands are like children, you can try and give them a good home and attempt to impart your view on the world to them but at the end of the day it’s up to the kid to work out where they go in life.


benh~

The problem with wikis and blogs… is it really that hard to build a contextual system?

Ok ever since I went to wiki wed with ward (say that 10 times…), I’ve really been thinking of content storage devices and how they relate. Everything that I can think of really revolve around 3 basic aspects:

  • Delivery : broadcast vs point-to-point (is the reader known at writing?)
  • collaborative vs dictatorial (can the reader modify the message?)
  • data chunk size (how much data has to be dealt)

With this we can really start to define how content is stored in any system and thus pick out what it is good for. These are generalizations and they do take in to effect that all systems allow for some level of relationship between data. So heres the list as I see it:

- Delivery Community Chunk Size
Email p2p dictatorial small
IM p2p dictatorial small
Wiki broadcast collaborative large
Blogs broadcast dictatorial small
Twitter broadcast dictatorial small
IRC broadcast dictatorial small

So heres the big problem that I see… there is no collaborative storage that deals in small chunks. Why is that? My hypothesis is that it’s very hard to build a system that can deal with the context of small chunks of content and understand it. Thus it loads alot of extra work to the user of the system. But is it really that hard of a problem to solve? I’ve been mulling it over in my head for a while now and I just can not convince my self that it’s so impossible to do.

Some days are just better then others




DKW_0121

Originally uploaded by ben_hengst

I kinda wish that I had something witty to say, some nugget of knowledge to pass on to the world. Sadly today is just another day at the office. I keep mullling over building a moose-based lite web framework. A quick stitch of moose + CGI::Simple + some DB/ORM + TT2 and you have like 90% of your framework done. It’s just a matter of doing the stitching and finding the common things that I figure that everyone else does and *presto* lite-framework. I’ll also have to take a look back at CGI::Ex::App to see if that will work as my stitching.

if a wiki is a meal then take smaller bytes

Ok bad pun, but really the big idea that I really took away from this past Wiki Wednesday was that the wiki as it stands now is alot of editable content, but the chunks are too big. Thanks to the coaxing of sam the code poet I’ve been thinking of how to best go about creating a system that significantly reduces the chunks of content that you are dealing with at edit time but still maintain the rich ability for a wiki to span entire groups of knowledge. So this is what I’m thinking so far, (twitter + hash tags || rss) + postgresql + code layer to remove duplication + content promotion by community = wiki with distributed editing.

So how will this work…? Your jumping the gun there kids. So I do not have this all worked out. I’m guessing that this will be an idea that I kick around for a few days and start to code out something and then see how it goes. It seems rather easy, sure collecting content that is tagged and then spitting it back is a problem that has been solved already. But it’s the ‘find the duplication’ part that bothers me, its the ‘how to tell a computer what part of the Venn diagram of this content are we in’ problem. For example:

#wikime notbenh is thinking about wikis
#wikime wikis are communal content that is up for editing
#wikime notbenh is part of a community in portland

So by following this logic:

notbenh => wiki => community => portland

But portland is not directly editable, the community of portland has different properties then the community of say wikipedia. So how to tell the computer this? One answer would be to force the smart human to do the thinking and pepper there post with lots of meta data (microformats, hashtags, ect) but this eats in to the 140 char limit for twitter…. so how else can you get the computer to do that kind of thinking for you, and still stay twitter accessible? I have yet to really work that out, but thats what I’ve been up to thinking about all day long.

Very likely that more news will follow.

ack example: find method names

One of the tests that I have in my default perl test template is a can_ok that I just push a list to all the methods of this object to so that I know when something changes. It’s simple, it’s easy and it’s super effective. If this breaks then that is a huge redflag that this test is out of date. But my old method of just using ack to get me just the lines that start with sub was still a pain (ack "^sub "). So here we go… two more steps later we have exactly what I want.

ack "^sub" | ack -v new | perl -e 'while (<>) {m/sub\s+(.*?)\s+/;printf(qq{%s\n}, $1)}'

I hope you kids out there in internet-land have a happy friday eve.

CPAN App::Ack

pocket sized $200 projector.

Micro SD Card Projector So I’m not convinced that this will have the best picture, but it sure will beat the running around to find a projector at FreeGeek. It makes me really wish that I had a few bucks to throw at this thing for research reasons.

product page

Where to take the wiki

Ok I guess I’ve been inspired by the wiki, I had every intent to really just take these notes and really translate them in to a useful post…. alas it’s 10 and I’m nappy… so I guess harass me in the comments and I’ll comply.

[wiki where to go from here]
- what is the goal of a wiki
  - shared open and welcoming space on the web for interaction with no limitations
  - trust that people are good by nature
  - a system that grows organicly
  - “do not use the if statement for bad” paraphrase from ward
- topics
  - whats not to like about a wiki?
  - revision of exisitng entrinched process
    - allow for some finer granularity to completeness
    -
  - new application of wiki
  - how / new ways to structure data
  - barriers to adoption
  - identity & repopulation
  - what keeps a wiki alive
    - social?
      - does any one care… why should I?
        - encuragement
      - how to aggrigate social knoladge from social network
      - how do you manage the people aspect of a wiki
        - wiki focus on content by people
        - twitter focus on people generating content
    - what makes something stale
  - expand the existing wiki model
    - templates
    - statis truth vs dynamic truth
  - any other blue sky
  - UI modifications
    - modeless edits
      - watching updates in real-time (gobby?)
    - semantic meta data
    - simple “programibality”
    - ‘non-text’ stuff
  
- wild visions
  - a translation layer to a standard (ie I type in a way that is converstaion and it writes in novel)
  - describe a vision for a ‘movie’ and then the robot can make the ‘vision’
  - wiki by comments/twitter and promote to wiki
    - some magic ability to consolidate and record the essence of a conversation in a static stored format that can be refferenced
  - why are there seperate wikis?
    - ie distributed version control… have one single world wide wiki
  - robot translation

- machinenima
  - ‘movies’ via game-engines

[ideas about work]
- do not put your meeting notes in the wiki straight up
  - instead start to creat pages at the ideas presented at the meeting
  - have a comments section to a wiki page.

- really interesting way that ward just brought people in to the conversation based on the people that have not been involved by asking to help him pick a topic

Blogged with the Flock Browser

Tags: