<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.haughin.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Elliot Haughin</title>
	
	<link>http://www.haughin.com</link>
	<description>From one geek to many others...</description>
	<lastBuildDate>Wed, 01 Sep 2010 15:13:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<feedburner:info uri="haughin" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://www.haughin.com/feed/" /><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Fwww.haughin.com%2Ffeed%2F" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Fwww.haughin.com%2Ffeed%2F" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Fwww.haughin.com%2Ffeed%2F" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://www.haughin.com/feed/" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Fwww.haughin.com%2Ffeed%2F" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Fwww.haughin.com%2Ffeed%2F" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Fwww.haughin.com%2Ffeed%2F" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><item>
		<title>Want to Hire Me?</title>
		<link>http://feeds.haughin.com/~r/haughin/~3/fNqdAcGZn-Y/</link>
		<comments>http://www.haughin.com/2010/09/01/want-to-hire-me/#comments</comments>
		<pubDate>Wed, 01 Sep 2010 15:13:37 +0000</pubDate>
		<dc:creator>Elliot</dc:creator>
				<category><![CDATA[career]]></category>
		<category><![CDATA[featured]]></category>

		<guid isPermaLink="false">http://www.haughin.com/?p=1052</guid>
		<description><![CDATA[For the last few years I've been a freelance developer, which has been pretty awesome. I've worked on some great projects and had plenty of free time to do the things I love. But, I've began to think pretty seriously about my career, and there's one thing I know for sure: I want to go back to full-time work. 

Right now I live on Walney Island in Cumbria. This is where I grew up and where my family are. It's a really beautiful place with long beaches, a close community, and good friends. But it's hardly a 'hot-spot' for web development. If you're not into ship building, this really isn't a great place to build your career. So, I'm looking to move...]]></description>
			<content:encoded><![CDATA[<p>For the last few years I&#8217;ve been a freelance developer, which has been pretty awesome. I&#8217;ve worked on some great projects and had plenty of free time to do the things I love. But, I&#8217;ve began to think pretty seriously about my career, and there&#8217;s one thing I know for sure: I want to go back to full-time work. </p>
<p>Right now I live on Walney Island in Cumbria. This is where I grew up and where my family are. It&#8217;s a really beautiful place with long beaches, a close community, and good friends. But it&#8217;s hardly a &#8216;hot-spot&#8217; for web development. If you&#8217;re not into ship building, this really isn&#8217;t a great place to build your career. So, I&#8217;m looking to move.</p>
<p>So, I&#8217;m looking for a position where I can work on some exciting, cool, and unusual projects with some clever people in a good location, with a competitive salary. Is that too much to ask for? (Probably).</p>
<p>I love CodeIgniter, and I&#8217;d like to find a company that feels the same way. But, I&#8217;m open to trying and learning new things too. As long as I&#8217;m challenged and I have plenty of coffee, I&#8217;ll be happy.</p>
<p>In terms of location, I think Europe would be best for me since there&#8217;s no issues with visas or work permits.</p>
<p>So, if you have a vacancy that sounds a bit like this, please let me know and I can send you a copy of my CV.<br />
You can contact me by email: elliot at haughin.com</p>
<img src="http://feeds.feedburner.com/~r/haughin/~4/fNqdAcGZn-Y" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.haughin.com/2010/09/01/want-to-hire-me/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.haughin.com/2010/09/01/want-to-hire-me/</feedburner:origLink></item>
		<item>
		<title>CICon2010 – My Roundup of the First UK CodeIgniter Conference</title>
		<link>http://feeds.haughin.com/~r/haughin/~3/dBJT52ytkCA/</link>
		<comments>http://www.haughin.com/2010/08/31/cicon2010-my-roundup-of-the-first-uk-codeigniter-conference/#comments</comments>
		<pubDate>Tue, 31 Aug 2010 14:05:31 +0000</pubDate>
		<dc:creator>Elliot</dc:creator>
				<category><![CDATA[conferences]]></category>
		<category><![CDATA[featured]]></category>
		<category><![CDATA[cicon2010]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[speaking]]></category>

		<guid isPermaLink="false">http://www.haughin.com/?p=1034</guid>
		<description><![CDATA[Two weeks ago I was in Bristol to speak at '<a href="http://www.cicon2010.com">CiCon2010</a>', the first UK based CodeIgniter conference. Organized by <a href="http://philsturgeon.co.uk/">Phil Sturgeon</a> and <a href="http://www.adamgriffiths.co.uk/">Adam Griffiths</a>. I was getting very very excited in the run-up to the conference, this would be my first opportunity to meet some of the CI geeks in person...]]></description>
			<content:encoded><![CDATA[<p>Two weeks ago I was in Bristol to speak at &#8216;<a href="http://www.cicon2010.com">CiCon2010</a>&#8216;, the first UK based CodeIgniter conference. Organized by <a href="http://philsturgeon.co.uk/">Phil Sturgeon</a> and <a href="http://www.adamgriffiths.co.uk/">Adam Griffiths</a>. I was getting very very excited in the run-up to the conference, this would be my first opportunity to meet some of the CI geeks in person.</p>
<p>After a gruelling train journey from Barrow-in-Furness to Bristol (about 6 hours), I finally arrived in Bristol and asked a friendly police office directions to the pub. (Which was right outside the station, and apparently &#8216;unmissable&#8217;). I was greeted at the pub by Phil, Adam, and a few of the attendees. The original plan for that night was to have a &#8216;couple&#8217; there then hit the hotel to be refreshed for the first &#8216;official&#8217; conference day. That didn&#8217;t happen. Somehow we ended up at a cider bar on a boat drinking what can only be described as alcoholic fruit squash whilst bitching about MSSQL and fondly remembering our table-based days.</p>
<h3>Day 1 &#8211; Talks</h3>
<p>This was the official start of the conference. I woke up (a little late), got ready, then relied on my iPhone battery lasting long enough to direct me to the venue. On the way I almost started jogging (I was running late!). Imagine my surprise when I arrived at the venue to find some people messing around with a projector while most of the attendees watched and offered kind words of encouragement. Those who weren&#8217;t overseeing the work were hiding in the corner drinking coffee (if you could call it coffee).</p>
<p>I decided to join my under-caffeinated brethren. After 15 minutes or so Mr. Sturgeon arrived, to his own conference. Now, I&#8217;m in a band, so I know all about turning up late to appear cool, but I don&#8217;t really think this worked at a web development conference.</p>
<p>After much faffing we were finally ready to begin. I took my seat, (still to hungover to stand), and listened intently to the first set of talks.</p>
<p>Kevin Prince kicked things off. I wasn&#8217;t exactly in the best frame of mind for intently listening to a talk. However, when I saw a bumper pack of chocolates and sweeties my hangover disappeared for a short while. Kevin gave a great talk on using CodeIgniter in a production environment, featuring some of the tools and techniques you can use to make sure things go as smoothly as possible. Kevin was well-prepared, interesting, and most importantly &#8211; had sweets.</p>
<p>Following Kevins talk, I got a little nervous. I knew I was up straight after lunch, and I didn&#8217;t have free chocolates. Shit.</p>
<p>Next up was Joel Gascoigne. Joel talked about building a startup with CodeIgniter and some of the methods you can use to successfully startup. There was some great content in the talk with startup theories from lots of very clever people. And, there were more flow-charts than in a Microsoft board room. You could tell that Joel had put lots of time into preparing his talk, and delivered it brilliantly. It kind of made me want to leave freelancing and get into startups.</p>
<p>After two talks it was time for a quick break (I think it was at this point anyway). So, some of us went out for a smoke and to refill the coffee (many people had learned their lessons and stuck to tea by now). At this point many people were noticing some things that were very very annoying. A lack of internet being the first. A web development conference really should have good wifi available. This meant most people were relying on smartphones and patchy 3G. It&#8217;s a shame really, I think more people would have tweeted and talked about the conference if there was some wifi available.</p>
<p>There was another point I should have raised, which was that of lighting, sound, and vision. The technical aspects of the conference weren&#8217;t much to write home about. There were no mics, and I think people were too polite to mention if they couldn&#8217;t hear the speaker. The stage lighting was turned off, so it became quite difficult to see the speakers. I know that we&#8217;re supposed to be looking at the slides, but psychologists say we understand spoken word better when we can see who&#8217;s speaking. Hand actions and body language play a key part in communication. A microphone and a simple lamp on the desk on stage would have been enough to improve things.</p>
<p>Well, with the break over, it was time for Dean Howe. Dean had &#8216;kind of&#8217; prepared a talk before the conference but then got cold feet and decided to just throw that out the window. Instead of his planned topic, he decided to do a Q&amp;A session. Although I didn&#8217;t take part (I was finishing up my slides), I could hear plenty of people getting involved in the session. From what I could see, many of the speakers were chipping in with parts of answers to give detailed responses.</p>
<p>With the &#8216;shambles&#8217; session over <img src='http://www.haughin.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  it was time for lunch. After a 2 mile round-trip for lunch I arrived back to the venue ready to rock out my talk.</p>
<p>The &#8216;bottom&#8217; line of my talk was:</p>
<ol>
<li> Facebook is here and everyone uses it, love it or hate it.</li>
<li>People are interested in what their friends are doing, however stupid.</li>
<li>People don&#8217;t like signing up for stuff.</li>
<li>Integrate Facebook into your CodeIgniter application.</li>
</ol>
<p>I decided to attempt to overcome some of the technical issues I&#8217;d noticed with other speakers. Firstly, I decided to walk around the stage like I was mustering the troops at a communist revolution rally. Then I decided to pretty much shout my entire talk at people, again, much like a communist revolution rally. I didn&#8217;t have sweets to throw at people, but I had clipart, which generally distracted people from my failings.</p>
<p>As part of my talk, I decided to release &#8216;<a href="http://github.com/elliothaughin/socialize">Socialize</a>&#8216;, a social authentication module for CodeIgniter. So, although I didn&#8217;t have sweets. I had open-source code <img src='http://www.haughin.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>With my talk done and dusted it was time for Adam Griffiths to take to the stage and talk about CodeIgniter 2.0(.0). I was quite pleased with his chosen topic because he was pretty much directly answering the questions I&#8217;d been asked about CI 2.0 by some of the attendees. Adam talked about the key differences, the &#8216;roadmap&#8217;, the things one must do to migrate, and answered the question I hate: &#8216;Where can I get CI 2.0?&#8217; (several times). Oh, and yes, as Adam said. CI 2.0 is STABLE!</p>
<p>Finally Phil took to the stage wielding a can on Strongbow. (which I almost commandeered at the beginning of my talk). Phil went through PyroCMS, and talked about building open source software with CodeIgniter. Well, I think that&#8217;s what he talked about. If I&#8217;m completely honest, by this time I was pretty much zoned out. At least someone had bought some good coffee at lunch time to keep me going. <img src='http://www.haughin.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  I did catch some of Phil&#8217;s talk, but there were two lads with iPads who kept distracting me. It was like having a naked woman sat in the seat next to you asking to be stroked. Sorry Phil, but the iPad got the attention.</p>
<h3>Day 2 &#8211; &#8216;Hack Day&#8217;</h3>
<p>At the end of the first day I realized there would be some problems with the proposed &#8216;hack day&#8217;. To start with there was no wifi, which meant no easy way to collaborate, share code, grab examples of regex from crappy old sites&#8230; This just wasn&#8217;t going to work. As well as this, there were no desks set up, we weren&#8217;t actually in teams, etc. Since my laptop was broken I decided to finish the conference early and head home shortly after mid-day.</p>
<h3>Review</h3>
<p>Overall I had a great time at CiCon2010, but we all know there were things that need work for next time. But that&#8217;s my main point. It doesn&#8217;t really matter that this conference wasn&#8217;t has super-professional as other conferences. This was a first-time. But, there&#8217;s been plenty of lessons learned, and I&#8217;m sure the next one will be even better!</p>
<img src="http://feeds.feedburner.com/~r/haughin/~4/dBJT52ytkCA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.haughin.com/2010/08/31/cicon2010-my-roundup-of-the-first-uk-codeigniter-conference/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.haughin.com/2010/08/31/cicon2010-my-roundup-of-the-first-uk-codeigniter-conference/</feedburner:origLink></item>
		<item>
		<title>Summer’s Here, And I’m Moving Forward</title>
		<link>http://feeds.haughin.com/~r/haughin/~3/drCRUDCzvQw/</link>
		<comments>http://www.haughin.com/2010/05/24/summers-here-and-im-moving-forward/#comments</comments>
		<pubDate>Mon, 24 May 2010 15:33:03 +0000</pubDate>
		<dc:creator>Elliot</dc:creator>
				<category><![CDATA[codeigniter]]></category>
		<category><![CDATA[featured]]></category>
		<category><![CDATA[freelancing]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[green]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[summer]]></category>

		<guid isPermaLink="false">http://www.haughin.com/?p=991</guid>
		<description><![CDATA[With the sun shining and my vegetables really starting to shoot up, I can tell summer is now in full swing. There's been some things on my mind that I though I'd share with you about where I'm looking to go, moving forward.

Firstly, my code. Since I first started releasing <a href="http://www.codeigniter.com">CodeIgniter</a> Libraries they've been widely used and loved. But, there's a problem. I've not had the time to support them or update them. The solution to this, I believe, is to start again, with updated, clean code...]]></description>
			<content:encoded><![CDATA[<p>With the sun shining and my vegetables really starting to shoot up, I can tell summer is now in full swing. There&#8217;s been some things on my mind that I though I&#8217;d share with you about where I&#8217;m looking to go, moving forward.</p>
<p>Firstly, my code. Since I first started releasing <a href="http://www.codeigniter.com">CodeIgniter</a> Libraries they&#8217;ve been widely used and loved. But, there&#8217;s a problem. I&#8217;ve not had the time to support them or update them.<br />
The solution to this, I believe, is to start again, with updated, clean code.</p>
<p>I released the beta version of the Facebook library a couple of weeks ago, and so-far, things are looking good. It uses the Graph API, and supports the Open Graph (for social plugins). The final version of this should be released by the end of the week. Thanks again to everyone who&#8217;s tested it for me.</p>
<p>The Twitter CodeIgniter library needs some serious love. I&#8217;m trying to rebuild it in a way which doesn&#8217;t limit the &#8216;future&#8217; api calls that may be introduced by twitter.</p>
<p>To make releases more straight-forward, I&#8217;ll be building an RSS feed for code releases, which will make sure you can always keep up-to-date with my Libraries. This will be part of a bigger change that I&#8217;m building into my site which includes my new &#8216;<a href="http://www.haughin.com/code/">Code</a>&#8216; page and &#8216;<a href="http://www.haughin.com/going-green/">Going Green</a>&#8216;, a section of my blog where I&#8217;m documenting my attempts to live a more sustainable life.</p>
<p>So, keep subscribed to my <a href="http://twitter.com/elliothaughin">Twitter</a> and <a href="http://www.haughin.com/feed/">RSS Feed</a> and you&#8217;ll be the first to know when things get moving.</p>
<p>And in other news, I&#8217;m now the proud owner of Winston, my new dog (He&#8217;s a Miniature Schnauzer)</p>
<p><img src="http://www.haughin.com/wp-content/uploads/2010/05/P4060027.jpg" alt="" title="Winston, my Miniature Schnauzer" width="600" height="460" class="alignnone size-full wp-image-998" /></p>
<p>Yup, he&#8217;s cute. Damned cute.</p>
<img src="http://feeds.feedburner.com/~r/haughin/~4/drCRUDCzvQw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.haughin.com/2010/05/24/summers-here-and-im-moving-forward/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://www.haughin.com/2010/05/24/summers-here-and-im-moving-forward/</feedburner:origLink></item>
		<item>
		<title>Feast and Famine – The Reality of Freelancing</title>
		<link>http://feeds.haughin.com/~r/haughin/~3/xlq7z4HIyco/</link>
		<comments>http://www.haughin.com/2010/04/15/feast-and-famine-the-reality-of-freelancing/#comments</comments>
		<pubDate>Thu, 15 Apr 2010 19:03:48 +0000</pubDate>
		<dc:creator>Elliot</dc:creator>
				<category><![CDATA[freelancing]]></category>
		<category><![CDATA[featured]]></category>

		<guid isPermaLink="false">http://www.haughin.com/?p=876</guid>
		<description><![CDATA[Freelancing for many of us really is a dream job. There's a wealth of advice on subjects such as time management, taxes, contracts, and obtaining clients. But I'd like to talk about an issue that many people (particularly the proud and introverted British society) avoid discussing. Money.

There's a taboo surrounding rates, salaries, and benefits. Generally, we don't discuss them, which can lead to a lot of problems if you're just starting out freelancing, or indeed, if you're considering it. 

Freelancing seems like the perfect lifestyle, but to begin with, you may well find yourself in a position of 'Feast and Famine'...]]></description>
			<content:encoded><![CDATA[<p>Freelancing for many of us really is a dream job. There&#8217;s a wealth of advice on subjects such as time management, taxes, contracts, and obtaining clients. But I&#8217;d like to talk about an issue that many people (particularly the proud and introverted British society) avoid discussing. Money.</p>
<p>There&#8217;s a taboo surrounding rates, salaries, and benefits. Generally, we don&#8217;t discuss them, which can lead to a lot of problems if you&#8217;re just starting out freelancing, or indeed, if you&#8217;re considering it. Whilst I&#8217;m not going to openly discuss my rates, I do want to make a point before I continue with the main content of this article. Make sure you have a group of close friends (preferably fellow freelancers) that you don&#8217;t mind discussing rates with. This way, you&#8217;re not basing your rates off &#8216;commodity&#8217; priced freelance rates you may find on e-lance or similar sites.</p>
<p>Freelancing seems like the perfect lifestyle, but to begin with, you may well find yourself in a position of &#8216;Feast and Famine&#8217;. Essentially, because you&#8217;re working on 2-3 week projects then sending off an invoice, there&#8217;s times when your pay won&#8217;t be very regular. When I started freelancing, I was working for 6 weeks, then sending off and invoice and waiting 2-3 weeks for it to be paid. During this time, it&#8217;s quite easy to find yourself a bit short. It happens to all of us.</p>
<p>There are some simple things you can do to help this though.</p>
<h3>Minimize Downtime</h3>
<p>When you&#8217;re coming to the end of a project, make sure you&#8217;ve got your next one lined up to start as soon as possible. Sure, you&#8217;ll probably want to take a few days off. However, when your current project is coming to an end, start talking to your next client, get contracts, spec documents, and all the paper works sorted. Then, when you finish your project you&#8217;re ready to roll with a new one.</p>
<h3>Budget your Invoices</h3>
<p>When my first big invoice got paid, the first thing I did was go out and buy a load of gadgets, have a night out on the town, and generally lived like a king. I quickly found that I&#8217;d spent half of the money during the first week, and that I might have to survive another 4-5 weeks on the remaining money. The solution was simple, budget. I decided that from then on, I would make a weekly budget and stick to it, regardless of &#8216;big&#8217; invoices being paid. This way, if I was short of work, there&#8217;d still be some money in the account, maybe 3 or 4 weeks worth on this same budget.</p>
<p>And, if you manage to go for 6 months without any &#8216;dry&#8217; spells in work, you&#8217;ll find that the left over money in the account starts to build up. Always try to leave 4 weeks worth in the account, but any extra you have, pop it in a separate savings account (a simple instant access one). Ok, you&#8217;re not going to make a great deal of interest on it with the way the economy is right now, but it&#8217;s out of the way and off your mind. Once the amount in here builds up you can start considering buying new equipment, paying to go to conferences, whatever. If you spend these savings on something useful for your business, you could also write it off as an expense for tax.</p>
<p>Which brings me nicely onto my next point.</p>
<h3>The tax-man doesn&#8217;t hate you.</h3>
<p>Whenever I give advice about tax, I&#8217;ll always preface it with this: ALWAYS consult an accountant before making tax decisions.<br />
Right, obviously I&#8217;m talking about the UK tax system, but it&#8217;s quite similar to other tax systems. Contrary to popular belief, the tax-man doesn&#8217;t hate you, in-fact if you&#8217;re registered as self-employed, you really can make a good living without the tax-man taking you for a ride.</p>
<p>The first thing you need to do is know how much tax you&#8217;re going to pay. Freelancing without some good accounting software is like playing darts whilst drunk in a cave. There are plenty of great solutions out there, but I personally recommend using <a href="http://www.freeagentcentral.com/?referrer=322h1nns">FreeAgent</a>, especially if you&#8217;re based in the UK. (That&#8217;s a referrer link).</p>
<p><a href="http://www.freeagentcentral.com/?referrer=322h1nns">FreeAgent</a> keeps a running tally on the tax you will owe for the current tax year. So, when an invoice is paid, the amount of tax jumps up a little bit. Using this trick, I have a separate savings account which I use to keep the tax money. When an invoice is paid, I immediately transfer some money into this tax account so that it matches the current tax year figure exactly.</p>
<p>This way, when I get to the end of the tax year, I have the exact amount of money I need to pay the tax bill without having to go through a period of &#8216;saving up&#8217; 3 or 4 big invoices to pay last years tax bill.</p>
<h3>Get paid regularly.</h3>
<p>There&#8217;s a techniques used by the construction industry. Self-employed builders will often insist on being paid at the end of each week for the work completed that week. It&#8217;s a simple idea, and most people agree to it. But web development is a whole different basket of candles. (I just made that up). Many web development companies will insist that you invoice them on their time-scales. But you need to remember something important. You&#8217;re the provider. When was the last time you saw someone walk into a supermarket, pick up a load of goods, then insist they be sent an invoice with 60-day terms. That&#8217;s not how it works. If someone really wants your services, then you have the power to choose how and when you get paid.</p>
<p>Obviously you shouldn&#8217;t be completely unreasonable, but just remember that if you get paid regularly, you&#8217;re less likely to run into trouble.</p>
<h3>Don&#8217;t be too proud</h3>
<p>If the worst case scenario occurs, then you&#8217;ve got to be realistic about it. Sometimes you just have to ask for help. There&#8217;s nothing wrong with that, and it&#8217;s not a sign that you&#8217;ve failed. Hopefully, if you follow some of the advice above, you might not need to. But, if you do find yourself really up against it, there&#8217;s no point being proud. I know that I&#8217;ve got some really close family and friends who would always be willing to help me financially should something go wrong.</p>
<p>Sometimes this is a much better option than going to a bank or racking up debt on a credit card. If it&#8217;s a short term problem and you know you have an invoice coming in next week, then don&#8217;t be too proud to ask for help.</p>
<h3>Finally&#8230;</h3>
<p>I hope you&#8217;ll find some of this article useful. My reason for writing it is simple, they&#8217;re the problems I had when I first started freelancing, and I&#8217;m sure there&#8217;s a whole load of people who will have the same problems.</p>
<p>Please consult an accountant or appropriate financial advisor before making any financial and tax decisions, and remember this:<br />
All of the stress, the struggle, and the strain to start with is in every way worth what you get out of it. The freedom, flexibility, and satisfaction that comes from freelancing.</p>
<img src="http://feeds.feedburner.com/~r/haughin/~4/xlq7z4HIyco" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.haughin.com/2010/04/15/feast-and-famine-the-reality-of-freelancing/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.haughin.com/2010/04/15/feast-and-famine-the-reality-of-freelancing/</feedburner:origLink></item>
		<item>
		<title>CodeIgniter 2.0 In Progress – The Critical Changes, Implications, and What You Should Know</title>
		<link>http://feeds.haughin.com/~r/haughin/~3/Msj09Q34u1g/</link>
		<comments>http://www.haughin.com/2010/03/11/codeigniter-2-critical-changes-implications/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 19:43:03 +0000</pubDate>
		<dc:creator>Elliot</dc:creator>
				<category><![CDATA[codeigniter]]></category>
		<category><![CDATA[featured]]></category>

		<guid isPermaLink="false">http://www.haughin.com/?p=881</guid>
		<description><![CDATA[Well, it's been a long time coming, but Ellislab have finally done it, they've officially let us know about CodeIgniter 2.0. This is a huge step forward and shows that Ellislab are dedicated to this, their only free product.

I get plenty of emails asking me if this version of CodeIgniter would be released, and it's clear there's been a huge buzz about this in the wider development community. So, I'm going to take you through the changes and explain what you need to know, and what this means for CodeIgniter as a framework moving forward.

I'll make this quite clear: I will not just list all the changes in the changelog. You should be able to find and read them yourselves. This post is more of a summary of the important changes and what they mean for Ellislab, developers, and clients.]]></description>
			<content:encoded><![CDATA[<p>Well, it&#8217;s been a long time coming, but Ellislab have finally done it, they&#8217;ve officially let us know about CodeIgniter 2.0. This is a huge step forward and shows that Ellislab are dedicated to this, their only free product.</p>
<p>I get plenty of emails asking me if this version of CodeIgniter would be released, and it&#8217;s clear there&#8217;s been a huge buzz about this in the wider development community. So, I&#8217;m going to take you through the changes and explain what you need to know, and what this means for CodeIgniter as a framework moving forward.</p>
<p>I&#8217;ll make this quite clear: I will not just list all the changes in the changelog. You should be able to find and read them yourselves. This post is more of a summary of the important changes and what they mean for Ellislab, developers, and clients.</p>
<h3>CodeIgniter 2.0 is built using PHP5!</h3>
<p>CodeIgniter 2.0 WILL NOT work on PHP4 environments. For a long time CodeIgniter was one of just a few frameworks that supported PHP4. Whilst this did attract a great deal of people to it, it became clear that at some point Ellislab would end up forking the CodeIgniter framework to produce a PHP5 only version. For me this is no surprise at all, but there&#8217;s a different, and more appropriate way to view this change.</p>
<blockquote><p>PHP 4 support is deprecated. Features new to 2.0.0 may not be support PHP 4, and all legacy features will no longer support PHP 4 as of 2.1.0.</p></blockquote>
<p>Most people will assume that this change simply means one thing: that people can&#8217;t use CodeIgniter on a PHP4 server. Whilst this is true, it&#8217;s a rather insignificant implication of this change. The main, and most important thing about this change is what it does for Ellislab and the framework as a whole. Ellislab can now use the more powerful features available in PHP5 in CodeIgniter&#8217;s core. </p>
<p>CodeIgniter will be able to use <a href="http://uk.php.net/manual/en/language.oop5.visibility.php">visibility modifiers</a> to restrict access of object variables to the object itself. <a href="http://uk.php.net/manual/en/language.oop5.static.php">Static methods and variables</a>, to allow code to call a class&#8217; methods and variables without instantiating object. <a href="http://uk.php.net/manual/en/language.oop5.abstract.php">Abstract classes</a> and <a href="http://uk.php.net/manual/en/language.oop5.interfaces.php">interfaces</a>, <a href="http://uk.php.net/reflection">Reflection</a>, <a href="http://uk.php.net/manual/en/language.oop5.decon.php">__contruct and __destruct</a>, <a href="http://uk.php.net/manual/en/language.oop5.autoload.php">autoloading</a>. The list goes on and on.</p>
<p>In short, the most important implication of this change is that Ellislab now really has some big guns they can use to move CodeIgniter forward. The improvements in PHP5 allow them to really unleash some seriously cool, clean code.</p>
<h3>Application Packages</h3>
<p>Many CodeIgniter applications I&#8217;ve worked on have contained more that one &#8216;application&#8217; directory. For example, my main client right now has two application directories: &#8216;app&#8217; and &#8216;cp&#8217;. The app directory contains all the code for the front-end application, and the &#8216;cp&#8217; directory contains all the code for the back-end application.</p>
<p>However, there are some common libraries, helpers, views, and config files that both use. Right now I have to have two copies of each of these files. One for each application directory. But, now you can create a &#8216;common&#8217; code area that will allow you to place libraries, helpers, config files, language files, and views in a common location, which can be accessed by any number of application directories.</p>
<p>Here&#8217;s how it could be used for this purpose:<br />
<script src="http://gist.github.com/329482.js"></script><noscript><code class="gist"><pre><br />
// Structure:<br />
// application/app = APPPATH (contains controllers, views etc)<br />
// application/_common = my package, contains a few helpers and libraries.</p>
<p>$this->load->add_package_path(BASEPATH.&#8217;application/_common/&#8217;);<br />
$this->load->helper(&#8216;booya&#8217;);<br />
</pre></code></noscript></p>
<p>Once you&#8217;ve written this code, you&#8217;ll be able to access booya_helper.php inside of application/_common/ despite this directory being outside of the current APPPATH. This, I believe, is one of the most exciting ways to use these new application packages.</p>
<p>View files for packages are currently in the works, but that&#8217;d just sweeten the deal.</p>
<h3>Drivers</h3>
<p>There&#8217;s a new type of library known as a driver. Essentially, it&#8217;s a way of having a parent class with many child classes. Child classes are able to access the parent class, but not its sibilings. For example, here&#8217;s how you might use one:</p>
<script src="http://gist.github.com/329380.js"></script><noscript><code class="gist"><pre>// Where class name is the name of the driver class you want to invoke. For example, to load a driver named &#8220;Some Parent&#8221; you would do this:<br />
$this->load->driver(&#8216;some_parent&#8217;);</p>
<p>// Methods of that class can then be invoked with:<br />
$this->some_parent->some_method();</p>
<p>// The child classes, the drivers themselves, can then be called directly through the parent class, without initializing them:<br />
$this->some_parent->child_one->some_method();<br />
$this->some_parent->child_two->another_method();</pre></code></noscript>
<p>I&#8217;m quite excited about this, it means that grouping code with similar functionality would be easier, for example:</p>
<script src="http://gist.github.com/329387.js"></script><noscript><code class="gist"><pre>$this->load->driver(&#8216;api&#8217;);</p>
<p>$this->api->twitter->call(&#8216;statuses/update&#8217;, array(&#8216;update&#8217; => &#8216;Nice status!&#8217;));<br />
$this->api->facebook->get_friends();<br />
$this->api->vimeo->get_videos($user);</pre></code></noscript>
<p>I think drivers will be a great new way for developers, such as myself, to release a &#8216;package&#8217; of libraries that all do similar things (for example some of my API libraries). Drivers will also help us keep code DRY (Don&#8217;t repeat yourself). Many of the libraries we write share common code among them, and could be grouped into a bundle of libraries with similar code, functionality, and usage. These would be perfect to use drivers for.</p>
<h3>New Javascript Library</h3>
<p>We&#8217;ve known about this for quite some time, and it&#8217;s nice to see it finally come to life and make its way into the CodeIgniter core. Now you&#8217;ll be able to dynamically implement Javascript using PHP.</p>
<p>The new Javascript library is a driver (explained above). It currently has just one child, jquery. But, this will allow you to build much more elegant jquery code for your application without as much hassle.</p>
<p>I&#8217;m going to write a post specifically about using the new javascript library next week, so <a href="http://www.haughin.com/feed/">stay subscribed to the rss</a> for that!</p>
<h3>Plugins are Gone</h3>
<p>Yes, Ellislab have give plugins the heave-ho in favour of helpers. I was never a fan of plugins to be fair, and I tried to avoid using them at all costs. It&#8217;s quite nice to see that things are being &#8216;removed&#8217; from this new version of CodeIgniter as well as added. At least we know that Ellislab are determined to keep CodeIgniter as a &#8216;lean&#8217; and fast framework rather than some of the bulkier overweight ones that are currently available.</p>
<h3>Code Hosting Moved</h3>
<p>For a few years Ellislab have used a subversion system to develop CodeIgniter, but now they&#8217;ve dropped it in favour of Mercurial, a much leaner version control system. The code will be available on <a href="http://bitbucket.org/ellislab/codeigniter">bitbucket</a>, where you can download the latest bleeding edge version, or specific tags (versions such as 1.7.0).</p>
<p>With bitbucket, we can now fork CodeIgniter much more easily, apply fixes, and then suggest that it be added back into the core.</p>
<h3>To Summarize</h3>
<p>There&#8217;s no shortage of things to get excited about with CodeIgniter 2.0. I&#8217;m most excited about application packages and drivers. I could think of so many clients with code that could use these features.</p>
<p>Remember to keep a close eye on the CodeIgniter project now. It looks like this could really begin to move at a faster pace.</p>
<img src="http://feeds.feedburner.com/~r/haughin/~4/Msj09Q34u1g" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.haughin.com/2010/03/11/codeigniter-2-critical-changes-implications/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		<feedburner:origLink>http://www.haughin.com/2010/03/11/codeigniter-2-critical-changes-implications/</feedburner:origLink></item>
		<item>
		<title>The Cost of Free, the Beauty of Open Source</title>
		<link>http://feeds.haughin.com/~r/haughin/~3/OobXRHZk-FQ/</link>
		<comments>http://www.haughin.com/2010/02/28/the-cost-of-free-the-beauty-of-open-source/#comments</comments>
		<pubDate>Sun, 28 Feb 2010 01:41:25 +0000</pubDate>
		<dc:creator>Elliot</dc:creator>
				<category><![CDATA[codeigniter]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[frameworks]]></category>
		<category><![CDATA[freelancing]]></category>
		<category><![CDATA[featured]]></category>
		<category><![CDATA[free]]></category>
		<category><![CDATA[libraries]]></category>
		<category><![CDATA[opensource]]></category>

		<guid isPermaLink="false">http://www.haughin.com/?p=835</guid>
		<description><![CDATA[This post is a collection of thoughts that I've had recently regarding my code, and the 'cost' of them. As you may know, I'm now blogging more often, and will be re-factoring some of my code to make it cleaner, well documented, and just 'better'.

I know that when I rebuild my CodeIgniter libraries, I could sell them for say $10 - $20 a pop. But I won't. That's a promise. My code will remain free, and always will. I understand that releasing premium 'paid-for' code can be a very lucrative business model, since it's very much a form of passive income rather than active income. But it just doesn't feel like 'me'. I like that whatever I release can be used by anyone, regardless of circumstance. And that way, my work gets a wider distribution. My name becomes more well known, and this opens up more opportunities for me.

I believe in free. I believe in open-source. Almost everything I've learned has come from the open-source world. CodeIgniter has helped me build a career, pay my mortgage, and buy gadgets. Just because something's free, doesn't mean it's without value. I know that open-source software has real value, both for individuals to learn, and for companies to build great quality, successful commercial applications...]]></description>
			<content:encoded><![CDATA[<p>This post is a collection of thoughts that I&#8217;ve had recently regarding my code, and the &#8216;cost&#8217; of them. As you may know, I&#8217;m now blogging more often, and will be re-factoring some of my code to make it cleaner, well documented, and just &#8216;better&#8217;.</p>
<p>Since the announcement that ExpressionEngine 2.0 would be built on CodeIgniter, there was a great deal of buzz regarding <a href="http://www.haughin.com/2009/11/04/expressionengine-2-codeigniter/">CodeIgniter developers producing more ExpressionEngine products</a> as a &#8216;paid-for&#8217; product. Indeed, this has started to happen; <a href="http://jamierumbelow.net">Jamie Rumbelow</a> recently released <a href="http://gettaggable.com">Taggable</a>, a folksonomy plugin for EE 2.0. There&#8217;s also been some discussions about building great CodeIgniter libraries and releasing them as paid-for products.</p>
<p>I know that when I rebuild my CodeIgniter libraries, I could sell them for say $10 &#8211; $20 a pop. But I won&#8217;t. That&#8217;s a promise. My code will remain free, and always will. I understand that releasing premium &#8216;paid-for&#8217; code can be a very lucrative business model, since it&#8217;s very much a form of passive income rather than active income. But it just doesn&#8217;t feel like &#8216;me&#8217;. I like that whatever I release can be used by anyone, regardless of circumstance. And that way, my work gets a wider distribution. My name becomes more well known, and this opens up more opportunities for me.</p>
<p>I believe in free. I believe in open-source. Almost everything I&#8217;ve learned has come from the open-source world. CodeIgniter has helped me build a career, pay my mortgage, and buy gadgets. Just because something&#8217;s free, doesn&#8217;t mean it&#8217;s without value. I know that open-source software has real value, both for individuals to learn, and for companies to build great quality, successful commercial applications.</p>
<blockquote><p>&#8230;Give as freely as you have received!<br />
- Matthew 10:8 (NLT)</p></blockquote>
<p>Although I give away my code for free, it&#8217;s actually responsible for my income too. By releasing this code, I receive emails almost daily asking about my freelance services. Lots of these requests are to build applications based around my free code. So, free code and open-source really can be a good business idea. There&#8217;s an old business model that says, give something away, then charge to extend or support it.</p>
<blockquote><p>&#8220;Hi Elliot<br />
I know you from your CI stuff, having used a couple of your bits and pieces in the past and&#8230;&#8221;</p></blockquote>
<p>Right now, my major client hired me back in August/September to implement my facebook connect library into their application. Once this work was complete, they asked my to carry on working for them on other areas of the application. Right now, I&#8217;m developing almost all of their new functionality and re-factoring old code for them. Releasing the facebook connect library was responsible for gaining a fantastic client.</p>
<p>There is though, the &#8216;cost of free&#8217;. Free code costs time, effort, and more importantly, passion. When I first decided to release free code, I wasn&#8217;t at all prepared for the time I&#8217;d need to dedicate to supporting it, updating it, and improving it. People still used it, and thanked me for it, but I knew it just wasn&#8217;t &#8216;good enough&#8217;. If you&#8217;re thinking about releasing open-source code, time is the biggest cost. And not just coding. Support takes up a great deal more time than the actual coding.</p>
<p>So, with the new versions of my libraries in the works, I&#8217;ve decided to look into something that I&#8217;ve never thought about doing before. Accepting donations. The thing about donations, is that whenever I think about accepting them, I think about the homeless guys I&#8217;d pass on Camden High Street each day on the way to work when I lived in London. I don&#8217;t want to seem like a charity, because I&#8217;m not. I earn my living from clients, and using my expertise.</p>
<p>There is a middle ground though. Something which I think is a nice idea, and for now, more of an experiment.</p>
<p>I know the value of my work, and the time it saves people. I also know that people like to say &#8216;thanks&#8217;, and I get emails regularly stating that notion. So, if you&#8217;ve used my code, and it&#8217;s really saved you some time and money, you can say thanks in a more physical way if you like. (No, not with sexual favours), but by buying me something from a <a href="http://www.amazon.co.uk/registry/wishlist/QMQHCTBWBFW0">wish-list</a>.</p>
<p>For a change, I&#8217;ve decided to create a <a href="http://www.amazon.co.uk/registry/wishlist/QMQHCTBWBFW0">wish-list</a> that isn&#8217;t just full of tech books. I love music, gaming, and reading, so there&#8217;s a real mix of things in it, with prices that range from $5 &#8211; $60. </p>
<h3 class="readmore right"><a href="http://www.amazon.co.uk/registry/wishlist/QMQHCTBWBFW0">My Wish-List &raquo;</a></h3>
<div class="clear"></div>
<p>To summarize, I will never charge for my code. I love that people are able to download it, learn, adapt it, and re-release it. The new versions of my libraries are really coming along, and I&#8217;m looking forward to releasing them. If you&#8217;d like to say thanks, then here&#8217;s one way to do it. And of-course, I always love to receive emails and tweets with thanks. They really do keep me going, and remind me of why I do this.</p>
<p>I&#8217;d encourage everyone to release open-source code. It&#8217;s a great way of giving back to a thriving community.</p>
<img src="http://feeds.feedburner.com/~r/haughin/~4/OobXRHZk-FQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.haughin.com/2010/02/28/the-cost-of-free-the-beauty-of-open-source/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.haughin.com/2010/02/28/the-cost-of-free-the-beauty-of-open-source/</feedburner:origLink></item>
		<item>
		<title>Review: Cacti 0.8 Network Monitoring – PAKT Publishing</title>
		<link>http://feeds.haughin.com/~r/haughin/~3/K8b1uTS638E/</link>
		<comments>http://www.haughin.com/2010/02/26/review-cacti-0-8-network-monitoring-pakt-publishing/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 01:34:57 +0000</pubDate>
		<dc:creator>Elliot</dc:creator>
				<category><![CDATA[misc]]></category>
		<category><![CDATA[featured]]></category>

		<guid isPermaLink="false">http://www.haughin.com/?p=818</guid>
		<description><![CDATA[Before Christmas I was asked by Pakt Publishing to review their book on Cacti 0.8. I'd previously written a blog post all about <a href="http://www.haughin.com/2009/04/15/monitor-your-servers-and-ec2-instances-with-cacti/">Monitoring Your Servers and EC2 Instances with Cacti</a>. So, the book arrived in the post and sat on my desk for a couple of months. I just didn't get round to looking at it. But, with my new lease of life in blogging, I decided to finally get round to reviewing this book.


Although I was asked by PAKT Publishing to review this book, I'm not the kind to suck up just because they posted me a free book. If something's good, then I'll praise it, if it's not, then I'll say so.]]></description>
			<content:encoded><![CDATA[<p>Before Christmas I was asked by PAKT Publishing to review their book on Cacti 0.8. I&#8217;d previously written a blog post all about <a href="http://www.haughin.com/2009/04/15/monitor-your-servers-and-ec2-instances-with-cacti/">Monitoring Your Servers and EC2 Instances with Cacti</a>. So, the book arrived in the post and sat on my desk for a couple of months. I just didn&#8217;t get round to looking at it. But, with my new lease of life in blogging, I decided to finally get round to reviewing this book.</p>
<p>The first thing that surprised me was the length. At just 132 pages, this book isn&#8217;t a manual, it&#8217;s more of a quick guide. And, overall, I was quite disappointed with the content. </p>
<p>Although I was asked by PAKT Publishing to review this book, I&#8217;m not the kind to suck up just because they posted me a free book. If something&#8217;s good, then I&#8217;ll praise it, if it&#8217;s not, then I&#8217;ll say so.</p>
<p>The book assumes you have very little knowledge of linux/unix based systems, which I find odd given the topic of the book. Generally people who would be interested in monitoring servers have a reasonable degree of knowledge of linux/unix machines.</p>
<p>The first three chapters (out of eight in total) are basically an installation guide, an overview of how cacti works, and graphing some simple data. All of which could be learned from a good blog post for free. There&#8217;s also 10 pages on user permissions, which is overkill for a book of just over 130 pages. Personally, if a book is that short, then it better get right to the point and be solid gold; otherwise it starts to lose value.</p>
<p>However, the instructions are clear, and it would be pretty difficult to get lost whilst following this book. The screenshots are accurate and help you see what&#8217;s going on. </p>
<p>I&#8217;ve been known for some pretty bad spelling in previous blog posts. But, when a book is published and sold, it should be as error-free as possible; this isn&#8217;t. There are quite a few mistakes in the book, and, although they don&#8217;t get in the way of the content, they do become rather annoying.</p>
<p>I believe the price point for this book is totally wrong too. The list price is $34.99. For that price I&#8217;d expect a great deal more in the way of advanced content. It just feels like a Christmas dinner without the turkey. There&#8217;s plenty of trimmings, but that&#8217;s about all you get.</p>
<p>This leads me to another point, and something I&#8217;ve had an issue with for some time. Why is it that all tech books insist on putting in lots of useless &#8216;history of&#8217; chapters that we really don&#8217;t give a crap about? I&#8217;m guessing it&#8217;s just to boost page count. But, if I bought a toaster, I wouldn&#8217;t expect the manual to have 4 chapters on the 9,000 year history of cooking bread. I don&#8217;t care. I just want to know how to make toast, how to maintain my new toaster, and what things will break it.</p>
<p>My overall opinion of this book? I&#8217;d say 3 out of 10. If you&#8217;re a complete beginner, then maybe you&#8217;d buy this. But I can&#8217;t find anything in here that a good blog post, or the official manual couldn&#8217;t teach you.</p>
<p>PAKT, I&#8217;m sorry if I&#8217;ve offended you, but this book just isn&#8217;t up to scratch. Maybe you could send me another book that might do better in my ruthless reviews?</p>
<img src="http://feeds.feedburner.com/~r/haughin/~4/K8b1uTS638E" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.haughin.com/2010/02/26/review-cacti-0-8-network-monitoring-pakt-publishing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.haughin.com/2010/02/26/review-cacti-0-8-network-monitoring-pakt-publishing/</feedburner:origLink></item>
		<item>
		<title>Building UTF8 Compatible CodeIgniter Applications</title>
		<link>http://feeds.haughin.com/~r/haughin/~3/Y6mvT4P1cxI/</link>
		<comments>http://www.haughin.com/2010/02/23/building-utf8-compatible-codeigniter-applications/#comments</comments>
		<pubDate>Tue, 23 Feb 2010 00:24:12 +0000</pubDate>
		<dc:creator>Elliot</dc:creator>
				<category><![CDATA[codeigniter]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[featured]]></category>

		<guid isPermaLink="false">http://www.haughin.com/?p=783</guid>
		<description><![CDATA[UTF8 allows your site to represent characters other than those in the basic english alphabet. More often than not, your CodeIgniter Application will contain methods where users can enter their name. This is where you'll most commonly see unusual characters cropping up. To make sure your site can properly represent all of these to the browser, you need to use UTF8 encoding, a way of encoding any unicode character into 1-4 bytes of data.

This guide assumes you are reasonably competent in installing php extensions, adding config variables to your php.ini, and using MY_ CodeIgniter overloading. If you're not sure about any of these, please make sure you consult a professional.]]></description>
			<content:encoded><![CDATA[<p>UTF8 allows your site to represent characters other than those in the basic english alphabet. More often than not, your CodeIgniter Application will contain methods where users can enter their name. This is where you&#8217;ll most commonly see unusual characters cropping up. To make sure your site can properly represent all of these to the browser, you need to use UTF8 encoding, a way of encoding any unicode character into 1-4 bytes of data.</p>
<p>This guide assumes you are reasonably competent in installing php extensions, adding config variables to your php.ini, and using MY_ CodeIgniter overloading. If you&#8217;re not sure about any of these, please make sure you consult a professional.</p>
<h3>PHP</h3>
<p>PHP has a few issues whilst using UTF8. Because it encodes each character using a variable length, some characters can become longer than one byte. There are a few &#8216;multibyte unsafe operations&#8217; in PHP which do not detect characters greater than one byte in length. To fix this, we can use mbstring.</p>
<blockquote><p> While there are many languages in which every necessary character can be represented by a one-to-one mapping to an 8-bit value, there are also several languages which require so many characters for written communication that they cannot be contained within the range a mere byte can code (A byte is made up of eight bits. Each bit can contain only two distinct values, one or zero. Because of this, a byte can only represent 256 unique values (two to the power of eight)). Multibyte character encoding schemes were developed to express more than 256 characters in the regular bytewise coding system.</p>
<p>When you manipulate (trim, split, splice, etc.) strings encoded in a multibyte encoding, you need to use special functions since two or more consecutive bytes may represent a single character in such encoding schemes. Otherwise, if you apply a non-multibyte-aware string function to the string, it probably fails to detect the beginning or ending of the multibyte character and ends up with a corrupted garbage string that most likely loses its original meaning.</p>
<p>mbstring provides multibyte specific string functions that help you deal with multibyte encodings in PHP. In addition to that, mbstring handles character encoding conversion between the possible encoding pairs. mbstring is designed to handle Unicode-based encodings such as UTF-8 and UCS-2 and many single-byte encodings for convenience (listed below).</p></blockquote>
<p>Once you&#8217;ve installed, configured and enabled this extension, several core php functions will be automatically overloaded by mbstring. Here&#8217;s a list of the <a href="http://www.php.net/manual/en/mbstring.overload.php" target="_blank">functions automatically overloaded</a></p>
<p>You can install mbstring a few different ways, for simplicity, here&#8217;s how you would do it using a package manager (Aptitude) with Ubunutu:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> php5-mbstring</pre></div></div>

<p>Once the installation is complete, you&#8217;ll need to enable the extension and add some configuration to your php.ini file:</p>

<div class="wp_syntax"><div class="code"><pre class="ini" style="font-family:monospace;"><span style="color: #000099;">extension</span><span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">php_mbstring.so</span>
<span style="color: #000066; font-weight:bold;"><span style="">&#91;</span>mbstring<span style="">&#93;</span></span>
mbstring.language     <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> Neutral   </span><span style="color: #666666; font-style: italic;">; Set default language to Neutral(UTF-8) (default)</span>
mbstring.internal_encoding   <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> UTF-<span style="">8</span>     </span><span style="color: #666666; font-style: italic;">; Set default internal encoding to UTF-8</span>
mbstring.encoding_translation   <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> On     </span><span style="color: #666666; font-style: italic;">;  HTTP input encoding translation is enabled</span>
mbstring.http_input     <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> auto     </span><span style="color: #666666; font-style: italic;">; Set HTTP input character set dectection to auto</span>
mbstring.http_output     <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> UTF-<span style="">8</span>     </span><span style="color: #666666; font-style: italic;">; Set HTTP output encoding to UTF-8</span>
mbstring.detect_order     <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> auto     </span><span style="color: #666666; font-style: italic;">; Set default character encoding detection order to auto</span>
mbstring.substitute_character   <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> none     </span><span style="color: #666666; font-style: italic;">; Do not print invalid characters</span>
<span style="color: #000099;">default_charset</span>         <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> UTF-<span style="">8</span>     </span><span style="color: #666666; font-style: italic;">; Default</span>
mbstring.func_overload <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> 7</span></pre></div></div>

<p>With that out of the way, restart your webserver, and you&#8217;re set up with mbstring.</p>
<h3>Database</h3>
<p>Because the database may be storing some of our unsual characters, we also need to select an encoding that will support it. On your database, change the encoding type to a UTF-8 compatible one. Under MySQL, I tend to use: &#8220;utf8_general_ci&#8221;</p>
<h3>CodeIgniter</h3>
<p>We all know and love <a href="http://codeigniter.com/">CodeIgniter</a>, our favourite PHP Framework. But, by default there&#8217;s some places that CodeIgniter just doesn&#8217;t deal with UTF-8 encoded characters very well. But, because CodeIgniter is almost completely flexible, we can modify some of the core methods and have them overload the default methods, fixing the problems.</p>
<p>If you&#8217;re using the <a href="http://www.codeignitor.com/user_guide/helpers/form_helper.html">form_helper</a>, you&#8217;ll need to modify the form_open method to tell the form to use UTF-8 encoding. This new file will also fix a potential issue with htmlspecialchars.</p>
<p>Create the file: application/helpers/MY_form_helper.php containing:</p>
<script src="http://gist.github.com/311673.js"></script><noscript><code class="gist"><pre><br />
<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');<br />
if ( ! function_exists('form_open'))<br />
{<br />
	function form_open($action = '', $attributes = '', $hidden = array())<br />
	{<br />
		$CI =&#038; get_instance();</p>
<p>		if ($attributes == '')<br />
		{<br />
			$attributes = 'method="post"';<br />
		}</p>
<p>		$action = ( strpos($action, '://') === FALSE) ? $CI->config->site_url($action) : $action;</p>
<p>		$form = &#8216;<br />
<form action="'.$action.'"';</p>
<p>		$form .= _attributes_to_string($attributes, TRUE);</p>
<p>		$form .= ' accept-charset="utf-8"';</p>
<p>		$form .= '>&#8216;;</p>
<p>		if (is_array($hidden) AND count($hidden) > 0)<br />
		{<br />
			$form .= form_hidden($hidden);<br />
		}</p>
<p>		return $form;<br />
	}<br />
}</p>
<p>// &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>/**<br />
 * Form Prep<br />
 *<br />
 * Formats text so that it can be safely placed in a form field in the event it has HTML tags.<br />
 *<br />
 * @access	public<br />
 * @param	string<br />
 * @return	string<br />
 */<br />
if ( ! function_exists(&#8216;form_prep&#8217;))<br />
{<br />
	function form_prep($str = &#8221;, $field_name = &#8221;)<br />
	{<br />
		static $prepped_fields = array();</p>
<p>		// if the field name is an array we do this recursively<br />
		if (is_array($str))<br />
		{<br />
			foreach ($str as $key => $val)<br />
			{<br />
				$str[$key] = form_prep($val);<br />
			}</p>
<p>			return $str;<br />
		}</p>
<p>		if ($str === &#8221;)<br />
		{<br />
			return &#8221;;<br />
		}</p>
<p>		// we&#8217;ve already prepped a field with this name<br />
		// @todo need to figure out a way to namespace this so<br />
		// that we know the *exact* field and not just one with<br />
		// the same name<br />
		if (isset($prepped_fields[$field_name]))<br />
		{<br />
			return $str;<br />
		}</p>
<p>		// $str = htmlspecialchars($str);</p>
<p>		$str = htmlspecialchars($str, ENT_COMPAT, &#8216;UTF-8&#8242;);</p>
<p>		// In case htmlspecialchars misses these.<br />
		$str = str_replace(array(&#8220;&#8216;&#8221;, &#8216;&#8221;&#8216;), array(&#8220;&#39;&#8221;, &#8220;&quot;&#8221;), $str);</p>
<p>		if ($field_name != &#8221;)<br />
		{<br />
			$prepped_fields[$field_name] = $str;<br />
		}</p>
<p>		return $str;<br />
	}<br />
}</p>
<p>// &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
</pre></code></noscript>
<p>Now we move on to the slightly more tricky stuff. The XMLRPC library bundled with CodeIgniter has some code that isn&#8217;t safe with UTF-8. In particular, htmlentities and htmlspecialchars. This file is pretty big, so I won&#8217;t put it all here.</p>
<h4><a href="http://gist.github.com/311665">MY_Xmlrpc.php</a></h4>
<p>Place this file in application/libraries/MY_Xmlrpc.php</p>
<p>The email library has a similar problem, so here&#8217;s a version of the email library with the fix in place:</p>
<h4><a href="http://gist.github.com/311677">MY_Email.php</a></h4>
<p>Place this file in application/libraries/MY_Email.php</p>
<p>Now, finally, before we go ahead and build our application, we need to set the header.php in our view files (or your version of this) to use UTF-8:</p>
<script src="http://gist.github.com/311692.js"></script><noscript><code class="gist"><pre><br />
<?php header('Content-type: text/html; charset=UTF-8'); ?><br />
<?php echo '<?xml version="1.0" encoding="UTF-8"?>&#8216;; ?><br />
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><br />
<html xmlns="http://www.w3.org/1999/xhtml"><br />
<head><br />
<meta http-equiv="Content-type" value="text/html; charset=UTF-8" /></p>
<p></head><br />
<body><br />
</pre></code></noscript>
<p>So, you should now be ready to build your UTF-8 web application in CodeIgniter, I&#8217;m not going to leave you without an extra helper to make the journey a little easier. First of all, create a new config file:</p>
<p>application/config/international.php</p>
<script src="http://gist.github.com/311698.js"></script>
<p>Now create a new helper:</p>
<p>application/helpers/international.php</p>
<script src="http://gist.github.com/311704.js"></script>
<p>There&#8217;s some helpful methods in here like: utf8_to_uri() which takes characters and converts them into standard alphabet characters:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">&nbsp;
<span style="color: #000088;">$utf8</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;Iñtërnâtiônàlizætiøn&quot;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> utf8_to_uri<span style="color: #009900;">&#40;</span><span style="color: #000088;">$uft8</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Produces: (string) &quot;Internationalization&quot;</span></pre></div></div>

<p>As you can see, unicode isn&#8217;t exactly straight forward. But, if you want to build a true international well application, it certainly is important!</p>
<img src="http://feeds.feedburner.com/~r/haughin/~4/Y6mvT4P1cxI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.haughin.com/2010/02/23/building-utf8-compatible-codeigniter-applications/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.haughin.com/2010/02/23/building-utf8-compatible-codeigniter-applications/</feedburner:origLink></item>
		<item>
		<title>The Dawn of a New Haughin Era</title>
		<link>http://feeds.haughin.com/~r/haughin/~3/ccQfvnBazWw/</link>
		<comments>http://www.haughin.com/2010/02/21/the-dawn-of-a-new-haughin-era/#comments</comments>
		<pubDate>Sun, 21 Feb 2010 18:24:57 +0000</pubDate>
		<dc:creator>Elliot</dc:creator>
				<category><![CDATA[blogging]]></category>
		<category><![CDATA[featured]]></category>

		<guid isPermaLink="false">http://www.haughin.com/?p=743</guid>
		<description><![CDATA[Since September things have changed a great deal for me, both in my personal life, and professionally.
This had led me to seriously think about what it is that I 'do', other people's perceptions and observations of me, and more importantly, what 'can' I do in the future.

Before I begin this post, I must make this clear. Most people who read and subscribe to my blog are doing so because of my work with CodeIgniter and other areas of web development. I get that, and this isn't a personal blog, it is quite tech related. But, if you fall into this group of people, please bear with me on this post, it will make sense.
]]></description>
			<content:encoded><![CDATA[<p>Since September things have changed a great deal for me, both in my personal life, and professionally.<br />
This had led me to seriously think about what it is that I &#8216;do&#8217;, other people&#8217;s perceptions and observations of me, and more importantly, what &#8216;can&#8217; I do in the future.</p>
<p>Before I begin this post, I must make this clear. Most people who read and subscribe to my blog are doing so because of my work with CodeIgniter and other areas of web development. I get that, and this isn&#8217;t a personal blog, it is quite tech related. But, if you fall into this group of people, please bear with me on this post, it will make sense.</p>
<h3>University</h3>
<p>Firstly, with my personal life, I&#8217;ve moved to Aberdeen, a great Scottish city with all the culture and traditions associated with it. Whilst attending University here, I&#8217;ve had an opportunity to study areas I&#8217;ve never even considered studying before. Let me give you a quick overview of how the University of Aberdeen (and most Scottish universities) work, and why it&#8217;s so different to English education.</p>
<p>At my University a standard BSc or BA degree takes 4 years of study. In England, this is only 3 years. The reason for this is that in Scotland it&#8217;s possible to go to University at 17 years old rather than 18. So, the basic entry level and depth of the first year of study is much easier.</p>
<p><img src="http://www.haughin.com/wp-content/uploads/2010/02/abdnfoam.jpg" alt="" title="abdnfoam" width="600" height="238" class="alignnone size-full wp-image-765" /></p>
<p>Due to the first year being so easy to pass, it&#8217;s pretty easy to get carried away with the endless nights of partying!</p>
<p>During these 4 years, only the last 2 are actually assessed and count towards your final degree &#8216;grade&#8217; (1st, 2nd-1, 2nd-2, 3rd class). So, for the first 2 years, you only have to &#8216;pass&#8217;, which isn&#8217;t very difficult at all. Also, during these first 2 years of study, you are only allowed to make up half of your credits from courses in your school of degree.<br />
For example, in my first year, I have to study 6 courses. But, I&#8217;m only allowed to study 3 from the school of computing, since my degree is in Computing Science. So, I have to study different subjects.</p>
<p>My first year courses, under this rule have ended up as:</p>
<ul>
<li>CS1014 Foundations of Computing Science 1 (School of Computing)</li>
<li>MS1016 Managing People and Organizations (School of Management)</li>
<li>EC1014 Microeconomics (School of Business)</li>
<li>CS1512 Foundations of Computing Science 2 (School of Computing)</li>
<li>CS1513 Web Technologies (School of Computing)</li>
<li>MS1516 Managing Operations and Processes (School of Management)</li>
</ul>
<p>So, out of these 6 courses, only 3 can be from the School of Computing. This has forced me to study a wide range of subjects, which has proven to be extremely useful. I&#8217;m now beginning to understand why managers and clients ask certain things of us, and how companies work as an entity driving towards a common objective.</p>
<h3>Freelancing</h3>
<p>Some of this education has began to shine through in my work too. Understanding business objectives as well as technical objectives is crucial to being a good freelancer. To build a long-lasting, worthwhile working relationship with your clients, you need to understand where they are going. What are the objectives of the business and their project, and where does your work fit in to this? Being able to make suggestions to help tie your technology into their business is the basis for recurring work. Eventually, you can even find yourself in a position where you&#8217;re creating your own work to do.</p>
<p>It&#8217;s not been all puppies and rainbows though. I&#8217;m in no way a perfect freelancer, and recently I&#8217;ve found that out. For about 3 weeks I went completely dark with a client. The project was behind, the client didn&#8217;t know what was going on, and I was sat on my arse making things worse by not getting in touch. It got to the point where I just couldn&#8217;t work out how to proceed with the work. The brief seemed so huge, and the existing code was a mammoth, I just got drowned.</p>
<p>Then something fantastic happened. The first thing was making contact with the client. We eventually got on skype and talked for a couple hours about the whole situation. And, we managed to systematically come up with a way of slaying this dragon. With a clearer picture and a stronger focus, we eventually got the project back on track, and with a few night-shifts, managed to repair the relationship.</p>
<p>Although at the time I felt like getting in touch with the client would be a tough and embarrassing ordeal, it paid off, and now I&#8217;m still working for them. It&#8217;s never too late to talk with a client about problems. Most clients are extremely reasonable, and, even if you&#8217;re due a good telling off, the project still remains their main priority.</p>
<h3>Blog</h3>
<p>With work sorted out, and my life beginning to get back to normal, I turned my attention to my site. It really was quite a poor piece of work. But that&#8217;s the same with most developer&#8217;s blogs. You always tend to do your best work when you&#8217;re doing it for others, (and getting paid for it). So, I decided to redesign my site. The goals were to make it cleaner, lighter, and easy-to-read. Hopefully it&#8217;s worked.</p>
<p>There&#8217;s been a problem though. My posts have become further and further spread apart, with updates happening a few times a year rather than a few times a month. It&#8217;s a real shame, because I&#8217;ve missed blogging. So, now that I have more of a weekly schedule in my life, I&#8217;m going to start writing more.</p>
<p>I&#8217;m also pretty set on re-writing some of the content pages, and producing some simple guides for people who want basic introductions to CodeIgniter-y things. I get hundreds of emails asking how to do the same things in CI, so I might as well build a little guide section here on my blog!</p>
<h3>Code</h3>
<p>Guilt has been poking me in the back over the last 6 months. Thousands of people visit my site for 1 reason: <a href="/code/">CodeIgniter Libraries</a>. </p>
<p><img src="http://www.haughin.com/wp-content/uploads/2010/02/tweets.png" alt="" title="tweets" width="317" height="277" class="alignright size-full wp-image-768" />When they were written, this code provided an excellent resource for people developing CodeIgniter applications, but now the libraries are getting pretty old, and I&#8217;m really not happy with them. So, I&#8217;m going to dedicate 4 hours a week to building great code to release here on my new site.</p>
<p>To start this, I&#8217;m going to work out a better way to organize and distribute the code. I&#8217;m not too sure about github yet, but if you have any suggestions, please let me know.</p>
<p>Once this is done, I&#8217;ll make a start re-factoring the most popular libraries, the <a href="/code/twitter/">Twitter oAuth CodeIgniter Library</a> and the <a href="/code/facebook/">Facebook Connect CodeIgniter Library</a></p>
<p>It&#8217;s critical that user feedback powers the next generation of this code, so I&#8217;d really appreciate any feedback on the libraries. </p>
<h3>The New Haughin Era</h3>
<p>So, this New Haughin Era isn&#8217;t the dawn of some major Web 2.0 application I&#8217;m launching, or a complete change in career. But, it&#8217;s a change in the way of consistent, great quality, &#8216;ass-kicking&#8217; writing, coding, speaking, and freelancing.</p>
<img src="http://feeds.feedburner.com/~r/haughin/~4/ccQfvnBazWw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.haughin.com/2010/02/21/the-dawn-of-a-new-haughin-era/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://www.haughin.com/2010/02/21/the-dawn-of-a-new-haughin-era/</feedburner:origLink></item>
		<item>
		<title>ExpressionEngine 2 and CodeIgniter – Will we see a change in the 3rd Party Market?</title>
		<link>http://feeds.haughin.com/~r/haughin/~3/OUb2MFXTJmM/</link>
		<comments>http://www.haughin.com/2009/11/04/expressionengine-2-codeigniter/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 02:40:19 +0000</pubDate>
		<dc:creator>Elliot</dc:creator>
				<category><![CDATA[career]]></category>
		<category><![CDATA[expressionengine]]></category>
		<category><![CDATA[codeigniter]]></category>
		<category><![CDATA[ellislab]]></category>
		<category><![CDATA[featured]]></category>

		<guid isPermaLink="false">http://www.haughin.com/?p=697</guid>
		<description><![CDATA[We've known for a long time that ExpressionEngine is built on top of CodeIgniter. But why is this important, and does it actually make any difference? Do we care? Should we care?

Well, at it's current 1.6.x version I've never been that interested in ExpressionEngine if I'm totally honest. I've looked through the codebase, and after working with CodeIgniter for so long, I've just thought... 'what a mess!'. It's one of the cruel jokes of working with CI day in day out, anything not quite as beautiful just seems to look like a monstrous bit of code.

<em>*Quick note* I'm going to be very careful not to break the beta T&#038;C's here.</em>

After seeing the ExpressionEngine 2.0 codebase, and really looking into how closely it works with CodeIgniter, I might have actually changed my mind.

If you're a CodeIgniter developer I would say this: You WILL be able to develop ExpressionEngine addons, plugins, as if you were just coding away in a CodeIgniter development. And this is where the 3rd party ExpressionEngine market will start going crazy.]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.haughin.com/wp-content/uploads/2009/11/468814_959647_codeigniter_logo.png" alt="468814_959647_codeigniter_logo" title="468814_959647_codeigniter_logo" width="100" height="100" class="alignright size-full wp-image-721" /><br />
We&#8217;ve known for a long time that ExpressionEngine is built on top of CodeIgniter. But why is this important, and does it actually make any difference? Do we care? Should we care?</p>
<p>Well, at it&#8217;s current 1.6.x version I&#8217;ve never been that interested in ExpressionEngine if I&#8217;m totally honest. I&#8217;ve looked through the codebase, and after working with CodeIgniter for so long, I&#8217;ve just thought&#8230; &#8216;what a mess!&#8217;. It&#8217;s one of the cruel jokes of working with CI day in day out, anything not quite as beautiful just seems to look like a monstrous bit of code.</p>
<p><em>*Quick note* I&#8217;m going to be very careful not to break the beta T&#038;C&#8217;s here.</em></p>
<p>After seeing the ExpressionEngine 2.0 codebase, and really looking into how closely it works with CodeIgniter, I might have actually changed my mind.</p>
<p>If you&#8217;re a CodeIgniter developer I would say this: You WILL be able to develop ExpressionEngine addons, plugins, as if you were just coding away in a CodeIgniter development. And this is where the 3rd party ExpressionEngine market will start going crazy.</p>
<p>ExpressionEngine development has previously been dominated by a few well-known companies and individuals. These are usually the guys who got on the EE bandwagon as soon as it hit the road and have been rolling with it since. Because of this they&#8217;ve had a great place in the 3rd party ExpressionEngine market. With only a select number of people to compete with, and the &#8216;experience&#8217; and &#8216;reputation&#8217; they hold, they&#8217;ve made successful and profitable businesses.</p>
<p>Then CodeIgniter enters the picture. There&#8217;s thousands of CodeIgniter developers all round the world, all varying in skill, but there are probably hundreds of very very good CI developers. Now, these are all in the perfect position to start expanding their range and entering the 3rd party ExpressionEngine market. In-fact, on twitter recently I&#8217;ve noticed that <a href="http://www.jamierumbelow.net">Jamie Rumbelow</a> and <a href="http://philsturgeon.co.uk/">Phil Sturgeon</a>, both excellent CodeIgniter developers, are wanting to start writing 3rd party products for ExpressionEngine 2.0.</p>
<h3>Will this be a peaceful merger or a hostile takeover?</h3>
<p>You&#8217;ll have to bear with me for this section of the post, but please do, I think it&#8217;s a very valid question.</p>
<p>Right now the number of ExpressionEngine customers stands at just over 100,000 or so. There are probably less than 50 well-known companies or individuals who produce the best-selling 3rd party products. I&#8217;m aware that there are thousands of companies who build sites in EE, but I&#8217;m talking about companies who specialize in building 3rd party ExpressionEngine products and selling them for a one-off price, say $30.</p>
<p>Now, we add hundreds, if not thousands of CodeIgniter developers to this market and there could be some huge potential problems. Existing sellers may not like hundreds of potential competitors entering their market by &#8216;default&#8217; when ExpressionEngine 2.0 launches. Their only comfort is knowing that ExpressionEngine 2.0 will very likely increase the overall size of the current 3rd party market.</p>
<h3>Here&#8217;s an example</h3>
<p><a href="http://www.solspace.com">Solspace</a> is a company who make plenty of paid-for 3rd party ExpressionEngine products. They&#8217;ve currently got module for sale that handles tagging. The price is $39.99</p>
<p>I could also build this for ExpressionEngine 2.0 with its CodeIgniter loveliness. And sell it for $25 (I can&#8217;t stand .99 pricing!). Now, it&#8217;s true that the &#8216;first to market&#8217; product will always get the majority of purchases, but the following products to come to market can actually do better if they set their price-point right.</p>
<p>So, I build my module, I make sure it&#8217;s as good, if not better than the competition, and sell it for less.<br />
I start making sales, increasing my customer base, and then, we have a real competetive market on our hands.</p>
<h3>The outcome of increased competition</h3>
<p>Ultimately, I can see several things happening here. First of all, the CodeIgniter developers just &#8216;entering&#8217; the 3rd party ExpressionEngine market will find &#8216;first-to-market&#8217; products. Modules that haven&#8217;t been build yet.<br />
With this approach they can start selling their products without ruffling too many feathers. But, the new developers won&#8217;t be able to do this for long. </p>
<p>It&#8217;s only a matter of time before they realize that the best selling products already available through existing sellers is where the largest demand lies. Then, we begin an age of competition.</p>
<p>Before you all get carried away&#8230; Yes, I know there is currently competition in this market, but I don&#8217;t believe there&#8217;s a great deal. Not as much as say professional drupal modules.</p>
<p>So, what do we get from the competition? Well, the first thing to happen is a shift in quality. New developers will attempt to &#8216;out-class&#8217; the competition with more features, better designs, and generally higher quality products. Once quality reaches a saturation point, it becomes inefficient to compete on quality alone. Then we see a shift in price. Both providers compete on pricing, maybe offering &#8216;membership&#8217; or &#8216;batch&#8217; pricing for loyal customers.</p>
<p>Overall, it&#8217;s great news for consumers. Competition almost always is. But it&#8217;s going to get much tougher for the developers out there.</p>
<img src="http://feeds.feedburner.com/~r/haughin/~4/OUb2MFXTJmM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.haughin.com/2009/11/04/expressionengine-2-codeigniter/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		<feedburner:origLink>http://www.haughin.com/2009/11/04/expressionengine-2-codeigniter/</feedburner:origLink></item>
	</channel>
</rss><!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
