January 2nd, 2010 | Joel | Comments

I have some bold aims for 2010. I truly believe it will be a tipping point that I’ll look back on for years to come, and all I’ve been learning and instilling in my mind in 2009 will be put into action. I am very excited about the year ahead. I’d like to take a few moments to share my aims for this new year.

A look back at 2009

Firstly, a quick glance back at the year that has passed. So what did I manage?

  • Graduated with a first class degree from a top university.
  • Both started earning a good amount and have taken my own choice of path by creating a startup.
  • Put myself out there in some situations outside my comfort zone, with huge rewards.
  • Met so many great new people, some of which have become great friends.
  • Solved my worry of moving back to Sheffield in terms of the lack of technical and ambitious people.
  • Made going to the gym and swimming a habit which I love.

I’m very happy with what I achieved in 2009, but I’m certainly not satisfied. I’m hungry for success.

Major goals for 2010 (that’s twenty ten!)

So, what are my goals? Here goes:

My startup

2010 will be the year that OnePage, my startup, will thrive. With my great friend and business partner Oo, we have been working hard and we are definitely reaching some significant stages now. We both believe “always be learning” and applying that to ourselves and to the problem we are trying to solve with OnePage has got us far already and I’m confident we will achieve a lot by continuing with that mantra.

Goal: Start earning revenue from OnePage

Personal and health

I’ve been working on improving every aspect of what I do towards the end of 2009 and I aim to continue this into 2010.

Goals:

  • Continue regular gym sessions and swimming (3-4 times per week). Something to aim for – swim a mile of front crawl.
  • Make eating 7 fruit or veg a day a habit.
  • Consistently have at least 7 hours of sleep a night.
  • Go for a short break by myself at least once.
  • Continue drinking less.

Education

Sure, I achieved graduation with a first class degree in 2009, but that doesn’t mean my education is over. I’ve discovered so much top quality information in books towards the end of 2009 and I’m eager to read much more. If you read a great book by someone it’s like a shortcut.

Goals:

  • Read 52 books
  • Improve my knowledge of people and news – after an embarassing game involving describing people at Christmas this year, I realised just how few people I know about!

Sharing

Sure, I love to share and I’m a  good guy. However, one thing I learned this year is that the more you give back the more you will succeed. So you can be a nice guy and experience real benefit too.

Goals:

  • Release 12 bits of open source code throughout the year.
  • Write at least 12 proper blog posts (that’s this blog).
  • Write 100 miniblog posts (my posterous for on-the-fly discovery publishing).
  • Be more involved with startups I can help.

Networking

I discovered the true power of networking in 2009 and it enabled me to meet many great people and find out their discoveries so that I can shortcut my success. I plan to do this much more in 2010. It’s not about numbers, but it’s nice to set some targets:

Goals:

  • Attend at least one big tech conference
  • LinkedIn: 300 connections.
  • Twitter: 4000 followers.
  • Facebook: 700 friends.

There’s more

That’s certainly not all I plan to achieve, I also plan to travel much more. This will be a nice blog post to come back to in order to remind myself and let you guys keep me on track. I hope you achieve what you want to in 2010!

October 1st, 2009 | Joel | Comments
I have a laptop for when I’m going in to do contract work or when I’m on the move, and I have a desktop for when I’m at home and working on OnePage.
What I’d really like to see, is for Google to let you log into the Chrome browser with your Google credentials and save tabs to your account. These tabs should then be synchronised across multiple browsers on multiple devices.
2820302020_eb39fa50e0.jpg
This would be absolutely fantastic for me as I often have a number of interesting tabs open on my laptop, then go home and use my desktop and forget about them until I next use the laptop.
For bonus points make it work with Android too! :)
3539726977_6accd60e9c.jpg
If you enjoy my posts you should check out my OnePage and follow me on Twitter.

September 30th, 2009 | Joel | Comments

The problem

I was recently working through some Internet Explorer issues with a web application I’ve been involved in developing, when I came across a strange little bug related to the “change” event. I found that I had to click a radio button twice, or click a radio button and then click elsewhere on the page in order for the event to be triggered. This obviously pointed towards the event triggering to be buggy in Internet Explorer.

The explanationFrom QuirksMode:

IE fires the event when the checkbox or radio is blurred, and not when it is activated. This is a serious bug that requires the user to take another action and prevents a consistent cross-browser interface based on the change event on checkboxes and radios.

The solution?

I see there being 3 possible solutions:

  1. Use the “click” event rather than the “change” event.
  2. Use browser specific targeted script in the JavaScript functions where the “change” event is required.
  3. Use conditional comments to include IE specific JavaScript, and trigger blurring and then focusing the field.

The best solution right now seems to be to use the “click” event rather than “change” in these scenarios. This is certainly not an elegant solution and does indeed “break” the keyboard functionality since it is possible to change the value of an input field with the keyboard and hence not trigger a “change” event. I’d say the 3rd solution comes a close runner up, and the 2nd solution definitely being suboptimal, for the reason that it is difficult to consistently detect the browser using JavaScript.

I found it interesting, so I thought I’d share and maybe it will help someone! I’d love to hear your opinions on what you think the optimal solution is.

If you find my posts useful, you should check out my OnePage and follow me on Twitter.

September 25th, 2009 | Joel | Comments
A great guy called Ricardo has kindly translated this post into Portuguese, see it here if that’s preferable.
I have just implemented this functionality for OnePage and I’d like to share it in case people find it useful.

Why send email with Gmail rather than the server’s SMTP configuration?

There are a number of advantages I see for doing this:
  • Ability to develop locally and test email sending functionality without going to lengths to setup a local mail server.
  • Ability to utilise Google Apps emails to send email from emails which are on your own domain.
  • Ability to have a reference of the mail you send using this method in the “sent” folder on your Gmail account.

Right on!

So we’ve decided that’s the route we’re going to take, so lets get going! It’s rather simple actually, especially with the fantastic CodeIgniter framework and it’s Email Class. It should work nicely for regular PHP or with other frameworks if you just take the concepts outlined here. I must also give credit to wrs from the CodeIgniter Forums, since it is his post which I have based my solution upon.

A new config file – email.php

Place the following code inside a new config file called “email.php” and put it in your application/config directory. Config files named with the same name as a library are included automatically, and this is what we’re doing here.
<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------
| EMAIL CONFING
| -------------------------------------------------------------------
| Configuration of outgoing mail server.
| */
$config['protocol']='smtp';
$config['smtp_host']='ssl:/smtp.googlemail.com';
$config['smtp_port']='465';
$config['smtp_timeout']='30';
$config['smtp_user']='your gmail email';
$config['smtp_pass']='your gmail password';
$config['charset']='utf-8';
$config['newline']="\r\n";

/* End of file email.php */
/* Location: ./system/application/config/email.php */

Make sure you change ‘your gmail email’ and ‘your gmail password’ appropriately.

Sending email, now sent through Gmail

Now any emails you send using the CodeIgniter Email Class will actually be sent from your Gmail account of choice:

// send an email
$this->load->library('email');
$this->email->from('team@myonepage.com','Team OnePage');
$this->email->to("something@someaddress.com");
$this->email->subject('A test email from CodeIgniter using Gmail');
$this->email->message("I can now email from CodeIgniter using Gmail as my server!");
$this->email->send();

UPDATE: It seems Posterous thinks it’s clever by turning my email’s into links, even inside code. Please adjust your code accordingly :)

One drawback of this method

There is one drawback of this method, which is that you cannot specify the “from” email to be anything other than your Gmail email address or an email address you have associated with the Gmail account. All email will be sent from the email account you have setup as the default in your Gmail account.

Possible error – “Unable to find the socket transport “ssl” – did you forget to enable it when you configured PHP?”

If you got this error, like I did, then you need to enable SSL in your PHP config. Load up php.ini and find a line with the following:
;extension=php_openssl.dll
Simply remove the “;” and then restart Apache and you’re good to go. The “;” denotes that the line is a comment, and so removing it enables the SSL extension for Apache. Credit - http://www.boringguys.com/2007/07/20/unable-to-find-the-socket-transport-ssl-did-you-forget-to-enable-it-when-you-configured-php/

That’s all!

I hope that is useful for some people :) I use it mainly for local development purposes – it’s nice to be able to test everything.
If you find my posts useful, you should check out my OnePage and follow me on Twitter.

September 9th, 2009 | Joel | Comments

On Sunday morning I awoke to find an email and an @reply which both gave me invaluable information which I could not have found elsewhere. It was a fantastic feeling and I am very grateful to Timothy Fitz and Andy Young who are both great CTOs who I’m trying my best to learn from. In this post, I’m going to emphasise the gains possible simply by being more open and asking more questions.

Timothy is the CTO at IMVU which is a 3D chat messenger. That doesn’t fascinate me so much, but what does is the way in which they develop at IMVU. They use a technique called “continuous deployment” which in simple terms means that everything they code goes live almost instantly. There are a number of benefits which are possibly not immediately obvious when doing this. I won’t go further with this as it isn’t the topic of my post, but it is what has triggered me to write this post. Timothy’s two posts explain it very well, including this part which I shall quote:

Continuous Deployment is simple: just ship your code to customers as often as possible. Maybe today that’s weekly instead of monthly, but over time you’ll approach the ideal and you’ll see the incremental benefits along the way.

From Timothy’s reply to my email in which I simply asked a few questions about parts of continuous deployment I wasn’t completely clear about, he’s now put me in a great position to work towards the goal of continuous deployment in my startup OnePage.

Andy picked up on one of my tweets and wrote a whole blog post just to explain a technique he emphasises being cautious about using. So just by being more open and tweeting my thoughts I have gained some great advice from Andy.
These are just two instances where following the advice I’m giving has helped me so far. In addition to this, I have also found Dan and Laura who I managed to convince in joining me to develop OnePage :)

So, in summary, continuously use various means to “deploy” your thoughts: if you don’t ask you can’t gain the benefits.
If you find my posts useful, you should check out my OnePage and follow me on Twitter.

August 18th, 2009 | Joel | Comments

I’d like to share some bits of advice for anyone trying to launch a web startup. As Co-Founder and CTO of OnePage, I am striving to make OnePage a success, and in order to do this I am pushing myself to research and analyse as much information which is already out there. Here are 5 top ingredients which I think are key:

1. Get something out there, fast!
It’s very important to move fast, get something out there and not worry about implementation details or methodologies too much. Sure, things such as a great agile methodology, a fault-tolerant architecture and split testing are very important, but don’t commit startup suicide by taking too long trying to get everything perfect. This doesn’t mean I advise people to be oblivious of best practices or careless, and that brings me onto the next point…
2. Change things a lot
Re-engineer, re-design, re-factor as often as you see the need. No one has the perfect deployment strategy immediately or the ideal user experience right from the outset. You might come across extra information or get someone more with more expertise involved. The key here is to be constantly analysing to find new better ways to do what is being done whilst bringing in the new features. Be prepared for your mind to be changed about something, and for new realisations. Have an open mind.
3. Use many streams to converse with users
One of the single most important factors for the success of a startup right now is communication with users. If you can effectively communicate with your users and combine that with acting fast (ingredient 1) and changing things a lot (ingredient 2) in order to deliver what the users desire then you’re onto a winner. At OnePage we use Twitter, Facebook, UserVoice, email and word of mouth to engage with our users.
4. Value your competitors
Instead of folding as soon as you find someone else who is doing something similar, take every competitor and every action of your competitors as a positive insight. Get excited by the fact you have competitors – you must be onto something! Find ways to use the fact you have competitors to your advantage by identifying ways by which you can offer unique propositions for the users.
5. Get the right team
Get people on board as soon as possible. If you have the right team, you can motivate each other and achieve amazing things. At times when one member of the team is down the other members can help out. The process of finding the team is something for another post, but I can tell you that it can come from anywhere. I found the fantastic team we have at OnePage entirely online. Simply by seeking people with a similar vision and complementary skills, and by not being afraid to ask for help, you can find your perfect startup team online! I will blog about how I found Dan and Laura on Twitter another time :)
Now do it!
Another one which I’m going to throw in there is to be very positive. Hence this is not a “5 mistakes startups make” post. You can work on things, don’t get caught up pointing out what’s wrong.
So now you need to take some action. Kickstart your idea: find the right team, get something out there and then work closely with your users and iterate often!
If you find my posts useful, you should follow me on Twitter.

July 26th, 2009 | Joel | Comments

On 16th July I was lucky enough to be invited to travel down to the BT Tower in London for the launch of the National Paediatric Toolkit. I’ve been involved in the development of the software for around 2 years at Priority Research Ltd. now and things are getting quite exciting with the project.

The National Paediatric Toolkit is a development by Priority Research Ltd. in partnership with Alder Hey Children’s Hospital, BT and Panasonic. A quick description from the website:

It is a unique, hand held survey tool which uses animated questionnaires incorporating the character Fabio the Frog to capture the opinions and experiences of children and young people in settings such as healthcare, education and social services – in fact, anywhere that the opinions of this traditionally hard-to-engage audience are sought.

I’m very glad to be involved, and the trip involving going to the revolving bar on the 34th floor, which is not open to the public, was fantastic! Check out the photos:















See and download the full gallery on posterous

July 15th, 2009 | Joel | Comments
I hope to make this blog useful both from an entrepreneurial standpoint and a web development standpoint. Here is a more technical entry.
Problem

I just had to solve an issue I was having with input elements dynamically inserted via JavaScript and it took me an hour or so to find the solution, so I thought I’d post it here for the opportunity it may help someone else reach the solution faster.

The problem arose when I discovered that a tool I had developed which uses AJAX extensively to change the options available to the user depending on other options was not working in Internet Explorer (testing was on IE7).
It was not immediately obvious that it was IE’s broken implementation of the DOM which was causing the issue. The first thing I discovered was that the serialize() function was not including elements. I then discovered that this was only when the elements had been inserted dynamically via JavaScript. I then happened to find a post by Aaron Gustafson on Easy! Reader entitled “Death to bad DOM implementations”, which outlined the very issue.
The problem is that IE disallows changing of the name attribute of elements after the element has been created. Thus the usual method I use won’t work:
$(document.createElement('input')).attr("name", "email"));

The reason is that the input element is created and then the name attribute is added once the element already exists. IE doesn’t like this.
Solution
In the comments of Aaron’s post, Chris Purcell has a very nice function to use which solves the problem:

document.createNamedElement = function(type, name) {
    var element;
    try {
        element = document.createElement('<'+type+' name="'+name+'">');
    } catch (e) { }
    if (!element || !element.name) { // Not in IE, then
        element = document.createElement(type)
        element.name = name;
    }
    return element;
}
So you can then simply do (for form elements):

$(document.createNamedElement('input', 'email));

If that helps even just one person out there I’ll be very happy. Also, documenting it reinforces it in my memory for the future.
If you find my posts useful, you should follow me on Twitter! :)

July 11th, 2009 | Joel | Comments

This week I realised yet more important things on a new chapter of my ambitious journey to becoming a successful entrepreneur, so I’d like to share.

As some of you will know, I’m eager to learn and I therefore read quite a number of autobiographies and books related to Internet entrepreneurship, as well as technical material to keep me up to date in order to fulfil my role as Chief Technical Officer at OnePage.
I’m reading The One Minute Millionaire at the moment, and there are some fantastic quotes to take away from the book about teamwork:

“Together, you all achieve more, faster, easier. You can spot one another’s blind spots. You can encourage discouraged team members. They can encourage you when you’re down. They fill in the gaps in your skill sets. They can be strong when you’re weak. As a team, you all run faster. A 4-by-4 relay team runs the mile about two seconds faster than the individual runner. If you want speed, you need a team.”

I’d recommend the book to anyone.
No one ever achieved anything by themselves. Start making the steps to getting your team together to do something amazing. Use all means you can to accelerate the process. I found my lead developer for OnePage on Twitter, and we work effectively remotely using collaboration tools. So don’t underestimate the tools at your disposal. But that’s a story for another post.
This week, we’ve had our first kind of “tipping point” with OnePage and it seems our hard work is starting to pay off, even if we haven’t quite launched yet! My fantastic Co-Founder and friend Oo was interviewed by Robert Scoble about OnePage and this has generated a lot of interest. Check out the interview:



The OnePage team consists of myself, Oo and Dan. I’m so happy to have such a good, committed team and now realise how important this is. Dan is a fantastically pragmatic and talented developer and Oo is a great people person. I have taken steps to show my appreciation and this includes my stepping down from the “Founder” title of OnePage and giving Dan “Co-Founder” status. So we are all Co-Founders now and I’m glad to make this step forward since we all do as much work as each other in various different areas. I just want us to succeed and truly believe in the idea. It takes more than just me to make it happen. We’re now all stepping up our commitment in the venture so you’ll be hearing a lot more from us from now on :)

Of course I am still learning, always learning. Until next time, thanks for reading and please add your comments!

June 5th, 2009 | Joel | Comments
logo.png
Facebox is a modal window plugin for jQuery. It’s fantastic, so give it a go.
The problem

I just had an issue with Flash appearing above a Facebox window in one of the projects I’ve been working on. Thought it may be useful to post the solution I found, since it wasn’t an instant find for me.

The solution
When you embed flash on a page, you’ll almost always have an <object> element and an <embed> element.
What you need to do is add <param name=”wmode” value=”transparent”></param> as a child element to the <object> element, and add wmode=”transparent” as an attribute to the <embed> element.
That’s it, fixed it nicely for me :) Happy coding!