Why I Want a Job at Songkick.com

I hate missing gigs, I hate ebay touts more

The last two gigs I went to were

  • Scott Matthews bloomsbury theatre 10/06/09, with a face value price of £15, luckily I was able to pay £50 to ebay.
  • Next up, Metric at the electric ballroom, again it was my pleasure to pay way over the odds and help kick start the ecomony over on ebay.
Last.fm knows quite a few of the artists I like, and Windows Media Player knows all of them - why can’t they just email me when the tickets go on sale. Hmmm business idea perhaps?

Market review

Who’s doing this? Surely someone in these heady days of Web 2.0.42.1, if not i’m building it this weekend.

At first glance no one is: http://www.google.com/search?q=gig+alerts = a bunch of random, not very useful and decidedly web 0.9 sites. I know, pretty extensive research. However after a bit more digging and some moaning on twitter, fellow music buddy Nick pointed me over to Songkick. Now we’re talking. Quickly pop-in my last.fm profile and we’re off to the races:

Sales Pitch

Why would Songkick want to hire me?

Let’s tackle the HTTP part first. I’ve been creating things using HTTP, JavaScript, CSS and HTML since 1997 and really enjoy creating usable and efficient websites.

Songkick is great, but it could be improved HTTP-Wise

Homepage
Performance is pretty slick on the home page (logged out). Main improvements would be adding expires headers and gzip-ing plain text assets i.e. html/css/jscript

Internal pages
Again nice performance, but some room for performance tweeks
  1. Reduce number of HTTP request, by combining small images into a single sprite using the CSS sprite technique, This tool I’m told eases that pain: http://spritegen.website-performance.org/.
  2. Configure static assets to have an expiration date set far into the future.
  3. GZIP-ing text assets.
  4. Host images off sub domains i.e. images1/2.songkick.com to increase parallel downloading. For example to comply with RFC 2068 Internet Explorer 5-7 limits 2 concurrent downloads per host.
  5. Use CDN’s (Content delivery network) for all static assets. This is already done to some extend on the javascript files, referencing them as you do to Google hosted jquery files.
  6. There are lots of 301’s being generated from beta-static.songkick.com redirecting to www.songkick.com, causing unnecessary HTTP chatter. I guess this is a temporary thing moving out of beta -but it’s not helping performance.

I ❤ Programming

In 1999 I started a web design consultancy with my brother Andy. To start with I did the programming, he did everything else. We sold the company in 2003 and I stayed on to help build the team from 5 to 10 whole people by 2007.

Continuous integration, TTD, Scrum, lean, kanban and pair programming all sound pretty odd but are really rather useful. I enjoy practicing these techniques at least twice a day! I’ve been a .Net programmer on the server for quite sometime but more on the Alt.Net side than in the MSDN camp.

I learnt Smalltalk at university, then Java, later moving to .Net. Recently I’ve been lapping up Objective-C and IPhone development, thanks to the good folks at Stanford.
I’m MVC literate and ready for my next challenge :)
P.S. Learning new languages / platforms not a problem - can do it on the QT
My rather rambling C.V. full of recruitment-agent-compatible (think grep) buzzwords can be found on my imaginatively titled about page.
P.P.S My code is better than my prose.

Search google code using firefox search plugin

Why isn’t there a google code search addon that uses the FireFox search toolbar? Well here’s one that I made until they publish it on the addon’s site.


<searchplugin xmlns="http://www.mozilla.org/2006/browser/search/" xmlns:os="http://a9.com/-/spec/opensearch/1.1/">
<os :shortname>Google Code</os>
<os :description>Search Google Code</os>
<os :inputencoding>UTF-8</os>
<os :image height="16" width="16">data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAKnRFWHRDcmVhdGlvbiBUaW1lAFNhIDEgTm92IDIwMDggMTQ6NDk6MjEgKzAxMDBOQ0Z3AAAAB3RJTUUH2AsBDTQ5ESKKOgAAAAlwSFlzAAALEgAACxIB0t1+/AAAAARnQU1BAACxjwv8YQUAAAJhUExURTy1RNwaADdb1v/y//7/4/////b6/f/8///4///29tslGhVr0u////b9/+X2/VdzvBoljxMsoBMxxRY/vw4qyx1CtGKEqeT29tEfHRlf2/7/9Pv/4ODm/CgmiwsWpImP2ef5//z/8+//8+3//6/S+gATVqq2wtYfDR9W9+f4/yAuxQ8Sn7zX//f/+/7////07fn7/9Dl/xUfgKOpzc4UGSJg2fX/63qk1gAlvXyPx+7/9vn////7//7/9sLO/jE3sRUqqiUztoaP0Pz999IkGRte0fP//0Ju2wAilvj79P/9/ffx//T//+j/9sTb48rq+dLn/8rT8v3/6ccjABRh4SZbyxxJsP/4+v/w9vL8/f/3//7/+P/9+vv//v/9///42dYgLydT1u7//SJuuRxasf/9+P/6///1+v79//z/9vT/6v/5+90YEiFY6Pf//2+a6Rw4tf/1///8+v/6/vD///H////09Pv///f/7f/6/MsUDh1o5/X7/4GZ3xc7k9PZ+fj/5vD/9/j/4ff/8fv6//X/8c0qACBcyvj//2WF2CM1mer5//r+7//8/fj9/83c88rS1Pf/8//589IoDxVjz+3/9sH1/0Z0yhMzut3r/+n///z//+j//8nX/xw4jCkwdO7u///z/9EQBxVc9u7//9fy/36e6VporyQ6sRoyxgQ2sTFguG+s77/e8PT/8//45s4mAC9b2Pb66/v19+v//uT2/+Hf7PL///Dw+Pn9///2///6+P/x+cwuIgdj6Fa2Ski2OU+tVU2zRUO4UFWzOU2xQU21UlC4PUe5Sky0Oy23QL/oQ4IAAAEMSURBVHjaY9i3/8DBQ4ePHD3GcPzEyVMMDAwbN7FuZtlSvnXb9h07d+3es5dhcUfHkqXLlq9YuWr1mrXr1m9gmBI9ddr0GTNnzZ4zd978BQsXMbSzdHR2dbP09Pax90+YOGkyQ3VNbV19XkNjU3NUC3trUBtDbl5+QWGRVHFJaVm5VEVlFUNiUnJKUGpaFDt7ekZmVnYOQ4hyaFh4hFRkVHRMbFxQfAKDq5u7h6eXN6uPr59/QGBQMIOpmbmFpZW1ja2dvYOjk7MLgwarppa2jq6ePruBoZExiwmDpJS0jKycvIKikrKKqhqLOgM3Dy8vH7+AoJCwiKiYOKsEAxMzCysUsLFzcHIxoAFGALW1VP5QbPUrAAAAAElFTkSuQmCC</os>
<updateinterval>7</updateinterval>
<searchform>http://www.google.com/codesearch</searchform>
<os :url template="http://www.google.com/codesearch?q={searchTerms}" method="GET" type="text/html">
</os>
</searchplugin>

Download

google code search plugin for FireFox

Installation

Put just downloaded XML file to the directory under the next path:

in Windows - %AppData%\Mozilla\Firefox\Profiles\%FirefoxProfile%\SearchPlugins\

 

in Liunx - ~/.mozilla/firefox/%FirefoxProfile%/SearchPlugins/

 

in Mac - ~/Library/Application Support/Firefox/Profiles/%FirefoxProfile%/SearchPlugins/

 

where

%AppData% - current user Application Data directory under his home directory, e.g. C:\Documents and Settings\User\Application Data\ in Windows XP, Server 2003 and C:\Users\User\AppData\Roaming\ in Windows Vista, Windows 7 and Server 2008

%FirefoxProfile% - current Firefox profile directory, e.g. 1ab2cdef.default

Reference: http://godfather.net.ru/software/firefox/search/Installation.aspx

SharePoint Event Receiver Type names and values

The following is the complete list of OOTB SharePoint event receiver type names and Ids:

Name Id
ItemAdding 1
ItemUpdating 2
ItemDeleting 3
ItemCheckingIn 4
ItemCheckingOut 5
ItemUncheckingOut 6
ItemAttachmentAdding 7
ItemAttachmentDeleting 8
ItemFileMoving 9
FieldAdding 101
FieldUpdating 102
FieldDeleting 103
SiteDeleting 201
WebDeleting 202
WebMoving 203
ItemAdded 10001
ItemUpdated 10002
ItemDeleted 10003
ItemCheckedIn 10004
ItemCheckedOut 10005
ItemUncheckedOut 10006
ItemAttachmentAdded 10007
ItemAttachmentDeleted 10008
ItemFileMoved 10009
ItemFileConverted 10010
FieldAdded 10101
FieldUpdated 10102
FieldDeleted 10103
SiteDeleted 10201
WebDeleted 10202
WebMoved 10203
EmailReceived 20000
ContextEvent 32766
InvalidReceiver -1

See:Type Element (Event) on MSDN

SharePoint ListTemplateId

The following is the complete list of OOTB SharePoint List Template Ids:

Name Id
GenericList 100
DocumentLibrary 101
Survey 102
Links 103
Announcements 104
Contacts 105
Events 106
Tasks 107
DiscussionBoard 108
PictureLibrary 109
DataSources 110
WebTemplateCatalog 111
UserInformation 112
WebPartCatalog 113
ListTemplateCatalog 114
XMLForm 115
MasterPageCatalog 116
NoCodeWorkflows 117
WorkflowProcess 118
WebPageLibrary 119
CustomGrid 120
DataConnectionLibrary 130
WorkflowHistory 140
GanttTasks 150
Meetings 200
Agenda 201
MeetingUser 202
Decision 204
MeetingObjective 207
TextBox 210
ThingsToBring 211
HomePageLibrary 212
Posts 301
Comments 302
Categories 303
IssueTracking 1100
AdminTasks 1200
InvalidType -1

The template you have chosen is invalid or cannot be found.

I lost 3 hours of my life to a stupid collision of template ID’s. Creating a site collection or child web based on one of my custom templates kept failing with the following UI error message

"The template you have chosen is invalid or cannot be found."

The SharePoint logs were less than helpful:

02/15/2009 14:32:22.97     output.exe (0x10CC)                         0x1E14    Windows SharePoint Services       General                           72k2    High        Failed to apply template "xxxxxx#0" to web at URL http://xxxxxx/sites/test2, error The template you have chosen is invalid or cannot be found. 0×81071e44    

02/15/2009 14:32:22.97     output.exe (0x10CC)                         0x1E14    Windows SharePoint Services       General                           8kh7    High        The template you have chosen is invalid or cannot be found.  

Solution:

Make sure all of the site definition configurations located in %programfiles%\Common Files\microsoft shared\Web Server Extensions\12\TEMPLATE\1033\XML have a unique IDs. Microsoft suggests ID values above 10000 to avoid conflicts with future Microsoft supplied site definitions (http://msdn.microsoft.com/en-us/library/ms441616.aspx). Most custom site definitions therefore use 10001 and if two site definitions have the same ID you wind up wasting several hours trying to figure out why it’s not provisioning your site definition.