Introducing Kitman Labs

Today, I’m delighted to announce the launch of my new company Kitman Labs.

I’ve teamed up with some of the most experienced sports scientists in the country to develop the next generation of athlete management software. Together, over the past 18 months we’ve been carefully building our first product, Injury Profiler, which predicts, manages, and reduces the risk of injury in professional sport.

You can read more about the company and our first product on the new Kitman Labs Blog.

From a personal perspective, I’ve been looking for an opportunity for years to develop a software product that solves a genuine problem in an exciting area. And it’s hard to find anything more exciting than sport. This will be a terrific adventure, and I look forward to the challenges ahead.

Thanks to all who have helped us get this far. It’s just the beginning, but it’s going to be an exciting road ahead and it’s great to have you on board.

More news to follow in the coming weeks.

Bootstrap Arrows

Bootstrap Arrows is a simple add-on to the popular Twitter Bootstrap framework to include the use of arrows in your UI designs.

I found myself working on a Bootstrap based project recently and had the need to use arrows within the UI. I needed these arrows to continue on the various styles of built-in Bootstrap alerts. Above you can see the sprite used to power the arrows. Currently only up and down arrows are supported, but if I need other ones in the future I’ll extend the add-on. UPDATE – I have updated Bootstrap Arrows to support arrows at any angle with a small jQuery plugin, using CSS3 transforms.

There’s a simple homepage for Bootstrap Arrows at http://bootstrap-arrows.iarfhlaith.com where you can download the code and view usage examples.

Download Bootstrap Arrows in zip format or clone it on Github.

Drop me an email or leave a comment here with any questions or feedback.

Building The Debs Store

Earlier today we announced the launch of the new debs store over on debs.ie. It’s something we’ve been working on for a while and we’re pretty excited about the value it’ll bring to debutantes trying to find their debs dress or tuxedo online.

I wanted to write a bit about the technologies behind the new store, and some of the decisions we made along the way, as we’ve learned a lot through this process and I wanted to share those lessons.

Finding Stock

The first challenge was finding stock to put into the store. There were a few different methods to try including partnering directly with boutique stores, or even stocking inventory and providing order fulfillment ourselves. But we’re an online business and we want to automate as we much as we possibly can allowing the business to scale in the right ways. We decided that the only way to go was to partner with other online stores, linking their content into our aggregated store focused purely on debs apparel.

There are literally hundreds of online stores selling stock suitable for the debs market. The only problem is that they sell pretty much everything else as well making it very difficult for debutantes to find what they need. Having a curated collection of all debs apparel provided across these online retailers in one place was our goal with this project. Now all we had to do was find a way to link in this content and commercialise it.

Commercial Decisions

There are a number of indirect benefits to launching a store like this one. It raises our profile in the industry and draws further attention to our debs planning and ticketing software. But the store needed to make commercial sense on it’s own as well. This is where the affiliate platforms come in. We looked through various affiliate networks, including LinkShare, SkimLinks, TradeDoubler, and Affiliate Window. We needed an affiliate platform with a robust API as we would need to do some pretty heavy integrations to keep the store managed and stocked with appropriate content.

Backend Integration

In the end we went for a flexible solution which supports multiple affiliate platforms. We built a set of administration tools which tie directly into each of the affiliate platforms’ APIs and allow us to really easily add and remove products into our store from each platform with a single click. It’s still a manual job, and always will be because we care about the quality of content we list, but integrating in this way really helps to speed up that process. Secondly, for obvious reasons we’re only listing items from merchants that actually deliver to Ireland so that’s a factor to consider as well.

To maintain the accuracy of the stock and it’s information we run daily scripts which compare the information in our store against the data returned in the corresponding API calls. This keeps the store fresh and reduces the number of dead links to virtually zero.

Improving the Content

In some places the images returned back from the affiliate platforms weren’t of a high enough quality for what we wanted, so we went about writing some additional scripts which automatically called directly out to the listing on the merchant’s website and, using some clever pattern matching, we pulled out much higher resolution images than are provided in the affiliate platforms’ API feeds.

We are also able to use some heuristics code to create relationships between items helping to offer relevant suggestions to users browsing the store. Much like the ‘related products’ links you often see in large online stores.

Server Optimisations

Despite Ireland being very small, and debs being extremely niche, the debs dress industry is still pretty important, and can be quite lucrative. To cater for the additional expected traffic we’ve bulked up our server somewhat. Here’s a quick overview of what we did.

Using CodeIgniter’s built in caching features, we implemented database caching and file caching where appropriate. Database caching is a relatively simple technique which alleviates pressure on SELECT calls to the database server. It stores the returned value of each SELECT statement in a file cache. And instead of querying the database, CodeIgniter checks if a cache exists for that query. If it does, then it uses the contents of the file instead of querying the database.

On top of database caching, we introduced file caching were appropriate. File caching is natively suppoted by CodeIgniter as well. It also supports Memcached and APC cache engines, but our server doesn’t have a huge amount of RAM right now (just 1GB), so we’re happy enough to use file caching for the time being. With file caching, the result of the processed PHP script (the HTML) is stored in a separate file. CodeIgniter checks if this file exists before attempting to run the PHP. In many cases this greatly reduces the CPU load on the server and reduces the processing time to similar of what it would be if the server was serving out static HTML files.

Not stopping there I wanted to improve our actual PHP configuration on our server as well. I switched from SuPHP to FastCGI and installed PHP’s APC caching engine. APC caches PHP’s interpretted code into a binary, helping to greatly improve any server’s performance by many factors. Using Blitz.io to load test our server I could see the server’s performance from 1-250 concurrent users over 1 minute going from an initial 143 successful hits and over 80% of timeouts to 2,400 successful hits with less than 1% of timeouts. That’s an improvement of over 16x. Using this new configuration our server can now handle a sustained level of traffic of more than 3,000,000 hits/day. Not bad for a single VPS running a CodeIgniter app and a MySQL database server.

I’ve also got plans to introduce Varnish Cache as a reverse proxy should that be needed. I’m expecting that to increase our server capacity to approximately 8,000,000 hits/day. Like they say, if that becomes our problem it’s a good problem to have.

Our new domain: debs.ie

As part of the launch of the debs store, we’ve also fully migrated over to debs.ie. Yep, we’ve ‘pulled a facebook’ and dropped the ‘the‘ from our name. We’re really pleased with the new name and hope it’ll help to reaffirm our commitment to the debs industry and put us in top spot in people’s minds when they think of planning any aspect of their debs online.

Migrating an existing website from one domain name to another isn’t a straightforward exercise. There are many considerations to make and quite a number of steps to go through. I’ll write up a bit more about that in my next post.

Until then, please visit our new debs store and if you know anyone having their debs this year, please tell them about it.

Repairing a HP nx7300 Power Adaptor

I’ve had my HP Compaq nx7300 for over 6 years now. It owes me nothing. Over the years, I’ve practically rebuilt it entirely. It’s on it’s second motherboard, 3rd hard drive, second battery, and will more than likely need a new screen in the next few months. It’s also on it’s second power adaptor, which for the last month has been threatenting to fail. And this morning, that’s exactly what happened. Bye bye power adaptor. At least for now.

I’ve ordered a new adaptor from the good folk at laptopchargers.ie, based in Cork.  But in the mean time, and with nothing to lose, I thought I’d have a go at repairing my own one.

The Right Tools for the Job

To do the job, I used only the tools that most people have in their toolbox. If you want to try this yourself you’ll need a wire-strippers, scissors, masking tape, a long nosed pliers, wire cutters, a blade, a mini hacksaw, and something to pry open the case. I used a tool for wedging up hammered nails, but a chisel or sharp flathead screwdriver will work just as well.

Opening the Plastic Casing

The hardest part of the repair job is getting the black plastic casing open. For this, I started with the blade and worked into the seam around the entire adaptor. Once the grove was large enough, I used the hacksaw to open it further until I could see that I’d broken through the plastic.

There are four little clips inside the adaptor at each corner which you’ll have to break in order for it to come apart. This is where you’ll need the screwdriver or chisel. Pry open each corner until you hear a little snap. After you’ve done each corner you should be able to lift off the top and bottom of the plastic casing.

Finding the Problem

Once the casing was off I could see more clearly where the cable enters the adaptor and how it’s wires were organised. In your case it will help to have an idea of where abouts your wire is damaged. For me, I knew it was very close to the inside of the casing as there was no visible damage to the adaptor and it could only be damaged at the point where the cable meets the board.

As it happens my hunch was right, as the majority of the secondary shielding had snapped.

Removing the Insulation

Next, I cut the power cord about one inch from the hard plastic surround at the base of the cable. I wanted to leave myself enough wire to work with at that end.

There were three parts to the power cord, an outer shielding, and inner shielding, and a central wire to carry the current. Once cut, I stripped off the outer insulation and twisted them off to keep them neat.

I then did the same thing with the end of the cable, discarding the broken section.

Here you’ll see I stripped back the cable, exposing the three different layers. I was careful to stagger the stripped insulation so as not to cause a short circuit later on. The photo above only shows two layers stripped back but remember to strip back the third blue inner wire as well.

Adding Insulation

Now that each side was stripped and all the damaged cable had been removed it was ready to be re-connected. I carefully twisted each cable together and then covered each connection with masking tape.

Next, I added another layer of masking tape over the individual cables, bringing them together and stabilising them.

In the above photo, you can see I’ve added the extra layer of masking tape. And in the background of the photo lies the hard outer protection designed to stop the cable becoming damaged by rough use. I had to slit this down the side to remove it, but having done that, it meant it was quite easy to wrap it back around the cables, giving them even more support.

Adding Back the Casing

Once the wires were fuly protected and insulated, I added back the plastic casing, wrapping masking tape at each end to hold it in place.

And that was it!

The whole process took about an hour, and costed just a few pieces of masking tape. Can’t get much better then that. The adaptor is working fine again now, for the moment anyway. I’ll update this post if I have any issues with the repaired adaptor over the next few weeks.

Here’s one more close up photo of the fixed outer casing.

Footprint – Now Open Source

Footprint was my first real web app with Webstrong, but for a multitude of reasons I never launched it. I have no regrets with that decision, it was definitely the right thing to do at the time. But lately I’ve been looking back on what I’ve achieved so far and I’ve decided that despite Footprint never reaching it’s potential as a business, it can still provide some value as an open source project.

The Original Idea

Started in 2007, I came up with the idea whilst on a flight to China, having just finished 37 Signals’ Getting Real. Feeling totally inspired and with absolutely no market research whatsoever I went about wireframing up a web app, that I would use myself, to help me work more effectively with the web design clients I had at the time in Webstrong.

During the flight, I filled a large notebook with ideas, features, names, technologies, wireframes, and even the infrastructure of the software. The ideas were pouring out of me. I wrote hundreds of pages. Filling the notebook on that flight was and still is the most productive work I’ve ever done.

Two weeks later, on the return flight to Dublin, after having fleshed out the plans for the app over the holiday, I began coding. As luck would have it, we were upgraded to business class, which gave me plenty of room to work on my laptop and personal access to power. I began coding. Whilst others slept on the flight I was writing code. I coded non stop for 14 hours, another session of extreme productivity, and by the time we touched down in Dublin Airport I had the outline of a working prototype.

Getting Support

Over the next week, I put together an application for the Hothouse incubation programme after having heard about it from a friend. As luck would have it, they were just closing their next round of the programme and I managed to get an interview straight away. And so, with no business plan, a working prototype, a hastily filled out form, and a 2 hour interview I managed to land a place on Hothouse.

Over the next month, I continued to work on the app, adding new features, multi-tenancy, and even built out the start of the promo site. During the same time, I prepared my CORD grant application, a business grant from Enterprise Ireland, aimed at technology startups with international potential. It gave you half your salary from the previous year, tax free, up to a maximum of €38,000. Entrprise Ireland took no equity in the business and the money didn’t have to be paid back or even matched. It was, and still is, the cheapest way to fund your startup in Ireland.

Whatever I said in the CORD interview, I must have impressed the judges, because a few weeks later, I was approved for the grant. And sure enough, the next month I began to receive the first of 12 monthly payments into my personal bank account. Plenty of cash to support me whilst I worked on and launched Footprint.

Polishing and Polishing

I was on a roll. I was 25, and running an Enterprise Ireland funded technology startup. Over the next few months, nothing could stop me. I added features, installed a blog, a forum, integrated Amazon’s new S3 storage, OpenID, RSS, and even made a start on an RESTful API. I did some real market research, wrote a proper business plan, went to networking events, told people about what I was doing, got feedback – some good, some bad. I did all of this, all without launching the actual app.

This was my mistake. In hindsight, I now know that my ego was too fragile to launch an app that I wasn’t completely happy with. I had a minimum viable product, but I kept on polishing it. I postponed launching it, constantly giving myself reasons not to launch. Despite what everyone was telling me, I felt I knew best, and that launching now was a mistake. However, nothing was further from the truth.

Failure to Launch

The truth was, launching it immediately was the only way it could have worked at all. These days, once you have an MVP (minimum viable product) it’s time to launch. Period.

And as time went on, I got distracted. People started asking me to help them on their own projects, I got busier, and worked less often on Footprint. And all the time in the back of my mind was this doubt, that it simply wasn’t good enough.

In reality, I should have let the public decide whether it was good enough.

Over time, development on Footprint slowed, and eventually stopped. Consulting took over, and the seduction of a large paycheck won out. I guess I just wasn’t ready for what could have been.

Finding My Passion

That was in 2008. Almost 4 years ago. What I learned through that process has helped shape my career ever since and gave me my mission for the rest of my life. Despite the failure, I had found my passion  – I wanted to run a web app business. Bleeding edge technology, community, leverage, global reach, passive recurring income. It had everything. It was looking likely now that it wasn’t going to be Footprint. But the lessons  I learned from that journey gave me skills and experience that ironically I may not have gotten had it succeeded.

Having learned so much, and gotten so much out of it, I wanted to share it with you – especially if you’re thinking of getting into the business of web apps. It’s the greatest industry in the world. And whilst the rest of the world is in a deep recession, web apps are booming.

Going Open Source

Now it’s 2012, and rather then have Footprint continue to gather cobwebs on an old server, I’ve decided to give others the chance to learn what I’ve learned. And so, as of today I’m opening up Footprint completely and releasing it open source.

The Footprint web app has been fully launched now at footprintapp.com, despite it not being completely polished.

I’ve released the source code on GitHub under the Open Software License v3.0. Included is a full installation guide and database generation scripts. If you want to host a copy of it yourself, you can. If you want to improve the currently hosted version, just make your changes and send a pull request. If you want to strip it down and take out the pieces you need for your own project, that’s fine too.

To help understand how Footprint works, here’s an overview of it’s system architecture. I wrote about it in more detail previously.

Footprint was built in PHP 4.2 on an Apache web server, and uses PEAR and the Smarty Template Engine extensively. You will need a MySQL database and an Amazon AWS account to get everything up and running. Follow the instructions in the installation guide for step by step instructions.

What Next

Nothing would make me happier, then for someone to take a copy of this code and do something interesting with it. In fact, if all they did was write some improvements and use it themselves, then that would be just perfect. Footprint is now open source – that’s the whole idea! It’s over to you now to decide what you’d like to do with it.