harriyott.com

07 May 2009

OpenHack 2009 London

I'm very excited about OpenHack this weekend. I had such fun at the last one, and this one is already shaping up to be so much better. Last time I hacked alone, and came up with a utility to visit all the links in a user's del.icio.us account to see if they're still around. The links were listed on the page, and any 404 errors turned the link red. It was all updated in a lovely Ajaxy way too.

OpenHack logo

Fun as it was, I was slightly envious of people who were creating team hacks, so this time I posted a team on the join-a-team page. TCALSS, I am now part of a 4-man team, which I'm very excited about. For a few days, we were a 3-man team, and Jez had suggested we do something with Flickr photos of blue plaques.

Max Miller Blue Plaque

Whilst (independently) looking at plaque photos, Jez and I saw some machine tags of the format openplaques:id=nnn. We both (independently) contacted Frankie, who tagged the photos, and it turns out that he's been working on a personal project around the plaques and, as it happens, he's going to OpenHack too! Happily, Frankie is joining our team, and it's likely that we'll be doing some kind of mobile plaque-hack.

What is also fun, is that three of the four of us are back-end developers, and we use three different platforms, so two of us will be learning some new skills.

Apart from hacking, I'm hoping to meet some new and interesting people, so if you've not met me in person yet, please introduce yourself if you see me.

20 April 2009

Site redesign

Well, I have a new-looking website, and not before time. It looks so much better, is strictly XHTML, and is faster than the old one. This post is about why and how this happened.

I decided to have a new site as I'm looking for work, and in a competitive market, my old site was letting me down. It looked dull, the homepage was the blog, and the design started as a free blogger.com template that I've incrementally hacked about with over the last few years. There was nothing (other than a CV) that actually promoted my services and skills.

If I ran a small agency, or was selling a product, then my website would be promotional, so as I'm selling my services, my site should be promotional too.

Once I decided that I needed a new site, I was quite excited about taking the time to do a good job with it.

So, with that in mind, the requirements for the new site were:
  1. The home page should be promotional - describing my services and how I could help potential clients.
  2. It should be an example of my skills, so XHTML strict, valid CSS and generally high quality.
  3. The site should look good, and have a pleasing design. Not too flashy.

Well, I can have a go at number 1 for the moment. I can write about what I do, and have done. Number 2 would be fine too, as that's part of what I do. Number 3 though...

As is common to developers, my graphic design skills aren't that good. With time and practice, I could improve, but it's not high enough on my list. So I can't trust myself to design my own site. I decided to outsource the graphic design. As an individual, any money I spend is at the expense of, say, a family holiday, so I needed inexpensive but good, which is a rare combination.

Fortunately, I have a friend. I've known Lois for about 10 years, and she's just finishing up her A-levels and then starting an art foundation course in Brighton in September. OK, she's not a professional designer, but she's artistic, motivated and I've seen some posters she designed in the past, which did the job nicely. I figured that whatever she came up with would be way better than what I could do, so I asked if she'd do it, and how much she'd charge.

Lois agreed to do it, and within my budget, so we discussed what I was looking for. She went off and researched other sites for people doing what I do, and worked on with three different rough designs, before we met again. Between the meetings, I swayed between thinking that it might be too much of a gamble employing a teenager, and smugly thinking that she'll do a brilliant job and I'll have a great looking website. Happily, when I saw the designs, it was clearly the latter.

I really liked two of the designs, but couldn't choose between them. It occurred to me that it was more important to chose one there and then than to go away and carefully consider which I preferred. So, I picked one, and Lois could then go and refine the design, and work on the actual pages.

We met again last Thursday, and I was really impressed with the page designs. I excitedly took the .psd files with me, and set to work on marking them up in XHTML and CSS. After 6 months of rather dry C++ work, I thoroughly enjoyed it.

The first page I did was my CV, as I'm sending recruiters to it at the moment. I'd previously marked this up in XHTML, so I just needed to change a couple of things to make the design fit. It didn't take long at all, and I W3C validated it, and uploaded it immediately to the live site; it was well received.

Excitedly, I worked on the homepage, and uploaded it, ousting the blog, which in comparison looked worse than ever. How had I put up with it for so long?!

Next step; the blog. This was always going to be tricker, as part of it is outside my control. I use Google's blogger.com: I log into their site, write a post, hit the publish button, and Google FTPs a new page, updated index and archive pages, and feeds to my site. I have almost total control over the template, which has been fine up to now.

I downloaded a 3-year-old blog post page (that nobody would be reading) in order to mark it up. I then iteratively modified locally, uploaded and W3C validated the page until it looked right and most of the errors had gone, but there were two issues. Firstly, ASP.NET. I use master pages, and the blogger template creates an aspx page that uses the master page. I have a <form runat="server" ... > tag that generated an HTML form element with a "name" attribute, which doesn't validate. Also, the blogger.com generated URLs weren't encoded. As it was late Friday night, I left it. I was going to WebDD on Saturday and had an early start.

In the bar after an inspiring event, I was talking to Seb, who told me that I just need to set the xhtmlConformance level in web.config

<xhtmlConformance mode="Strict" />

and that will take care of the form tag. Not that I need the form tag, as I wasn't doing post-backs. I rushed home from Reading, even skipping the geek dinner (which is very unlike me), and spent Saturday night working on it, completely in the zone (first time for months). The ASP.NET code was now XHTML strict, but the blogger.com links weren't. I changed the template to generate <asp:Hyperlink> tags, which I could then modify the URL server-side, with a simple Server.HtmlEncode.

Having seen Phil Pursglove's session on caching at WebDD, I also added caching to the pages, and by 3am, I'd republished the blog, and it all validated. It ran pretty quickly too.

In conclusion, I feel so much happier with the site, and loved the process of updating it. I'm really pleased with how well outsourcing the design went, and I'm much more confident with using XHTML and CSS as a result.

30 March 2009

Availability

Due to being super quick and efficient, I've finished my current contract sooner than I expected. This means that I'm now available for C# contract work right now. I'm based in Sussex, so I can travel to Brighton, Mid-Sussex, or the London Bridge area, or I can work from home. If you, or someone you know has anything interesting that may suit, please let me know. Thanks.

17 March 2009

Hey, check out my new band, er, startup!

When I was in my late teens, I drummed in a band. It wasn't very good, but we were all learning how to play our instruments, and related skills like song-writing, co-operation, how to get gigs, how to get people to come to gigs, how to run rehearsals (hint: don't nip out for chips halfway through).

Many of my friends were in bands, and so were their friends, and some were good, and some weren't, some didn't get as far as gigging, and one or two did pretty well, such as Top Loader and Blue States.

There were many shared traits between bands; everyone thought their band was better than it was (apart from those in really good bands), took themselves too seriously, got over-excited about a rumour of an A and R man maybe coming to a gig, and talked a lot about what it would be like to "make it", and how it was all about us and how great we would be. We'd hand out our rubbishy photocopied fliers to our mates hoping they'll come to the Shelley at 10pm on a Monday night so we'd get a big enough crowd so the landlord might book us again.

Since those days, I've been in many bands, playing various instruments. The best band I was in was called Octopus Jam, which was just great. We all played to a similar high standard, and we played mainly covers, because we all had grown up and realised that we were in it for the fun of it, and how great it was to play songs that people loved, and danced and sung along to. We had families and careers, and didn't want to tour round student dives in Hull, Sheffield and Plymouth in the mad pursuit of the chance of future fame and fortune. Taking away the "making it" turned it into "making it fun". It takes huge amounts of time and effort to even make a living from being in a band, but not a slightly profitable hobby.

When I joined, I set up a web site (of course), and we got random enquiries to play at weddings and parties, for which we could charge some proper money. We asked them what song they wanted for the bride and groom's first dance, and we learnt it, however obscure, and they loved it.

At one wedding, Dave started the first song with an acoustic guitar and sung the first verse. This was a big moment for the bride and groom - their first dance with their friends and family watching, at the start of the great adventure of marriage. At the start of the second verse, the bass and drums came in, and it sounded amazing, just really tight, and lifted the song beautifully. The bride then turned her gaze from her new husband to me, and mouthed "Thank you". This was, by far, the best moment of my amateur musical career; humbling, moving and proud to make the best day of someone's life just that little bit better.

I've noticed several parallels in start-up land. I'm starting a start-up in my spare time, and so are many people I know or who's blogs I've read. Many have said that they want to "make it", either by selling to Google, Yahoo! etc. or by getting VC money to work at it full time and hopefully IPO for huge sums. Some aim for making enough money to pay for the founders to live comfortably and cover the costs. Given enough time, vision, skill, determination and luck, occasionally a start-up will "make it". Most don't. Lots don't even make it online.

I've seen people who take themselves a little too seriously, think their app is better than it is, and do the online equivalent of photocopying flyers to get their friends to take a look at their app. I am one of these people.

I've seen some make it, due to putting in time, effort and money. I met the founders of Trusted Places before they even had a developer. Stack Overflow was always going to be a success, due to the fame and skill of the founders. In the same way, Dave Grohl is never going to struggle to launch a band.

Not everyone has that level of resources to put into an app. I don't. I have to earn a certain amount each month to pay the mortgage and keep my children in High School Musical yoghurts. I can't spend 3 solid months getting my app finished.

Some of the £5 apps I've seen are more like wedding bands - deliberately small and manageable, targeted at a small niche, and doing simple things well. The person writing it is doing it for fun, enjoying the craft of writing the app, and loving it when someone uses it and finds it useful.

I wish I had a neat and tidy conclusion to this, but I don't. Analogies break down, and only partly apply to situations. For me, I just need to find more time to rehearse, er, I mean code, and be a bit smarter with my fliers, and I might eventually be able to run the gig full time.

16 March 2009

Desktop Clients for Web Apps

I'm noticing a trend for creating desktop clients for popular web apps. Twitter is the clearest example; the website was popular, and has a simple and comprehensive API. The whole premise of twitter is based around messaging, so a desktop client is ideal, as it is similar to traditional one-to-one messaging clients such as AIM, MSN Messenger etc. Due to the simplicity of the API, many third-party clients exist.

Other web apps have desktop clients to perform some or all of the web functionality; Picasa, Google's photo sharing website has a great desktop client for editing and managing photos, and uploading them. FogBugz, the bug-tracking web app has a screen-capture tool, and clients for subversion and Visual Studio integration.

For me though, the cleverest desktop client was written by Microsoft, long before the web app existed. I use Google Documents quite regularly for word processing and spreadsheets. Google Documents haven't been around that long, but more than 20 years ago, Microsoft started writing a desktop client for creating word processing documents and spreadsheets, known as Microsoft Word and Excel respectively.

Microsoft waited and waited, and finally a web app was created that did the same thing, and Microsoft in a freak moment of luck, judgement and foresight, correctly predicted the exact format that the Google Documents upload would accept. Documents and spreadsheets created in Word and Excel can be uploaded into Google Documents, and be used in the web app. Amazing. This means that Google (or any other company) need not write their own desktop client - Microsoft did it years ago.

24 February 2009

I am a Snail

I am a snail.
Nomadic; I need no base.
I feed on coffee, power, signals.
I carry; knapsack, laptop.
On my back, my office.
I am a snail.

13 February 2009

Numbered Stored Procedures

I've been looking at some legacy code recently, and came across something completely new to me; numbered stored procedures. It turns out that in the old days, you could create several stored procedures with the same name, and give each a different number. As you can see from the MS documentation, there is a number parameter.

These are called in the normal way:

EXEC UpdateOrder;4 20, 39
EXEC UpdateOrder;7 '12 High St.'


It's not very nice, and the "advantage" of being able to DROP them all in one go (the only feature mentioned in the documentation), isn't worth the diminished readability.

Even worse though, is that the newer SQL Server Management Studio doesn't show them in the tree view, and thus can't open them. Even trying to view the code by using INFORMATION_SCHEMA only shows the first one. I'm sure the old Enterprise Manager must be able to, but I don't want to have to install it especially.

Anyway, I thank my colleagues from throughout my career for having kept me from needing to know about this until now. I don't know who introduced this nonsense into this project (or indeed, SQL Server), and I hope it remains thus.

11 February 2009

Co-working at the Lewes Werks

Today I've been co-working at the brand new Lewes Werks. Co-working means to work in an office with people who are not your colleagues, which is ideal for self-employed people or homeworkers.

It's being run by the same people who run the Brighton Werks, so the philosophy is the same; to provide a shared workspace for creative workers, with an emphasis on the social side of work. There are also two separate rooms that would suit small companies of 4-6 people.

I can turn up with my laptop, and have a break from working from home (which contains builders and children at various times). Once it becomes more established, there will be plenty of people to get to know, share ideas and possible projects, and have a bit of techie chat and office banter, which I do miss.

Lewes Werks logo

The full price list is on the Werks website, but for February only, all co-working is FREE!

There are a few parking spaces, a sandwich shop a few doors away, and a bus stop too, so I'll definitely be going back.