<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>Michael Wales</title>
	<atom:link href="http://www.michaelwales.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.michaelwales.com</link>
	<description>Senior Developer Michael Wales, featuring articles on web development (PHP, Python and Ruby), industry highlights and open source software releases.</description>
	<lastBuildDate>Tue, 22 Mar 2011 04:04:33 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>5 Steps to Becoming a Web Development All-Star</title>
		<link>http://www.michaelwales.com/2011/03/5-steps-to-becoming-a-web-development-all-star/</link>
		<comments>http://www.michaelwales.com/2011/03/5-steps-to-becoming-a-web-development-all-star/#comments</comments>
		<pubDate>Tue, 22 Mar 2011 04:04:10 +0000</pubDate>
		<dc:creator>Michael Wales</dc:creator>
				<category><![CDATA[Web Standards]]></category>

		<guid isPermaLink="false">http://www.michaelwales.com/?p=258</guid>
		<description><![CDATA[I&#8217;ve enjoyed great success as a web developer &#8211; from my early days in 1999 building websites for clients via RentACoder.com, through my tenure as the CodeIgniter Community Chieftain, to where I am today (the Lead Developer for a team responsible for multi-million dollar contracts with various DoD intelligence communities) &#8211; it&#8217;s been a wild [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve enjoyed great success as a web developer &#8211; from my early days in 1999 building websites for clients via <a href="http://www.rentacoder.com/" title="RentACoder">RentACoder.com</a>, through my tenure as the <a href="http://www.codeigniter.com/" title="CodeIgniter">CodeIgniter</a> Community Chieftain, to where I am today (the Lead Developer for a team responsible for multi-million dollar contracts with various DoD intelligence communities) &#8211; it&#8217;s been a wild ride. I&#8217;d like to share, what I believe, got me to this point. This absolutely is not within chronological order, maybe a loose &#8220;level of importance&#8221; order.</p>
<p>All of these points will be written from my own personal perspective, starting with PHP and progressing on &#8211; regardless of your current language of choice, I&#8217;m sure you can take something away from this.</p>
<h3>1. Learn Another Language</h3>
<p>For me, it was <a href="http://www.python.org/" title="Python">Python</a> &#8211; I had system administration duties where it just resolved to be the right language for the job. Nonetheless, I think it&#8217;s important for developers to learn another language; and if you have the freedom to break away from the web: do so! I&#8217;m not just saying play around with another language or complete a project or two in it &#8211; <em>fucking learn that shit</em>. You don&#8217;t want to be a one trick pony and every new language, that you truly grasp, and learn, will open your eyes to new concepts. It&#8217;s at this point you&#8217;ll realize being a developer isn&#8217;t so much about language as it is about concepts; languages are just syntax.</p>
<h3>2. Dabble</h3>
<p>Not to discount the aforementioned point, but you need to dabble too. Read a <a href="http://www.rubyonrails.org/" title="Ruby on Rails">Ruby on Rails</a> book and complete a project, complete a quick demo in <a href="http://unity3d.com/" title="Unity3D">Unity3D</a> &#8211; it doesn&#8217;t matter. The more you dabble, the more you will learn. I had studied normalized databases for years &#8211; I knew the definition; but in practice, it wasn&#8217;t until playing with Rails did I actually have the skillset to put it into practice. I knew JavaScript&#8217;s capabilities, but it was until dabbling in <a href="http://jquery.com/" title="jQuery">jQuery</a>, <a href="http://www.prototypejs.org/" title="PrototypeJS">Prototype</a> and <a href="http://www.sencha.com/products/extjs/" title="ExtJS">ExtJS</a> that I truly <em>understood</em> the language. <strong>You will learn new things</strong> with every language/framework you dabble in &#8211; whether it&#8217;s web-related or not.</p>
<h3>3. Pick a Niche</h3>
<p>For me, it was <a href="http://www.codeigniter.com/" title="CodeIgniter">CodeIgniter</a>. I busted my balls to become the name within the CodeIgniter community &#8211; I&#8217;m not so egotistical that I will sit here and tell you people equate CodeIgniter with my name, but I will tell you that was my goal. I wanted people to think &#8220;Michael Wales&#8221; before they thought &#8220;CodeIgniter freelancer&#8221; and I set out to accomplish that goal. I can name at least 10 people off the top of my head that know CodeIgniter better than I, but when it came to marketing, value for your money and niche-knowledge &#8211; as a total package &#8211; I was a pretty solid contender. Learn your niche inside and out, get out there, make yourself known by responding to questions and releasing great products; and if you are freelancing, <strong>charge for it</strong>! You will gain much more notoriety (as long as you can back it up) charging $75/hr than you will $20/hr; and ultimately, dominating a niche will progress your name further. When you are fulfilled within this niche, then move on.</p>
<h3>4. Get Out There</h3>
<p>If you don&#8217;t have a blog, get one. If you don&#8217;t have a <a href="http://www.twitter.com/" title="Twitter">Twitter</a> account, get one. If you don&#8217;t have a <a href="http://www.forrst.com/" title="Forrst">Forrst</a> account, start proving yourself and get an invitation from those of us that do. You need to get your name out there and you need to firmly stand behind everything you say. It&#8217;s okay to be wrong, but admit it and be cordial &#8211; thanking those around you for their help. There will always be someone smarter than you, but you will always be smarter than someone else; it&#8217;s your job to learn from the former and educate the latter. Your name is your brand and it is just as important to you as the name &#8220;Tylenol&#8221; is to Johnson &#038; Johnson.</p>
<h3>5. Never Give Up</h3>
<p>Want to know a secret? My first business success, WoWCensus, parsed gigabytes of World of Warcraft logs by exploding on new line characters, then exploding on commas, then substringing on this, then that, then this, then that. It&#8217;s a wonder if worked at all (it damn sure didn&#8217;t work efficiently)! Nonetheless, I knew I wanted to parse in-game demographic data across all servers and I didn&#8217;t give a damn whether anyone said it was possible/feasible or not. Sure, technical limitations can hardly be overlooked; but when it comes to the limitations you put on yourself &#8211; <strong>fuck that shit</strong>. You are a programmer &#8211; you are analytical by nature; break the larger problem down into smaller tasks, ask your friends (see #4), drink a case of beer and think outside the box. Whatever it is you need to do, never, ever doubt yourself.</p>
<h3>Bonus: Embrace Web Standards</h3>
<p>Their coming (HTML5/CSS3/etc), whether you like it or not &#8211; and by implementing gracefully degrading solutions now you make yourself look awesome months down the road &#8211; with no future effort! Embrace them now, be on the fore-front of technology. I&#8217;ve made it second nature to support graceful degradation and web standards, I feel dirty and as if I have sinned otherwise. Ultimately, it has made me a better developer &#8211; I have a much firmer understanding of the HTTP protocol, a greater understanding of alternative Internet-technologies (screen-readers, for instance) and government-mandated handicapp-accessible compliance is an afterthought for me. I don&#8217;t need to worry about whether my application is compliant, or study miniscule edge-cases, I know for a fact it is because I inherently designed it that way.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.michaelwales.com/2011/03/5-steps-to-becoming-a-web-development-all-star/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tiara: HTML5 Game Engine</title>
		<link>http://www.michaelwales.com/2011/01/tiara-html5-game-engine/</link>
		<comments>http://www.michaelwales.com/2011/01/tiara-html5-game-engine/#comments</comments>
		<pubDate>Sat, 22 Jan 2011 13:06:08 +0000</pubDate>
		<dc:creator>Michael Wales</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Web Standards]]></category>

		<guid isPermaLink="false">http://www.michaelwales.com/?p=234</guid>
		<description><![CDATA[Update 3: The demo page has been updated to feature an index of currently completed demos. After a long day of working on image/sprite support I took a break from engine development and built up a quick demo, Example 3, that features some actual gameplay elements! Update 2: Redditor gramathy just informed me it&#8217;s also [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.michaelwales.com/wp-content/uploads/2011/01/HTML5_Logo_128.png" alt="HTML5" title="HTML5" width="128" height="128" class="alignright" /><strong>Update 3:</strong> The <a href="http://www.michaelwales.com/tiarajs/" title="TiaraJS">demo page</a> has been updated to feature an index of currently completed demos. After a long day of working on image/sprite support I took a break from engine development and built up a quick demo, <a href="http://www.michaelwales.com/tiarajs/example3/index.html" title="TiaraJS: Example 3">Example 3</a>, that features some actual gameplay elements!</p>
<p><strong>Update 2:</strong> Redditor <a href="http://www.reddit.com/user/gramathy" title="Reddit:gramathy">gramathy</a> just informed me it&#8217;s also working in Safari, if those of you in that world are willing to run a quick test for me. <a href="http://twitter.com/erikbrannstrom" title="Twitter: erikbrannstrom">@erikbrannstrom</a> told me it&#8217;s also working in Firefox 4 Beta.</p>
<p><strong>Update:</strong> If you run Google Chrome, I have a demo running publicly <a href="http://michaelwales.com/tiarajs" title="Tiara: Example 2">right here</a> &#8211; if you could reply with your FPS count (lower-left) and system info you feel is relevant, it would be much appreciated. </p>
<p>Gaming has always been a passion of mine and as any of my friends can tell you, I&#8217;m constantly coming up with ideas for new games. Unfortunately, my expertise in this little programming world has been primarily delegated to the world of web development. Thankfully, with HTML5 on the horizon, I can finally combine these two passions of mine into one package of pure awesome and peak out my nerdometer to its maximum.</p>
<p>I&#8217;ve spent the last 6 hours working on a JavaScript game engine, using HTML&#8217;s new <code>canvas</code> element, that is based off of the extremely fun and easy to use <a href="http://www.love2d.org/" title="Love2d">Love2d</a> game engine for Lua. Now, there is a bare minimum of functionality here thus far but I&#8217;m having a lot of fun working on this and I think it&#8217;s a great foundation to continue working off of. I shared a few quick screenshots on <a href="http://www.forrst.com/" title="Forrst">Forrst</a>, of my <a href="http://forr.st/~RSS" title="Forrst: Tiara HTML5 Game Engine">first</a> and <a href="http://forr.st/~RSu" title="Forrst: Tiara HTML5 Game Engine (Example 2)">second</a> example demos &#8211; complete with code and performance summaries; but, I also wanted to record a quick demo so everyone could see this bad boy in action.</p>
<p>The video below (<a href="http://www.youtube.com/watch?v=vd6zT_yEWnM" title="Tiara: HTML5 Game Engine">HD available</a> on YouTube) sits just under 10 minutes and will introduce you to the engine, I discuss what my goals are in basing the API off of Love2d&#8217;s API and I actually rebuild my second example demo and bounce a square around the screen! Check it out and let me know what you think in the comments!</p>
<p><iframe title="YouTube video player" class="youtube-player" type="text/html" width="640" height="390" src="http://www.youtube.com/embed/vd6zT_yEWnM?rel=0&amp;hd=1" frameborder="0" allowFullScreen></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.michaelwales.com/2011/01/tiara-html5-game-engine/feed/</wfw:commentRss>
		<slash:comments>63</slash:comments>
		</item>
		<item>
		<title>Fun with APIs: KnowYourTrend.com</title>
		<link>http://www.michaelwales.com/2011/01/fun-with-apis-knowyourtrend-com/</link>
		<comments>http://www.michaelwales.com/2011/01/fun-with-apis-knowyourtrend-com/#comments</comments>
		<pubDate>Fri, 07 Jan 2011 14:33:37 +0000</pubDate>
		<dc:creator>Michael Wales</dc:creator>
				<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://www.michaelwales.com/?p=230</guid>
		<description><![CDATA[What started as just an exercise in toying with a vast array of APIs has officially launched as of last night, KnowYourTrend.com. As I combined the various APIs together, into a single comprehensive collection of information on a subject, I actually started to find the information useful. Looking over sites like Google Trends or Twitter [...]]]></description>
			<content:encoded><![CDATA[<p>What started as just an exercise in toying with a vast array of APIs has officially launched as of last night, <a href="http://www.knowyourtrend.com/" title="KnowYourTrend: News, Video, Photos and Tweets about Current Trends">KnowYourTrend.com</a>. As I combined the various APIs together, into a single comprehensive collection of information on a subject, I actually started to find the information useful.</p>
<p>Looking over sites like <a href="http://trends.google.com/" title="Google Trends">Google Trends</a> or <a href="http://search.twitter.com/" title="Twitter Search">Twitter Search</a> I often find myself wondering, &#8220;What is <em>X</em>, and why is it trending?&#8221; For example, <a href="http://www.knowyourtrend.com/trends/gary-mason" title="KnowYourTrend: News, Video, Photos and Tweets about Gary Mason">Gary Mason</a> is currently trending on Twitter &#8211; I have no clue who this is or why they are trending. <a href="http://www.knowyourtrend.com/" title="KnowYourTrend">KnowYourTrend</a> quickly puts all of this information on the front page and you quickly learn he was a pretty big-deal British boxer that recently passed away.</p>
<p>There&#8217;s still a lot of work to be done for sure: bringing in more APIs (YouTube and Amazon are currently on the priority list); relating pages to one another (you could quickly check out why <a href="http://www.knowyourtrend.com/trends/orlando-bloom" title="KnowYourTrend: News, Video, Photos and Tweets about Orlando Bloom">Orlando Bloom</a> is trending, discover his wife <a href="http://www.knowyourtrend.com/trends/miranda-kerr" title="KnowYourTrend: News, Video, Photos and Tweets about Miranda Kerr">Miranda Kerr</a> just went into labor and go check out her page as well); among various other ideas.</p>
<p>Overall, it&#8217;s been a fun little diversion from my main project right now, <a href="http://www.aftermil.com/" title="AfterMil: Discover your post-military career">AfterMil</a>, that (<em>runs and looks at repository</em>) only took 48 hours to turn around from concept to deployment.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.michaelwales.com/2011/01/fun-with-apis-knowyourtrend-com/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2010 Wrap-Up, Goals for 2011</title>
		<link>http://www.michaelwales.com/2011/01/2010-wrap-up-goals-for-2011/</link>
		<comments>http://www.michaelwales.com/2011/01/2010-wrap-up-goals-for-2011/#comments</comments>
		<pubDate>Sun, 02 Jan 2011 03:04:58 +0000</pubDate>
		<dc:creator>Michael Wales</dc:creator>
				<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://www.michaelwales.com/?p=218</guid>
		<description><![CDATA[Inspired by Phil Sturgeon&#8217;s own Year in Review, I thought it would be good to reflect back on 2010 and set some goals for 2011. 2010, in general, was a pretty rough year &#8211; a lot of downs and the few ups that came around were merely effects of attempting to mitigate those downs. I&#8217;m [...]]]></description>
			<content:encoded><![CDATA[<p>Inspired by Phil Sturgeon&#8217;s own <a href="http://philsturgeon.co.uk/news/2010/12/2010-for-phil-sturgeon-year-in-review" title="Phil Sturgeon: Year in Review">Year in Review</a>, I thought it would be good to reflect back on 2010 and set some goals for 2011. 2010, in general, was a pretty rough year &#8211; a lot of downs and the few ups that came around were merely effects of attempting to mitigate those downs. I&#8217;m not going to go into a whole lot of detail, but I sure do hope 2011 shines a bit brighter.</p>
<h3>Personal</h3>
<p>By far the biggest news of the year was my move to San Antonio, TX, in October, after accepting a Senior Associate position with <a href="http://www.kforcegov.com/" title="Kforce Government Solutions">Kforce Government Solutions</a>, working as the Lead Developer on web-based applications for various Department of Defense organizations. Thus far, the attitude of the company, the feel of the city, and the sense of accomplishment I get from my work each and every day has done nothing but confirm this was the right move, at the right time, for me. I would be remiss if I did not thank my good friend <a href="http://ericharrison.info/" title="Eric Harrison">Eric Harrison</a> for passing this opportunity on to me &#8211; I truly believe this change will be one of the defining moments of my life that, years down the road, I look back on in amazement at how lucky I truly am.</p>
<p>2010 was also the year in which I took my first bit of vacation and traveled, for nothing other than leisure, as my wife and I celebrated Christmas in Las Vegas. We weren&#8217;t there to visit family, or for business, it was five days of hanging out, having a good time, without a care in the world. Las Vegas is an amazing, albeit expensive, city and I highly recommend the trip &#8211; we&#8217;ll definitely be going back in the near future.</p>
<h3>Technology &#038; Programming</h3>
<p>With a <a href="http://www.netflix.com" title="Netflix">Netflix</a> subscription and a <a href="http://www.dlink.com/boxee/" title="Boxee Box">Boxee Box</a>, we have finally completely abandoned cable/satellite providers and we could not be happier. No more commercials, no more paying for 300 channels when we only watch 10 &#8211; it was a much easier transition than I anticipated and I honestly don&#8217;t believe my daughter has noticed any difference. I&#8217;m pretty confident in saying we&#8217;ll never use a standard television provider ever again.</p>
<p>One of my coworkers, while still in Georgia, turned me on to the world of HD (and actually sold me my first surround sound system). As I pursued an &#8220;out with the old, in with the new&#8221; refurnishing of my living room I upgraded from a DLP to an LCD &#8211; we couldn&#8217;t be happier with the picture and sound quality and I believe I&#8217;ve found a fun little hobby to pursue outside of programming.</p>
<p>At the beginning of the year I was working on the CodeIgniter Cookbook, for Packt Publishing. Ultimately, the timeline just bottomed out due to various personal issues &#8211; it just wasn&#8217;t the right time for me to write a book.</p>
<p>2010 was a year of stagnation in the programming department, where the majority of my work involved PHP or Python and few of my personal projects garnered my interest long enough to even warrant a mention here. I did finally wrap my head around distributed version control (DVCS) and made the transition from Subversion to <a href="http://mercurial.selenic.com/" title="Mercurial">Mercurial</a>. Since that transition I&#8217;ve become quite the proponent of DVCS, especially within the enterprise, and spread the good word in various speaking opportunities and consultancy gigs.</p>
<p>Right at the end of the year, one my personal projects really started to take shape and come to a point in which I wanted to dedicate some serious time to it. I launched <a href="http://www.aftermil.com/" title="AfterMil">AfterMil</a>, in beta, days before the turn of the year. AfterMil focuses on delivering relevant civilian career search results to prior-military through the use of a rigid taxonomy system and various ancillary services. The comments and opinions from others after the launch has validated the fact that there is a serious need to assist our veterans, or soon to be veterans, with their career search and I hope AfterMil can provide that assistance in a clean and usable fashion.</p>
<h3>Goals for 2011</h3>
<p>I&#8217;ve been running <a href="http://www.michaelwales.info/" title="MichaelWales.info">MichaelWales.info</a> for awhile now, as kind of a bio/resume site. I&#8217;m wanting to clearly define the relationship between the two domains this year and give the .info a top-to-bottom makeover. I already have some thoughts in my head of the direction I&#8217;d like to take it but it will require the services of a professional photographer, so that will come later on in the year.</p>
<p><a href="http://www.aftermil.com/" title="AfterMil">AfterMil</a> is obviously a solid idea, so I intend to continue forth with it, developing it into the easiest solution for prior-military to land a new career outside of the military. I have quite a few ideas as to how to make that happen (I&#8217;ve been there before, just 2 years ago), it&#8217;s just going to involve a lot of time and effort, not only developing but in partnerships, to really achieve my vision.</p>
<p>I truly believe the mobile platform has yet to take-off and believe 2011 will be the year in which everyone has a smart-phone. I don&#8217;t necessarily want to focus on development towards a specific OS (Android, iOS, etc), as I believe they suffer from a &#8220;walled garden&#8221; syndrome, but I will continue to experiment with and develop using HTML5-based technologies. By focusing on a cross-platform standard, like HTML5, I can not only further my web development skillset and marketability but still reach out and touch virtually every platform available.</p>
<p>I definitely want to continue travelling, for fun and leisure, and have my eyes set on Europe for our next big trip. If I could get a trip to Europe and one other vacation under my belt during 2011 I would be extremely happy. Despite all my world travels, thanks to Uncle Sam, I just don&#8217;t feel as if I&#8217;ve really been out there and seen much of anything &#8211; there are so many things I want to do, I just need to go do them.</p>
<p>Ultimately, I think that is my biggest goal for 2011: just do it. I&#8217;ve been a planner/analyzer for as long as I can remember, very rarely doing things on a whim. Yet, when I look back at 2010 some of the best moments where planned/executed on a whim, with little to no planning involved. In 2011, if I get an idea or a wild hair up my ass, I&#8217;m just going to go for it. Life is short and sitting around counting my rupees isn&#8217;t going to do any good in allowing me to enjoy my life &#8211; live for the moment.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.michaelwales.com/2011/01/2010-wrap-up-goals-for-2011/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>CodeIgniter Presentations</title>
		<link>http://www.michaelwales.com/2010/12/codeigniter-presentations/</link>
		<comments>http://www.michaelwales.com/2010/12/codeigniter-presentations/#comments</comments>
		<pubDate>Tue, 07 Dec 2010 07:16:54 +0000</pubDate>
		<dc:creator>Michael Wales</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Mercurial]]></category>

		<guid isPermaLink="false">http://www.michaelwales.com/?p=208</guid>
		<description><![CDATA[Some would call me crazy, but I love building presentations and speaking to others &#8211; especially in regards to subjects I care about. I recently had a reason to start building a deck discussing the benefits of version control systems, specifically distributed version control and Mercurial. I wanted to gather some non-biased opinions about the [...]]]></description>
			<content:encoded><![CDATA[<p>Some would call me crazy, but I <em>love</em> building presentations and speaking to others &#8211; especially in regards to subjects I care about. I recently had a reason to start building a deck discussing the benefits of <a href="http://en.wikipedia.org/wiki/Revision_control" title="Wikipedia: Revision Control">version control systems</a>, specifically <a href="http://en.wikipedia.org/wiki/Distributed_revision_control" title="Wikipedia: Distributed Revision Control">distributed version control</a> and <a href="http://mercurial.selenic.com/" title="Mercurial">Mercurial</a>.</p>
<p>I wanted to gather some non-biased opinions about the current state of the presentation, so I uploaded it to <a href="http://www.slideshare.net/" title="SlideShare">SlideShare</a> and sent out a tweet asking for people&#8217;s thoughts. In doing this, I stumbled across two of my older presentations: two years ago I gave a presentation at <a href="http://www.refreshaugusta.com/" title="RefreshAugusta">RefreshAugusta</a> on <a href="http://www.codeigniter.com/" title="CodeIgniter">CodeIgniter</a> and three years ago I created a presentation discussing why I loved freelancing within the CodeIgniter community so much (if I remember correctly this was at the request of <a href="http://www.ellislab.net/" title="EllisLab">EllisLab</a> but I can&#8217;t really recall).</p>
<p>Although I only have these three presentations to look back on, the contrast and comparisons between them couldn&#8217;t be more apparent. It&#8217;s fun to go back and see where you came from to learn where you have arrived. The first presentation, <a href="http://www.slideshare.net/walesmd/how-codeigniter-made-me-a-freelancer" title="SlideShare: How CodeIgniter Made Me a Freelancer">How CodeIgniter Made Me a Freelancer</a> was nothing more than a wall of text. Although the content itself is pretty solid, and reflective of my opinions of the CodeIgniter not only then but now, this is a horrible presentation to give out in front of people. Luckily, this was never presented publicly. On the other hand, my second presentation <a href="http://www.slideshare.net/walesmd/introduction-to-codeigniter-refreshaugusta-20-may-2009" title="SlideShare: Introduction to CodeIgniter">Introduction to CodeIgniter</a> was presented publicly. There&#8217;s still a lot of text to get through but the overall opinion of the crowd was pretty solid, there&#8217;s enough gimicky fun in there (the CodeIgniter code in the bottom-right of each slide) and some imagery. In fact, you can <a href="http://vimeo.com/4847215" title="Vimeo: RefreshAugusta - Michael Wales - Introduction to CodeIgniter">watch the video of me giving this presentation</a> still thanks to RefreshAugusta and <a href="http://www.vimeo.com/" title="Vimeo">Vimeo</a> and despite looking up at the screen more-so than I should have, I think I did a pretty decent job (plus, I was nervous as all hell).</p>
<p>My latest presentation, <a href="http://www.slideshare.net/walesmd/mercurial-beginners-v1" title="SlideShare: Mercurial - Beginniners (v1)">Mercurial: Beginners (v1)</a> is vastly different than either of the previous two presentations and honestly, I believe it&#8217;s for the better. In this latest presentation I simply tried to convey emotions and concepts with the slide. In building the slide, I already knew what I would be talking about during its presentation, but the nature of the discussion deserves a visual representation to really &#8220;bring it all home&#8221; to the participants.</p>
<p>I&#8217;d love to hear your comments on my most recent presentation (still in development), as well as those in the past, so I&#8217;ve included them all within the post below:</p>
<h4>Mercurial: Beginners (v1)</h4>
<div style="width:425px" id="__ss_6057021"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=hgbeginners-101207001403-phpapp01&#038;rel=0&#038;stripped_title=mercurial-beginners-v1&#038;userName=walesmd" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse6057021" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=hgbeginners-101207001403-phpapp01&#038;rel=0&#038;stripped_title=mercurial-beginners-v1&#038;userName=walesmd" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object></div>
<h4>Introduction to CodeIgniter: RefreshAugusta (May 2009)</h4>
<div style="width:425px" id="__ss_1467565"><object id="__sse1467565" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=reaugustamay-codeigniter-090520194132-phpapp02&#038;stripped_title=introduction-to-codeigniter-refreshaugusta-20-may-2009&#038;userName=walesmd" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse1467565" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=reaugustamay-codeigniter-090520194132-phpapp02&#038;stripped_title=introduction-to-codeigniter-refreshaugusta-20-may-2009&#038;userName=walesmd" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object></div>
<h4>Video &#8211; Introduction to CodeIgniter: RefreshAugusta (May 2009)</h4>
<p><iframe src="http://player.vimeo.com/video/4847215" width="400" height="230" frameborder="0"></iframe></p>
<h4>How CodeIgniter Made Me a Freelancer</h4>
<div style="width:425px" id="__ss_397679"><object id="__sse397679" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=codeigniter-freelance-1210424999823373-8&#038;stripped_title=how-codeigniter-made-me-a-freelancer&#038;userName=walesmd" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse397679" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=codeigniter-freelance-1210424999823373-8&#038;stripped_title=how-codeigniter-made-me-a-freelancer&#038;userName=walesmd" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object></div>
]]></content:encoded>
			<wfw:commentRss>http://www.michaelwales.com/2010/12/codeigniter-presentations/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Development Interview</title>
		<link>http://www.michaelwales.com/2010/11/the-development-interview/</link>
		<comments>http://www.michaelwales.com/2010/11/the-development-interview/#comments</comments>
		<pubDate>Sun, 28 Nov 2010 03:57:13 +0000</pubDate>
		<dc:creator>Michael Wales</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web Standards]]></category>

		<guid isPermaLink="false">http://www.michaelwales.com/?p=194</guid>
		<description><![CDATA[As the Senior Software Engineer on my project, I spend quite a bit of time with the Project Manager reviewing resumes and interviewing applicants. Typically, if a resume is remotely interesting we&#8217;ll conduct a phone interview; and if that phone interview goes well we&#8217;ll send the applicant a Developer&#8217;s Assessment targetted at the Jr/mid-level criteria. [...]]]></description>
			<content:encoded><![CDATA[<p>As the Senior Software Engineer on my project, I spend quite a bit of time with the Project Manager reviewing resumes and interviewing applicants. Typically, if a resume is remotely interesting we&#8217;ll conduct a phone interview; and if that phone interview goes well we&#8217;ll send the applicant a <em>Developer&#8217;s Assessment</em> targetted at the Jr/mid-level criteria. The interview, plus their responses to this assessment, determine whether we continue the interview process and present that individual an offer.</p>
<p>During the interview process I ask a series of questions, but in reality there are only 3 questions I actually care about (the rest is just filler):</p>
<ul>
<li>What made you decide on this career path? Why are you a software engineer?</li>
<li>Every developer has worked on a project that challenged them but in the end amounted in a truly viable and useful product, what was that project for you? What&#8217;s the project, either personal or professional, that is worthy of bragging about?</li>
<li>What are you working on in your spare time? After you clock out and you go home, are you working on a &#8220;pet project&#8221;? Tell me about it.</li>
</ul>
<p>You see, we&#8217;re a small team &#8211; we need passionate people that occupy the &#8220;jack-of-all-trades&#8221; space. We want excellent developers, don&#8217;t get me wrong, but if you can dabble in the client (JavaScript) and design (CSS/xHTML) you are going to shine during our interview process (as opposed to someone with purely server-side experience).</p>
<p>I thought it would be fun to discuss my main interview questions as well as provide the <a href="https://docs.google.com/document/d/1v1pt2CvTzI6jpaWd6xIgHJQsvlnSd2twui_vwrNkdjM/edit?hl=en" title="Jr/Mid-level Software Engineer Developer's Assessment">developer&#8217;s assessment</a> that is sent to all potential hires. Check it out, feel free to post your answers, and let me know what you think!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.michaelwales.com/2010/11/the-development-interview/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Income Tracking &amp; Prediction with Ledgerist</title>
		<link>http://www.michaelwales.com/2010/11/income-tracking-prediction-with-ledgerist/</link>
		<comments>http://www.michaelwales.com/2010/11/income-tracking-prediction-with-ledgerist/#comments</comments>
		<pubDate>Wed, 24 Nov 2010 17:38:13 +0000</pubDate>
		<dc:creator>Michael Wales</dc:creator>
				<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://www.michaelwales.com/?p=188</guid>
		<description><![CDATA[A few years ago there was a real race between Mint and Intuit&#8217;s Quickbooks Online. We all know Mint, with it&#8217;s focus on historical data, budget planning, and seeing where your money is going won the race &#8211; and Intuit eventually bought Mint and closed down Quickbooks Online (well, to the public &#8211; they are [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.michaelwales.com/wp-content/uploads/2010/11/ledgerist.png" alt="Ledgerist" title="Ledgerist" width="320" height="480" class="alignright" />A few years ago there was a real race between <a href="http://www.mint.com/" title="Mint">Mint</a> and Intuit&#8217;s Quickbooks Online. We all know Mint, with it&#8217;s focus on historical data, budget planning, and seeing where your money is going won the race &#8211; and Intuit eventually bought Mint and closed down Quickbooks Online (well, to the public &#8211; they are still selling it to banks as FinanceWorks).</p>
<p>Unfortunately, for me, I was a Quickbooks Online user &#8211; I loved it! It did an excellent job at determining which of my expenses were recurring, it was quick/easy to add transactions to, and with just a glance I could easily determine how much money was going to be left over after the bills were paid. Personally, I&#8217;m much more interested in that number than what percentage of my money is going to restaurants. Don&#8217;t get me wrong, budgeting (and sticking to one is important) but for the most part my purchasing power is determined by that number after the bills are paid and money is placed into savings. My <em>fun</em> money.</p>
<p>I&#8217;ve toyed with the idea of just developing a clone of Quickbooks Online, or at least the transactions grid, and open source it; but, as is usually the case, real life just never afforded me the opportunity to sit and crank one out. I did set aside 15 minutes to build a quick Excel spreadsheet to serve my purposes but it wasn&#8217;t my optimal solution, it felt sloppy. I had to keep track of receipts throughout the day, right-click and insert rows in the correct positions, updating formulas, bleh&#8230; I needed a well-designed mobile solution, and I found one in <a href="http://www.appbrain.com/app/ledgerist/com.vervv.ledgerist_paid" title="AppBrain: Ledgerist">Ledgerist</a> for Android phones (there&#8217;s a <a href="http://www.appbrain.com/app/com.vervv.ledgerist" title="AppBrain: Ledgerist Free">free, ad-supported, version</a> as well).</p>
<p>Ledgerist is very simple to use, it&#8217;s little more than a &#8220;check registry&#8221; you would find in your checkbook, except that it supports multiple account types (including credit) and you don&#8217;t need to carry around a pen. Simply load up each of your accounts, with their starting balance, and then keep on top of them. When you make a withdrawal/deposit, whip out your phone real quick and record it. Every 2-3 days I&#8217;ll sit down at each of my bank&#8217;s websites and run through all of my accounts, checking off in Ledgerist which of the transactions have cleared.</p>
<p>I plan my expenses around paychecks (10th and the 26th of the month). For example, I know every month my rent, car payment, Internet and 2 weeks of childcare will come out my 26th of the month check; likewise, auto insurance, credit card payments and another 2 weeks of childcare will come out of my 10th of the month check.</p>
<p>To manage this with Ledgerist is simple! A day or two before payday, I sit at my computer with my bank&#8217;s website up and the stack of bills that need to be paid. First, I record a deposit for my upcoming paycheck in Ledgerist, then I run through each of the bills scheduling the payment check with my bank and recording the transaction in Ledgerist. Within minutes, all of my bills are paid and I know <em>exactly</em> how much money is left over.</p>
<p>I plan on doing more posts like this &#8211; short pieces on how technology has changed my life and how I am using it to make my life better. Share your tips/tricks within the comments &#8211; how have you made managing your money easier, with the help of technology?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.michaelwales.com/2010/11/income-tracking-prediction-with-ledgerist/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CodeIgniter, The Honeymoon Phase is Over</title>
		<link>http://www.michaelwales.com/2010/11/codeigniter-the-honeymoon-phase-is-over/</link>
		<comments>http://www.michaelwales.com/2010/11/codeigniter-the-honeymoon-phase-is-over/#comments</comments>
		<pubDate>Tue, 23 Nov 2010 18:27:29 +0000</pubDate>
		<dc:creator>Michael Wales</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>

		<guid isPermaLink="false">http://www.michaelwales.com/?p=171</guid>
		<description><![CDATA[A lot of things have been going on within the CodeIgniter community &#8211; well, let&#8217;s rephrase that &#8211; very little has been going on within the CodeIgniter community and this has brought about a lot of change over the course of this month. I&#8217;ve been actively involved in the community for a little over 3.5 [...]]]></description>
			<content:encoded><![CDATA[<p>A lot of things have been going on within the <a href="http://www.codeigniter.com/" title="CodeIgniter">CodeIgniter</a> community &#8211; well, let&#8217;s rephrase that &#8211; <em>very little</em> has been going on within the CodeIgniter community and this has brought about <em>a lot</em> of change over the course of this month. I&#8217;ve been actively involved in the community for a little <a href="http://codeigniter.com/forums/member/48108/" title="CodeIgniter Forums: Michael Wales' Profile">over 3.5 years now</a>, worked with the framework for around 4 and served as <a href="http://codeigniter.com/news/codeigniter_community_chieftain_michael_wales/" title="CodeIgniter News: CodeIgniter Community Chieftain - Michael Wales">EllisLab&#8217;s first Community Chieftain</a> (a program <a href="http://codeigniter.com/news/whats_happening_now/" title="CodeIgniter News: What's Happening Now?">recently cancelled</a>). During this time I&#8217;ve learned a lot, met some excellent people and managed to cause enough of a ruckus that real careers, with real salaries, were just being handed to me. Yet, I look back on this past year and I haven&#8217;t had the faintest bit of interest in the community and it got me questioning, &#8220;Why?&#8221;</p>
<p><strong>It&#8217;s not due to lack of time.</strong> I&#8217;m more readily available now than I was during my military career. Over the past year I&#8217;ve actually managed to get myself more &#8220;connected&#8221; than I&#8217;ve ever been in my life (thank you Android-powered phone) &#8211; I&#8217;m literally on the Internet (actively and passively) 19-20 hours per day. I <em>could</em> count the few hours per day I sleep, but telling you I&#8217;m available 24 hours just kind of gets brushed off as if your boss was telling you his open door policy; 20 hours has meaning/impact.</p>
<p><strong>It&#8217;s not due to lack of use/programming.</strong> In 2009 I was hired by <a href="http://www.gdit.com/" title="General Dynamics Information Technology">General Dynamics IT</a> as a Senior Web Developer and we used CodeIgniter on a few of the applications we built. I now work for <a href="http://www.kforcegov.com/" title="Kforce Government Solutions">Kforce Government Solutions</a> and although not directly using CodeIgniter, a lot of the practices/influences from that framework reflect in the work I do. I still have my personal projects I work on and many of them use CodeIgniter.</p>
<p><strong>It&#8217;s not due to lack of opinion/concern.</strong> Just today there were about 10 of us working together to lay out a roadmap for the new <a href="http://codeigniter.com/news/the_official_codeigniter_community_branch/" title="CodeIgniter News: The Official CodeIgniter Community Branch">CodeIgniter Community Branch</a>, organized by <a href="http://hilsturgeon.co.uk/" title="Phil Sturgeon">Phil Sturgeon</a>. It became apparent very quickly, I still have very strong opinions of the direction CodeIgniter should be headed. There are concepts/ideas that I would love to see CodeIgniter implement, and there are lots of others, although interesting/nice to have I just don&#8217;t agree with being in-line with the framework&#8217;s goals.</p>
<p>I try to think back. When did I actually stop caring about what happened to CodeIgniter? The event that comes to mind was when <a href="http://jamieonsoftware.com/" title="Jamie Rumbelow">Jamie Rumbelow</a> was appointed Community Chieftain. Now, this has nothing to do with Jamie; nor about me no longer being the Community Chieftain. But, rather, it was the events leading up to that transition that put a bad taste in my mouth.</p>
<p>The role of Community Chieftain was not well-thought out, which was understood from the get-go. I approached <a href="http://derekderekderek.com/" title="Derek Jones">Derek Jones</a> telling him I wanted to be more involved than just being a user &#8211; that I had the time and passion to really help out. Derek had a similar concept he had been mulling around in his head so him and I fleshed out the position of Community Chieftain via email over the course of a week or so. It was known from the beginning that the position would be temporary and would primarily focus on forum moderation and working in the bug tracker. Over the course of my time as Community Chieftain I took on some other &#8220;fun&#8221; things, like the CodeIgniter Town Hall video chats, speaking at a few local conferences, and really focusing on the forum posts that didn&#8217;t receive replies. The job was a blast, I loved every minute of it but exhausting.</p>
<p>I no longer have the emails but I would estimate about 6 months before Jamie&#8217;s public announcement as the new Community Chieftain I was hitting a pretty low-point in my personal life. I emailed Derek at this time, explaining a lot of what was going on and informing him I would like to step-down, giving them time to select and announce a replacement. The selection of Jamie happened pretty quickly and then Jamie and I stood by for the announcement&#8230; and waited&#8230; and waited&#8230; and waited.</p>
<p>Now, EllisLab is a for-profit company &#8211; they&#8217;ve been pretty up-front from the start that their profit generating products are the focus (as they should be). This means, historically, CodeIgniter has been given the back-burner for quite awhile. The company didn&#8217;t focus on it much, instead leaving much of the community involvement up to the developers that were passionate about it (<a href="http://www.derekallard.com/" title="Derek Allard">Derek Allard</a> and <a href="http://www.dhorrigan.com/" title="Dan Horrigan">Dan Horrigan</a> specifically, both of which had personal projects built with CodeIgniter). But, I honestly think this one act of delaying the announcement, over and over, is what made me truly realize: <strong>EllisLab simply forgets about the CodeIgniter community, and often</strong>. It&#8217;s not like the announcement of Community Chieftain requires a significant amount of work: a few permissions within the ExpressionEngine control panel that manages codeigniter.com and a 5-minute blog post. No, the only excuse that makes any sense as to why it took so long is, &#8220;Whoops &#8211; I forgot.&#8221; It wasn&#8217;t until I got drunk and went off on a tirade during one of the CI Town Halls (not something I&#8217;m proud of and I personally apologized to all of EllisLab) that anyone knew Jamie was taking over &#8211; Derek then, finally, made the announcement as a measure of damage control.</p>
<p>We all know CodeIgniter was born from ExpressionEngine. The CMS was developed, then EllisLab ripped out the real guts-and-glory, cleaned it off and released it as CodeIgniter. So, when it was announced that ExpressionEngine was going to be rewritten, from the ground up, and based off the CodeIgniter framework us developers were excited. We had come full circle &#8211; we were now an integral part of EllisLab&#8217;s business plan. We were surely going to see more frequent updates rolling down; hell, we may even be able to improve ExpressionEngine &#8211; make it more efficient &#8211; and help out EllisLab with our volunteer work within the framework!</p>
<p>But, in our excitement we forgot one key thing: <strong>EllisLab simply forgets about the CodeIgniter community, and often</strong>. By being rolled into ExpressionEngine now, we have lost our identity. Whereas before, the framework had grown, evolved on its own and was vastly different than the precursor work within ExpressionEngine; now, we are one in the same. Rarely can you respond to, or resolve, an ExpressionEngine issue without involving the underlying framework? Do you duplicate effort now and involve both communities?</p>
<p>From a workload, source management view, rewriting ExpressionEngine on CodeIgniter simply made sense. The <em>work</em> can be completed in one location and it affects both codebases. But, from a community management standpoint, it does nothing to decrease the workload &#8211; in an odd twist, it actually doubles the workload by not changing the workload at all (thanks to duplicate effort). If the CodeIgniter community wasn&#8217;t around, EllisLab wouldn&#8217;t be tackling repetitive community tasks &#8211; &#8220;do this&#8221; for ExpressionEngine, okay no go and &#8220;do that again&#8221; for CodeIgniter. Monotony is a beast and that is all we are now, an echo of the ExpressionEngine community; and it is with the release of ExpressionEngine 2, that we see the beginning of the end for the CodeIgniter community.</p>
<p>I won&#8217;t go into the multitude of ways the CodeIgniter community is being ignored, there are numerous posts that explain it in more detail than I ever could (particularly given my extended absence) but I hope I can shed some light as to <em>why</em> it happened. EllisLab simply can not legitimize the time and expense in maintaining a redundant process. Sure, we may see some future releases of CodeIgniter, but only when those releases fall in line with what is best for ExpressionEngine; and this is the reason for the mockery of the Community Fork. EllisLab has decided to create this as an opportunity for the community to shape CodeIgniter, to implement your ideas into the framework and turn it into what you want. In reality, it&#8217;s a farce to give the community the illusion of control, the illusion of change, and the means in which to keep CodeIgniter suppressed so that it may run ExpressionEngine to the best of its ability.</p>
<p>Sadly, the &#8220;key players&#8221; within the CodeIgniter community just don&#8217;t care anymore. Those of us that were the loudest, and dare I say (without sounding like a braggart), most influential have resigned to taking our own little copies of CodeIgniter, tweaked and modified to perfection, into the depths of our own localhost and we&#8217;ll just toil away at our duties silently. Of the names that stick out in my head over the past 4 years (and I am sure I will forget some of you, please forgive me) just look:</p>
<ul>
<li><a href="http://derekallard.com/blog/post/new-challenges/" title="Derek Allard">Derek Allard</a>: The one person on the EllisLab team that <strong>always</strong> cared about CodeIgniter, left EllisLab at the beginning of September.</li>
<li><a href="http://dhorrigan.com/blog/article/the-future-of-me-and-codeigniter" title="Dan Horrigan">Dan Horrigan</a>: Left EllisLab at the end of October, working on FuelPHP</li>
<li><a href="http://philsturgeon.co.uk/news/2010/10/what-happens-next" title="Phil Sturgeon">Phil Sturgeon</a>: He&#8217;s learning Ruby, working on another PHP framework (FuelPHP) with Dan Horrigan, and continuing to develop his CodeIgniter applications for the time being.</li>
<li><a href="http://www.haughin.com/" title="Elliot Haughin">Elliot Haughin</a>: Although still using CodeIgniter in his daily work, the number of tutorials, blog posts and libraries coming from Elliot has diminished greatly. Apart from a post about a CodeIgniter conference, his last post in regards to CodeIgniter was when CodeIgniter 2.0 was announced in March.</li>
<li><a href="http://jamieonsoftware.com/" title="Jamie Rumbelow">Jamie Rumbelow</a>: I personally haven&#8217;t seen/heard much from Jamie in quite sometime and appears as if he successfully taken his CodeIgniter experience into the ExpressionEngine commercial market (nothing wrong with that at all).</li>
</ul>
<p>As for me, I&#8217;m perfectly content with hacking away for Uncle Sam, much of which are heavily JavaScript-based, Rich Internet Applications, for which I wrote my own PHP framework to deal with months ago. My personal projects in development were frozen at CodeIgniter 1.7.2 a long time ago and I don&#8217;t see any reason to upgrade to 2.0. For those projects not yet in development &#8211; I&#8217;m going to be checking out <a href="http://fuelphp.com/" title="FuelPHP">FuelPHP</a>.</p>
<p><strong>Edit:</strong><br />
Let me go ahead and restate, in case this isn&#8217;t obvious &#8211; this is not an attack on EllisLab. I think they are a great company with some amazing people working for them, many of which I consider friends and know more about me than I care to share with the public. But, as stated, they must also remain profitable and promoting the growth of a redundant community is not how they do that.</p>
<p><strong>Edit 2:</strong><br />
Added some clarification to Elliot Haughin&#8217;s current situation involving his work with CodeIgniter &#8211; thanks for the clarification Elliot!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.michaelwales.com/2010/11/codeigniter-the-honeymoon-phase-is-over/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Mirror Django&#8217;s get_object_or_404 in CodeIgniter</title>
		<link>http://www.michaelwales.com/2010/04/mirror-djangos-get_object_or_404-in-codeigniter/</link>
		<comments>http://www.michaelwales.com/2010/04/mirror-djangos-get_object_or_404-in-codeigniter/#comments</comments>
		<pubDate>Fri, 23 Apr 2010 13:52:27 +0000</pubDate>
		<dc:creator>Michael Wales</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.michaelwales.com/?p=147</guid>
		<description><![CDATA[Django has an excellent function that assists in working with models, get_object_or_404. As Python functions tend to, the name of this function is pretty descriptive: we attempt to get an object (from the model) and if we can&#8217;t we throw a 404 error to the user. We can achieve a rather similar effect, and clean [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.djangoproject.com/" title="Django">Django</a> has an excellent function that assists in working with models, <code>get_object_or_404</code>. As <a href="http://www.python.org/" title="Python">Python</a> functions tend to, the name of this function is pretty descriptive: we attempt to get an object (from the model) and if we can&#8217;t we throw a 404 error to the user.</p>
<p>We can achieve a rather similar effect, and clean up our code, within a <a href="http://www.codeigniter.com/" title="CodeIgniter">CodeIgniter</a> controller. In the following example, we&#8217;ll load a model and attempt to retrieve a record, throwing a 404 error if the request fails:</p>
<script type="text/javascript" src="http://gist.github.com/376555.js"></script><noscript><p style="background-color:#ECEFF6;border:1px solid #D4DAE8;padding:5px;text-align:center;">Code snippets use JavaScript, please <a href="http://www.michaelwales.com/2010/04/mirror-djangos-get_object_or_404-in-codeigniter/">view this post</a> at MichaelWales.com or enable JavaScript in your browser.</p></noscript>
<p>The other key component to this is the model itself, ensuring a value interpreted as FALSE is returned when an object can not be found. Here&#8217;s a quick sample:</p>
<script type="text/javascript" src="http://gist.github.com/376544.js"></script><noscript><p style="background-color:#ECEFF6;border:1px solid #D4DAE8;padding:5px;text-align:center;">Code snippets use JavaScript, please <a href="http://www.michaelwales.com/2010/04/mirror-djangos-get_object_or_404-in-codeigniter/">view this post</a> at MichaelWales.com or enable JavaScript in your browser.</p></noscript>
<p><code>NULL</code> (along with <code>FALSE</code>, <code>0</code>, and an empty string) are all interpreted as <code>FALSE</code> by PHP in a loose comparison (<code>==</code> as opposed to <code>===</code>). When assigning a value to a variable using the <code>OR</code> operator, PHP will assign the first value that is interpreted as <code>TRUE</code> or the last value within the condition. Since our model will return <code>NULL</code> if a record is not found, PHP attempts to assign the return value of <code>show_404()</code> to that variable. This function doesn&#8217;t return a value though, instead it send your application&#8217;s <samp>./errors/error_404.php</samp> (with appropriate headers) to the user &#8211; the exact functionality we desire!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.michaelwales.com/2010/04/mirror-djangos-get_object_or_404-in-codeigniter/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Adding a Facebook Like Button to Your Posts</title>
		<link>http://www.michaelwales.com/2010/04/adding-a-facebook-like-button-to-your-posts/</link>
		<comments>http://www.michaelwales.com/2010/04/adding-a-facebook-like-button-to-your-posts/#comments</comments>
		<pubDate>Wed, 21 Apr 2010 19:33:58 +0000</pubDate>
		<dc:creator>Michael Wales</dc:creator>
				<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.michaelwales.com/?p=148</guid>
		<description><![CDATA[Facebook just announced their Facebook Social Plugins, a collection on one-liner tools that allows your users to engage and promote your content using Facebook. One of these &#8220;plugins&#8221; is the infamous Facebook Like button &#8211; which I have added to every post within this blog. Below is the code I used, which is placed within [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.facebook.com/" title="Facebook">Facebook</a> just announced their <a href="http://developers.facebook.com/plugins" title="Facebook Social Plugins">Facebook Social Plugins</a>, a collection on one-liner tools that allows your users to engage and promote your content using Facebook. One of these &#8220;plugins&#8221; is the infamous Facebook Like button &#8211; which I have added to every post within this blog.</p>
<p>Below is the code I used, which is placed within the post loop. Most of this is the standard code you get directly from Facebook, the relevant portion to look at is the <code>urlencode(the_permalink())</code> bit as well as some of the styling (which will differ based on your own theme).</p>
<script type="text/javascript" src="http://gist.github.com/374296.js"></script><noscript><p style="background-color:#ECEFF6;border:1px solid #D4DAE8;padding:5px;text-align:center;">Code snippets use JavaScript, please <a href="http://www.michaelwales.com/2010/04/adding-a-facebook-like-button-to-your-posts/">view this post</a> at MichaelWales.com or enable JavaScript in your browser.</p></noscript>
]]></content:encoded>
			<wfw:commentRss>http://www.michaelwales.com/2010/04/adding-a-facebook-like-button-to-your-posts/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
<!-- This Quick Cache file was built for (  www.michaelwales.com/feed/ ) in 0.27934 seconds, on Feb 4th, 2012 at 1:51 am UTC. -->
<!-- This Quick Cache file will automatically expire ( and be re-built automatically ) on Feb 4th, 2012 at 2:51 am UTC -->
