Web Applications

Who is I?

Want to take a new look at news feeds? Whoisi is a feed aggregator with a few distinctive features, firstly it is orientated around people, secondly it allows you to associate an individual with pretty much anything that provides an RSS feed, it is also an experiment with anonymous collaboration.

News feeds are organised around people (e.g. John Resig) and for people who just have one blog it isn’t very exciting but if someone has a Twitter stream, a blog or two, Flickr and a LiveJournal then suddenly you are looking at a consolidated view of everything that person is up to.

Which is either really cool or is the behaviour of a demented stalker. For people who have a strong web presence and are generally pretty cool and interesting then it is really useful to get a single view of them. For example John’s JQuery conference posting works better when you combine Twitter and the photostream.

I think I kind of prefer Whoisi’s liberal anarchy to most of the other sites I have seen. It asks important questions as to how the web should work. Why do we need accounts and passwords? If information is public then do individuals get a say in how they information they provide is organised?

Standard
Web Applications

Nicely Couched

Couch.it is the new wiki application on the block. I got pointed towards it because it is running on top of CouchDB. But having mucked around with it for a bit I have to say that it’s not just a good example of the kind of thing you can do with Couch, it is also the most exciting take on Wiki software I’ve seen for a while.

What is there to like? Well firstly there is the idea of the anonymous wiki that you can create on the fly. Products like GitHub have significently reduced the barrier to setting up an open source project. Just choose a name and that’s it you are away coding and sharing your code.

Couch.it is the same, got some text that you need to organise? Got some ideas you want to get down? Just create a wiki, write some stuff and then if it is working out claim it and give it a decent name. Couch.it just feels totally spontaneous.

It also totally resolves the issue between using a wiki-syntax (in this case Markdown) and having the pretty WYSIWYG interface. The near-realtime preview is fantastic and makes you wonder why you have ever had to click on another tab or button to see your preview.

The site has a really unfussy design (except for the goddamn rounded corners (stop it, this isn’t 2006)) but gives you a few customisation options.

The support has also been great and turnaround has been good on issues.

The subdomain naming is really easy to use, compare how easy it is to mucking around with settings in something like Google Sites.

If you are looking for a wiki or you want to see some CouchDB in action I totally recommend this site.

Standard
Blogging

2LDNR

How long should a blog post be? The consensus is pretty clear: damnably short. My previous article about microblogging was meant to be a quick review of current state of play in microblogging but as I was writing it I was constantly aware of how long it is.

One thing that has changed blogging a lot is that more often than not no-one is subscribing to your newsfeed. Instead they arrive at your site through Google search, link sharing sites or (in the case of WordPress) tagging. If someone hits your site because they were searching for “cool insects in a hot tub” then they want to read some stuff about insects in boiling water.

So for the benefit of those people the next couple of articles have been broken down into individual topics rather than being grouped together as a review of “the new hotness”.

Since I am on the topic though, 2LDNR is serious the most annoying chatspeek (not chatspeak) acronym around. Why waste my time telling me what you haven’t done? Just smash your face into your keyboard and hit post like you would have done anyway.

Standard
Web Applications

Microblogging Sites: Got to catch them all!

So I am currently using Twitter, Identi.ca and Jaiku (ask for invites if you want them). Of course to get every microblogging site I probably also need accounts on Plurk and Pwonce; at least. In fact in the time I typed all this there are probably another two or three that started up and which I need to get accounts on.

The good news about all this fecundity is that each system actually has some distinctive features and there is a fair amount of innovation and imitation amongst the players. Twitter has pretty much defined the genre but its agonisingly slow progress towards stability has meant that its feature set is actually pretty sparse. It is real bare bones stuff. Only the recent election page gives an indication of what a future Twitter might look like.

Laconica is open source and Identi.ca is clear on the ownership of the material on the site. Collectively they represent the open source solution to microblogging. The service also has the idea of tags that create a new way of reading posts and actually encourage you to connect to people you do not already know. Tags are really Laconica’s special sauce and as people use hashtags anyway I am sure it will not be long before all sites recognise them (particularly as Ping.fm and the like broadcast the same message to all the sites). For the moment though I love tagging stuff in posts and then looking at who else has posts with that tag.

Jaiku is part of the Google umbrella of services and you really notice when the ads appear. It makes you think “How does Twitter get by from week to week?”. Jaiku’s take on microblogging includes two special features, comments and channels. Comments are simply the ability to reply to other’s posts. Ironically the comments have no message limit (unlike the original post) and therefore comments on a post can become more forum post like. It’s interesting because it allows you to expand on the original topic but it also feels like something that defeats the whole purpose of microblogging.

The other problem with Jaiku is that comments do not appear threaded in your personal timeline so your contact’s comments float there with no context and you have to explictly root out what the comment is responding to exactly. This is, officially, rubbish; comment threads should work just like Facebook’s new comment system with threads appearing in your timeline in order and regardless of who you are following.

Jaiku’s channels are also a mixed bag, they again allow you to connect to people who share interests with you but who you don’t yet know. Great, but currently there are simply not enough people on Jaiku, this will change when people can login to the service with their Google ids but until then a lot of channels are filled with RSS feeds which is technically nifty but also spammy and boring. Being able to comment on RSS feeds is only interesting if there is someone else reading your comments.

The other problem is that channels are much more formal than hashtagging. The nice thing about Hash Tags is that you can drop one into your post and see if there is anything else similar. With a channel you have to open and own one and the lack of people means you effectively create a channel with one person and no posts. At least the hashtags guarantee that there is always one post for each tag.

Right, that’s the technical side of things out of the way. One interesting thing about having multiple blogging accounts is the way you can now start to divide your posting. Previously I was probably over-posting to Twitter; I hate people who post their breakfast as much as anyone but it is easy to slip into trivial updates.

Now with multiple accounts I am starting to segregate stuff. Since Twitter was originally about keeping the pulse with the distributed beast that is The ThoughtWorks I am keeping technical/work stuff there. Weird observations about London and more esoteric stuff is going to Identi.ca. Partly because I hope to find new cool people who like esoteric stuff via tagging.

Jaiku has struggled to find a niche in my microblogging ecosystem but I am starting to think that if we take discussion and conversation to be the primary thing Jaiku is about then the logical content is actually contentious stuff and posts about games.

I will be curious to see whether people begin using their accounts in different ways as well or whether they just spam all their accounts with the same stuff via a cross-posting application or website. If they do, then I think Twitter suffers most and Jaiku gains as you effectively gain the ability to annotate and enhance posts in Jaiku in a way that you cannot at the moment in Twitter.

Standard
Work

Against Trust

Work is generally better in high-trust environments, it is one of those success breeding success things. However you cannot simply get to high-trust because it is mutually beneficial to both parties. During the trust gaining stage things must be proven.

One of the nice things about working in IT (rather like studying for a Maths degree) is that things don’t have to be taken on trust. Sometimes it is convenient to but if needed to you can often make the effort to show that some thing happens exactly as you said it does. That’s the joy of unit-testing for example. Scala language advocates have also talked about the determinate nature of its static code checking. The code has to be right, otherwise it wouldn’t compile.

So in general I like trust, because its productive; but I don’t like to trust because I don’t feel I should have to. It should always be possible to show that what you are saying is true. Of course in consultancy that kind of proof is hard to come by so instead of absolute proof you instead have to come up with metrics that you can measure to allow you to fail fast instead of wasting a lot of time (and trust!) on an idea that isn’t going to pan out. This means you do not have to ask people to trust your ideas, merely agree some criteria for judging success and failure at minimum cost.

These ideas are some touchstones of how I have come to see effective IT within organisations. They are also what I feel informs me in a recent debate going through ThoughtWorks about Pay Transparency. You can find an effective starting point in Matt Buckland’s blog and what I think is an excellent statement of why Pay Transparency is a good idea in Francisco’s blog.

For me trust is good thing but should never be a necessary thing. Matt’s final point in his post is the most important as I think it is what really informs his view on pay transparency:

In all of these discussions the culture of transparency is held as the ultimate goal of an organisation and I’d wonder if this is the case. In my opinion it is a culture of trust we should strive for. Employees who feel they are paid fairly, because they have effectively sold the “exploitation of their labour” with full knowledge of the market in which that labour is sold will be better able to realise their own position … but instead trust they are given a fair salary based on their own personal circumstance and that the company they work for will aid them in their strive to grow and develop as an individual – salary, the nuts and bolts measure of their value, will become secondary.

From my point of view I want a culture of transparency because I believe that from it a culture of trust emerges. I don’t want to have to trust anyone, I would rather they proved what they say. In exactly the same way as I have to build trust with clients. In exactly the same way as a client perhaps trusts my code but can inspect my test reports at any time.

In my experience the processes and procedures around pay in the industry have been exceedingly opaque. There are so many variables and factors that pay is effectively arbitrary. I have often thought that pay really only reflects the ability of an organisation to function effectively without you.

In this context salary transparency is really the most important thing you can do to build trust around pay as few organisations can articulate the process behind salaries except that it is down to the abilities of individuals to negotiate for themselves and devil take the hindmost.

This post title says “Against Trust”, but it is really “Against Blind Trust” which is what people who reject Pay Transparency but forward no alternative mechanism are really asking for.

Standard
Work

Perverse Zen

Sensible companies plan for poor outcomes, great companies plan not just for bad outcomes but for good ones as well. They look at a range of situations that might occur and create some kind of strategy that will guide the reaction should that situation actually occur.

Most companies however exist in a state of perverted Zen where they are so in the moment they literally cannot see a second into the past or the future. If things are going badly then things are terrible, spending is slashed, projects cancelled and all decisions delayed. If things are going well then things are terrific, projects are approved without any sense of due dilligence, money is spent liberally as there is plenty coming in and the current good times are entirely due to the wisdom and good governance of the current management.

The trouble with this Perverse Zen is that it is entirely reactionary and it makes the whole company vunerable to the whims of whatever mood is currently blowing through the organisation. Good companies I have worked for have always had a range of responses to the future. They also went through the effort of identifying what must be done regardless of what happens to economy, to their customers or indeed to the structure of their business.

These priorities then inform what the response to a given situation will be. When times get bad cutting effort to zero is often counter-productive, you want to match effort to your capability to spend. Similarly when times are good it helps to already have a plan as to how to spend sensibly; bringing about the largest and most immediate benefit to the organisation.

Standard
Java

Introduction to Gant

This post was started the day after a Geek Night, it was a very, very cool Night…

With every topic I wanted to talk more about it and I felt we didn’t have enough time to get all the buzz out but one thing that struck me was that not many people seem to have heard of Gant. This is a real shame as I have recently converted and therefore have all the zeal of the convert. This zeal leads me to try and convert those who have not seen the light (yet).

What is Gant? It is a Groovy wrapper around Ant tasks. Groovy comes with an Ant Wrapper so what’s the great shakes you might ask? When Gant handles all the target dependencies for the project. It is essentially the missing part of the puzzle that gives you all the Ant functionality and a lot more. Gant adds some methods to the base Groovy shell execution environment that allows you to say that a task A depends on task B.

Enough chat though let’s get on with some examples. Download the standalone gant installation and then invoke the gant script (for your environment) in a new empty directory. It will give you a moan about not being able to find a build.gant file. So let’s create one now.

My first gant file is on Pastebin, cut and paste into your build.gant (or retype it to really get the benefit).

Now when you call gant you should see Target A and Target B printed out in the order of their dependencies. Type gant b and just Target B should be printed.

To be honest this really is the core of Gant so it may seem trivial but it’s important to understand. After all if you have ever taken a crack at this Kata you will know that dependency resolution isn’t trivial.

So what should we take away from this small example? Well I think it is important to note that it is Groovy syntax, the attribute assignment in target is standard but note that we don’t need to quote the property on the left. The string is like the description attribute in standard Ant tasks.

The println call is not mapping onto Ant’s echo it is the Groovy println so all the normal stuff to do with GStrings (like interpolation) applies here. Similarly the block attached to the target is a normal closure.

Dependencies are listed by calling depends, why isn’t that in the target declaration like in Ant? Well because you can create a dependency at any point in the closure. That means you can dynamically define the dependency graph. Which when you think about it, is kind of mental.

I did not want to have a huge post so the next one is going to be about using that dynamic definition to DRY out my Gant file.

Standard
Ruby, Web Applications

Haml: Round Deux

So, with a comment on an earlier post about Haml, saying that it had had a major update I decided to give it another go. This time in conjunction with the web framework Ramaze.

While Haml has definitely improved but there was a definite sensation of returning to an abusive relationship. Haml is very cool but it can also be a colossol bitch to use. Mostly because of its whitespace lovin’ ways. Care to punt as to what the root cause of this issue was:

Illegal nesting: content can’t be both given on the same line as %form and nested within it.

I’d put a space character between my attribute curly braces and the form tag declaration:

%form {:action => 'url'}

when I should have put:

%form{:action => 'url'}

Do I really need this level grief just to avoid writing closing tags?

Haml does, as its advocates say, bring a clean and clear syntax to the table but it also brings a bundle of its own issues along the way. Particularly time consuming is having to adjust indents when placing content at different layers. The strict two spaces rule means you have to adjust blocks and even if you set up your browser to do soft tabs at two spaces (just for one syntax) it is still easier to play around with markup than Haml.

One feature I did like a lot since last time is that variable interpolation is a lot easier now:

%p== My variable goes #{@here}

Inline tags are still hopeless but that’s true of mostly of the lightweight templating systems.

Standard
Ruby

Still waiting for a Bulk Gems update…

I need to post about this again because life was just getting impossible on my cheapo virtual box. Well, I say cheap but it probably still has 75Mb of free memory that was just being hosed by RubyGems.

I tried updating to Ruby 1.8.7 but that had no effect because the culprit is really Gem itself.

The final solution (after naturally getting off 1.8.6, do it today…) turned out to be building and installing Gem from the 2.0 source tarball. Since getting away from 1.1.1 my Gem experience has been a lot smoother. Ramaze and the monsterous Merb installed smartly and without fuss. Don’t suffer for longer than you have to!

Standard
Java

Waiting for my Ruby Gems Bulk Update

One of the huge pains in the ass when using CRuby (MRI) RubyGems is that if you haven’t updated your gems in a while you can easily send your machine into a spin when you innocently type sudo gem update.

The message:

Bulk updating Gem source index

appears and then you just sit there… for hours… while gem… tries to parse… the yaml… which is obviously… much faster… than streaming… XML.

JRuby doesn’t seem to have the same issues, presumably something to do with the implementation not being so memory hungry.

Anyway if you are having this problem too you’ll be glad to know that a happy ending is possible via use of the –bulk-threshold parameter. Simply use a command line like the following and your low resource system will not actually process in chunks rather locking up your swap memory.

sudo gem update --bulk-threshold 10009
Standard