<?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>A blog about productivity for the Internet entrepreneur.&#187; Programming</title>
	<atom:link href="http://www.thinkingserious.com/category/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.thinkingserious.com</link>
	<description>My goal is to help you focus on your passions by reducing or eliminating the time needed to maintain your life.</description>
	<lastBuildDate>Sun, 08 Jan 2012 22:58:26 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Learn Programming in Ten Years</title>
		<link>http://www.thinkingserious.com/2012/01/06/learn-programming-in-ten-years/</link>
		<comments>http://www.thinkingserious.com/2012/01/06/learn-programming-in-ten-years/#comments</comments>
		<pubDate>Fri, 06 Jan 2012 16:55:47 +0000</pubDate>
		<dc:creator>Elmer Thomas</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.thinkingserious.com/?p=670</guid>
		<description><![CDATA[Recommended reading for anyone interested in learning to program or enhancing their programming skills. &#8220;Talk to other programmers; read other programs. This is more important than any book or training course.&#8221;]]></description>
			<content:encoded><![CDATA[<p>Recommended reading for anyone interested in learning to program or enhancing their programming skills.</p>
<blockquote><p><a href="http://norvig.com/21-days.html">&#8220;Talk to other programmers; read other programs. This is more important than any book or training course.&#8221;</a></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.thinkingserious.com/2012/01/06/learn-programming-in-ten-years/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using Custom HTML with Flash or Javascript in Joomla without Modules</title>
		<link>http://www.thinkingserious.com/2010/04/12/using-custom-html-with-flash-or-javascript-in-joomla-without-modules/</link>
		<comments>http://www.thinkingserious.com/2010/04/12/using-custom-html-with-flash-or-javascript-in-joomla-without-modules/#comments</comments>
		<pubDate>Tue, 13 Apr 2010 01:19:02 +0000</pubDate>
		<dc:creator>Elmer Thomas</dc:creator>
				<category><![CDATA[Joomla]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://www.thinkingserious.com/?p=619</guid>
		<description><![CDATA[When you add custom HTML with Flash or Javascript using the WYSIWYG editor, Joomla will modify your code, rendering your code useless. Instead of using one of these modules, here is a simple hack using the built in Category feature. Login to your administration panel: www.yourdomain.com/administrator Click on the Category Manager and add a new category [...]]]></description>
			<content:encoded><![CDATA[<p>When you add custom HTML with Flash or Javascript using the WYSIWYG editor, Joomla will modify your code, rendering your code useless. Instead of using one of <a href="http://extensions.joomla.org/extensions/edition/custom-code-in-content">these modules</a>, here is a simple hack using the built in Category feature.</p>
<p><span id="more-619"></span></p>
<ol>
<li>Login to your administration panel: www.yourdomain.com/administrator</li>
<li>Click on the <em>Category Manager</em> and add a new category</li>
<li>Place your code in the description field</li>
<li>Go to the <em>Menu Manager</em> and add an item</li>
<li>Choose <em>Articles-&gt;Category-&gt;Category Blog Layout</em></li>
<li>Fill in the <em>Title</em> and then under <em>Parameters (Basic)</em> select the category you created in steps 2 and 3</li>
</ol>
<p>Joomla will now display the custom HTML you placed in the description field without changing the code.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thinkingserious.com/2010/04/12/using-custom-html-with-flash-or-javascript-in-joomla-without-modules/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Automatically Login a User After Registration Using sfGuardPlugin in Symfony</title>
		<link>http://www.thinkingserious.com/2010/04/05/automatically-login-a-user-after-registration-using-sfguardplugin-in-symfony/</link>
		<comments>http://www.thinkingserious.com/2010/04/05/automatically-login-a-user-after-registration-using-sfguardplugin-in-symfony/#comments</comments>
		<pubDate>Mon, 05 Apr 2010 12:00:54 +0000</pubDate>
		<dc:creator>Elmer Thomas</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://www.thinkingserious.com/?p=603</guid>
		<description><![CDATA[When you want a user to be automatically logged in after they register, you can use the following code where you have access to the sfGuardUser module: $this->getContext()->getUser()->signIn($user, true);]]></description>
			<content:encoded><![CDATA[<p>When you want a user to be automatically logged in after they register, you can use the following code where you have access to the sfGuardUser module:</p>
<p><code>$this->getContext()->getUser()->signIn($user, true);</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.thinkingserious.com/2010/04/05/automatically-login-a-user-after-registration-using-sfguardplugin-in-symfony/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Using Spaces to Improve Productivity on the Mac</title>
		<link>http://www.thinkingserious.com/2009/08/20/using-spaces-to-improve-productivity-on-the-mac/</link>
		<comments>http://www.thinkingserious.com/2009/08/20/using-spaces-to-improve-productivity-on-the-mac/#comments</comments>
		<pubDate>Thu, 20 Aug 2009 18:58:44 +0000</pubDate>
		<dc:creator>Elmer Thomas</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.thinkingserious.com/?p=547</guid>
		<description><![CDATA[One of the most powerful tools on the Mac in terms of day to day productivity boost, has been Spaces. I have been using this feature in Linux for years, but never quite took advantage of it in Windows. Here is how I currently use it. I would love to here your tips and tricks [...]]]></description>
			<content:encoded><![CDATA[<p>One of the most powerful tools on the <a href="http://twit.tv/mbp2">Mac</a> in terms of day to day productivity boost, has been <a href="http://en.wikipedia.org/wiki/Spaces_(software)">Spaces</a>. I have been using this feature in Linux for years, but never quite took advantage of it in Windows. Here is how I currently use it. I would love to here your tips and tricks regarding productivity on the Mac.<br />
<span id="more-547"></span><br />
<a href="http://localhost/thinkingserious/wp-content/uploads/2009/08/leopard-spaces.jpg"><img src="http://www.thinkingserious.com/wp-content/uploads/2009/08/leopard-spaces-300x173.jpg" alt="leopard-spaces" title="leopard-spaces" width="300" height="173" class="aligncenter size-medium wp-image-548" style="margin-bottom:8px" /></a></p>
<p>Currently I have 9 &#8220;spaces&#8221; set up with the following start up configuration:</p>
<p>The spaces correspond to a grid which is laid out as follows:</p>
<p>1 2 3<br />
4 5 6<br />
7 8 9</p>
<p><strong>Space 1:</strong> I keep an open instance of <a href="http://www.apple.com/macosx/what-is-macosx/dock-and-finder.html">Finder</a> here.</p>
<p><strong>Space 2:</strong> Timesheet, for which I currently use <a href="http://www.apple.com/iwork/numbers/">Numbers</a>. </p>
<p><strong>Space 3:</strong> A open instance of <a href="http://support.apple.com/kb/HT2523">TextEdit</a> where I keep ongoing notes.</p>
<p><strong>Space 4:</strong> <a href="http://www.apple.com/itunes/">iTunes</a> resides here, where I usually keep some classical music running when I need to be focused, and podcasts when I&#8217;m doing repetitive work.</p>
<p><strong>Space 5:</strong> Here is where I spend most of my time with <a href="http://www.apple.com/safari/">Safari</a>, since I use many <a href="http://pminthecloud.com/">cloud based tools</a>.</p>
<p><strong>Space 6:</strong> <a href="http://www.omnigroup.com/applications/omnifocus/">Omnifocus</a> resides here, which I use for personal, <a href="http://www.thinkingserious.com/category/gtd/">GTD</a> based, task management.</p>
<p><strong>Space 7:</strong> Empty. I usually use this space when I need to do screen sharing and need a clean workspace.</p>
<p><strong>Space 8:</strong> Here is where I keep my IM clients open. Namely <a href="http://www.skype.com/">Skype</a> and <a href="http://www.atebits.com/tweetie-mac/">Tweetie</a>.</p>
<p><strong>Space 9:</strong> Empty. I use this space to work in applications like <a href="http://www.adobe.com/products/photoshop/photoshop/">PhotoShop</a> where I need to focus on one particular project/task.</p>
<p>I use command + arrows to navigate the spaces. I operate from space 5, so I put the most used items in spaces 2,4,6 and 8 for once click easy access.</p>
<p>Do you use Spaces? What other Mac tools do you use to stay productive?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thinkingserious.com/2009/08/20/using-spaces-to-improve-productivity-on-the-mac/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Windows 7 Beta Download in Two Clicks</title>
		<link>http://www.thinkingserious.com/2009/01/10/windows-7-beta-download-in-two-clicks/</link>
		<comments>http://www.thinkingserious.com/2009/01/10/windows-7-beta-download-in-two-clicks/#comments</comments>
		<pubDate>Sat, 10 Jan 2009 20:21:00 +0000</pubDate>
		<dc:creator>Elmer Thomas</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Windows 7]]></category>

		<guid isPermaLink="false">http://www.thinkingserious.com/?p=322</guid>
		<description><![CDATA[Login to your Passport account and do not close the page. 32 Bit Windows 7 Click 1: Copy and paste the key found here. Click 2: Download here. 64 Bit Windows 7 Click 1: Copy and paste the key found here. Click 2: Download here. Thanks LifeHacker!]]></description>
			<content:encoded><![CDATA[<p><a href="https://profile.microsoft.com/RegSysProfileCenter/InfoDefault.aspx" target="_blank">Login to your Passport account</a> and do not close the page.</p>
<p><strong>32 Bit Windows 7</strong><br />
Click 1: Copy and paste the key found <a href="https://www.microsoft.com/betaexperience/productkeys/win7-32/enus/default.aspx" target="_blank">here</a>.<br />
Click 2: Download <a href="http://download.microsoft.com/download/6/3/3/633118BD-6C3D-45A4-B985-F0FDFFE1B021/EN/7000.0.081212-1400_client_en-us_Ultimate-GB1CULFRE_EN_DVD.iso" target="_blank">here</a>.</p>
<p><strong>64 Bit Windows 7</strong><br />
Click 1: Copy and paste the key found <a href="https://www.microsoft.com/betaexperience/productkeys/win7-64/enus/default.aspx" target="_blank">here</a>.<br />
Click 2: Download <a href="http://download.microsoft.com/download/6/3/3/633118BD-6C3D-45A4-B985-F0FDFFE1B021/EN/7000.0.081212-1400_client_en-us_Ultimate-GB1CULXFRE_EN_DVD.ISO">here</a>.</p>
<p>Thanks <a href="http://lifehacker.com/5128018/windows-7-product-keys-available++for-some" target="_blank">LifeHacker</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thinkingserious.com/2009/01/10/windows-7-beta-download-in-two-clicks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Running Django on Windows Vista Ultimate 64 bit</title>
		<link>http://www.thinkingserious.com/2008/08/05/running-django-on-windows-vista-ultimate-64-bit/</link>
		<comments>http://www.thinkingserious.com/2008/08/05/running-django-on-windows-vista-ultimate-64-bit/#comments</comments>
		<pubDate>Wed, 06 Aug 2008 06:13:32 +0000</pubDate>
		<dc:creator>Elmer Thomas</dc:creator>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.thinkingserious.com/?p=154</guid>
		<description><![CDATA[If you are interested in creating a local development environment for Django and you are running Windows Vista Ultimate 64 bit, this guide is for you! Following are step by step instructions. 1. Install Python Download: http://www.python.org/download/ Install the following: &#8220;Python 2.5.2 Windows installer&#8221; 2. Install Python Extensions for Windows Download: http://sourceforge.net/projects/pywin32/ Install the following: [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://localhost/thinkingserious/wp-content/uploads/2008/08/hdr_logo.gif"><img class="alignleft size-full wp-image-169" title="Django Logo" src="http://localhost/thinkingserious/wp-content/uploads/2008/08/hdr_logo.gif" alt="" width="117" height="41" /></a>If you are interested in creating a local development environment for <a href="http://www.djangoproject.com/" target="_blank">Django</a> and you are running Windows Vista Ultimate 64 bit, this guide is for you! Following are step by step instructions.</p>
<p><span id="more-154"></span></p>
<h2>1. Install Python</h2>
<p>Download: <a href="http://www.python.org/download/" target="_blank">http://www.python.org/download/</a><br />
Install the following: &#8220;Python 2.5.2 Windows installer&#8221;</p>
<h2>2. Install Python Extensions for Windows</h2>
<p>Download: <a href="http://sourceforge.net/projects/pywin32/" target="_blank">http://sourceforge.net/projects/pywin32/</a><br />
Install the following: &#8220;pywin32-211.win32-py2.5.exe&#8221;</p>
<h2>3. Update Skype ( if you are running Skype )</h2>
<p>Change the following option so that your Skype install does not use port 80, which will conflict with your Apache server installation.</p>
<p><a href="http://localhost/thinkingserious/wp-content/uploads/2008/08/skype-port80-fix.png"><img class="alignnone size-thumbnail wp-image-171" title="Skype Port 80 Fix" src="http://www.thinkingserious.com/wp-content/uploads/2008/08/skype-port80-fix-150x150.png" alt="" width="150" height="150" /></a></p>
<h2>4. Install Apache HTTP Server</h2>
<p>Download: <a href="http://httpd.apache.org/download.cgi" target="_blank">http://httpd.apache.org/download.cgi</a><br />
Install the following: &#8220;Win32 Binary including OpenSSL 0.9.8h (MSI Installer)&#8221;</p>
<h2>5. Install mod_python</h2>
<p>Download: http://www.mirrorgeek.com/apache.org/httpd/modpython/win/3.3.1/<br />
Install the following ( Note that you need to run this as administrator ): &#8220;mod_python-3.3.1.win32-py2.5-Apache2.2.exe&#8221;</p>
<h2>6. Install PostgreSQL</h2>
<p>Download: <a href="http://www.postgresql.org/ftp/binary/v8.3.3/win32/" target="_blank">http://www.postgresql.org/ftp/binary/v8.3.3/win32/</a><br />
Install the following: &#8220;postgresql-8.3.3-1.zip&#8221;</p>
<h2>7. Install psycopg</h2>
<p>Download: <a href="http://stickpeople.com/projects/python/win-psycopg/" target="_blank">http://stickpeople.com/projects/python/win-psycopg/</a><br />
Install the following ( Note that you need to run this as administrator ): &#8220;psycopg2-2.0.7.win32-py2.5-pg8.3.1-release.exe&#8221;</p>
<h2>8. Download Django</h2>
<p>Download: http://www.djangoproject.com/download/<br />
Install the following: &#8220;Django-0.96.2.tar.gz&#8221;</p>
<p>Open setup.py  and change line 24 from<br />
<em>package = dirpath[len_root_dir:].lstrip(&#8216;/&#8217;).replace(&#8216;/&#8217;, &#8216;.&#8217;)</em><br />
to<br />
<em>package = dirpath[len_root_dir:].lstrip(&#8221;).replace(&#8221;, &#8216;.&#8217;)</em></p>
<p>Start up a command shell with administrator privileges and run the command &#8220;setup.py install&#8221; in a command prompt.</p>
<h2>8. Test</h2>
<p>Test by running &#8220;import django&#8221; from the Python interpreter, if you have no errors you were successful.</p>
<p>Try out <a href="http://www.djangoproject.com/documentation/tutorial01/" target="_blank">this tutorial</a> to get started with your first project.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thinkingserious.com/2008/08/05/running-django-on-windows-vista-ultimate-64-bit/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Propeller.com and Rapid Application Development</title>
		<link>http://www.thinkingserious.com/2008/07/23/propellercom-and-rapid-application-development/</link>
		<comments>http://www.thinkingserious.com/2008/07/23/propellercom-and-rapid-application-development/#comments</comments>
		<pubDate>Thu, 24 Jul 2008 01:46:24 +0000</pubDate>
		<dc:creator>Elmer Thomas</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Social Networking]]></category>
		<category><![CDATA[aol]]></category>
		<category><![CDATA[propeller]]></category>
		<category><![CDATA[rad]]></category>

		<guid isPermaLink="false">http://www.thinkingserious.com/?p=132</guid>
		<description><![CDATA[It appears as though Propeller.com has fallen victim of a bad practice most early web designers have experienced early in their careers. When you don&#8217;t iterate early and often with the input of your stakeholders you are taking a big risk that a majority of your stakeholders will hate your work. Gone are the days [...]]]></description>
			<content:encoded><![CDATA[<p>It appears as though <a href="http://www.propeller.com" target="_blank">Propeller.com</a> has <a href="http://www.propeller.com/story/2008/07/23/propeller-fail/" target="_blank">fallen victim</a> of a bad practice most early web designers have experienced early in their careers.</p>
<p>When you don&#8217;t iterate early and often with the input of your stakeholders you are taking a big risk that a majority of your stakeholders will hate your work.</p>
<p><span id="more-132"></span></p>
<p><a href="http://localhost/thinkingserious/wp-content/uploads/2008/07/propeller-screenshot.png"><img class="alignnone size-full wp-image-133" title="Propeller Screenshot" src="http://localhost/thinkingserious/wp-content/uploads/2008/07/propeller-screenshot.png" alt="" width="500" height="346" /></a></p>
<p>Gone are the days when you hire someone to create a website for you, then dis-engage for a few months, to return to a finished product&#8230; take it or leave it.</p>
<p>I understand that when your stakeholders number in the ten of thousands this type of interaction could be very difficult; however, I propose the following solution.</p>
<p>I propose that a core set of stakeholders (ideally an odd number like three or five) make all final decisions. These stakeholders should have an intimate understanding of the community and ideally should contain a few key members of the community.</p>
<p>Then utilize a <a href="http://www.digg.com" target="_blank">Digg-like</a> voting mechanism, like <a href="http://crowdsound.com/" target="_blank">CrowdSound.com</a> to get feedback from the users.</p>
<p>Combine this approach with a <a href="http://en.wikipedia.org/wiki/Rapid_application_development" target="_blank">Rapid Application Development</a> process to help produce a website that fulfills the needs of the community.</p>
<p>Today, sites like <a href="http://www.logobids.com" target="_blank">LogoBids.com</a> (I have access to the demo) make this type of collaboration for the graphics design much easier and affordable.</p>
<p>Once there is a majority agreement on the design, wire-frames and layout, its then a matter of execution.</p>
<p>While not perfect, I believe using such a method would have yielded much better results. I think it would be exciting to build the next (or upgraded) social networking community using this strategy.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thinkingserious.com/2008/07/23/propellercom-and-rapid-application-development/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Using Python to Grab Images From a Web Site</title>
		<link>http://www.thinkingserious.com/2008/04/30/using-python-to-grab-images-from-a-web-site/</link>
		<comments>http://www.thinkingserious.com/2008/04/30/using-python-to-grab-images-from-a-web-site/#comments</comments>
		<pubDate>Thu, 01 May 2008 04:36:57 +0000</pubDate>
		<dc:creator>Elmer Thomas</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.thinkingserious.com/2008/04/30/using-python-to-grab-images-from-a-web-site/</guid>
		<description><![CDATA[I recently started a contest for a logo design (The link is not to my contest, just an example). Soon I had over 60 entries and I needed an easy way to present these logos to the client in a Power Point presentation. It takes two clicks to get to each image&#8230; no good. Thus [...]]]></description>
			<content:encoded><![CDATA[<p>I recently started a <a href="http://99designs.com/contests/6999" target="_blank">contest for a logo design</a> (The link is not to my contest, just an example). Soon I had over 60 entries and I needed an easy way to present these logos to the client in a Power Point presentation. It takes two clicks to get to each image&#8230; no good. Thus the following script was created. It should serve as a good tutorial on how to use <a href="http://www.python.org/" target="_blank">Python</a> to do some basic web interactions.<span id="more-80"></span></p>
<pre>#!/usr/bin/python
import urllib
import re

# Change the variables "contest" and "path"</pre>
<pre>def retrieveImage( contest, path, name ):
    url = "http://99designs.com/contests/" + contest + "/entries/" + name
    urllib.urlretrieve( url, path + name )

if __name__ == '__main__':
    contest = "6999" #The 99designs content number from which you want to extract images
    path = "../tmp/" #The path where you want to store the downloaded images
    url = urllib.urlopen( "http://99designs.com/contests/" + contest + "/feed" )
    url_string = url.read()
    p = re.compile( 'd*.large.w{3,3}' )
    iterator = p.finditer( url_string )
       for match in iterator:
           retrieveImage( contest, path , match.group() )</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.thinkingserious.com/2008/04/30/using-python-to-grab-images-from-a-web-site/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Getting Real with 37 Signals</title>
		<link>http://www.thinkingserious.com/2008/04/14/getting-real-with-37-signals/</link>
		<comments>http://www.thinkingserious.com/2008/04/14/getting-real-with-37-signals/#comments</comments>
		<pubDate>Mon, 14 Apr 2008 16:45:53 +0000</pubDate>
		<dc:creator>Elmer Thomas</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Life Hacks]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.thinkingserious.com/2008/04/14/getting-real-with-37-signals/</guid>
		<description><![CDATA[There are two books I recommend to any startup: The Art of the Start: The Time-Tested, Battle-Hardened Guide for Anyone Starting Anything and Getting Real. I created a guide based on the former, and now I have created a mind map based on the latter. I suggest that you use the mind map for review [...]]]></description>
			<content:encoded><![CDATA[<p>There are two books I recommend to any startup: <a href="http://www.amazon.com/gp/product/1591840562?ie=UTF8&amp;tag=thinkingscom-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=1591840562">The Art of the Start: The Time-Tested, Battle-Hardened Guide for Anyone Starting Anything</a><img src="http://www.assoc-amazon.com/e/ir?t=thinkingscom-20&amp;l=as2&amp;o=1&amp;a=1591840562" style="border: medium none  ! important; margin: 0px ! important" width="1" border="0" height="1" /> and <a href="http://gettingreal.37signals.com/toc.php" target="_blank">Getting Real</a>. I created <a href="http://www.docstoc.com/docs/283154/Starting-a-Business-Art-of-the-Start-Style" target="_blank">a guide</a> based on the former, and now I have created a mind map based on the latter. I suggest that you use the mind map for review or to gain an overview of the key points. You can download the mind map here (it is in the <a href="http://freemind.sourceforge.net/wiki/index.php/Main_Page" target="_blank">FreeMind</a> format): <a href="http://www.thinkingserious.com/wp-content/uploads/2008/04/getting_real.mm" title="Getting Real Mind Map">Getting Real Mind Map. </a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.thinkingserious.com/2008/04/14/getting-real-with-37-signals/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The 8 Essential Tools for Programmers</title>
		<link>http://www.thinkingserious.com/2008/04/05/the-8-essential-tools-for-programmers/</link>
		<comments>http://www.thinkingserious.com/2008/04/05/the-8-essential-tools-for-programmers/#comments</comments>
		<pubDate>Sat, 05 Apr 2008 21:29:51 +0000</pubDate>
		<dc:creator>Elmer Thomas</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.thinkingserious.com/2008/04/05/the-8-essential-tools-for-programmers/</guid>
		<description><![CDATA[As an undergraduate, one of my favorite classes was Software Engineering. It was in that class, I learned about applying Computer Science theories to the &#8220;real world&#8221;. We learned about things such as CVS, Cron, Python, UML, etc&#8230; One of the books that was recommended reading, and remains in my library, was The Pragmatic Programmer: [...]]]></description>
			<content:encoded><![CDATA[<p>As an <a href="http://www1.cs.ucr.edu/index.php" target="_blank">undergraduate</a>, one of my favorite classes was <a href="http://en.wikipedia.org/wiki/Software_engineering" target="_blank">Software Engineering</a>. It was in that class, I learned about applying <a href="http://en.wikipedia.org/wiki/Computer_science" target="_blank">Computer Science</a> theories to the &#8220;real world&#8221;. We learned about things such as <a href="http://en.wikipedia.org/wiki/Concurrent_Versions_System" target="_blank">CVS</a>, <a href="http://en.wikipedia.org/wiki/Cron" target="_blank">Cron</a>, <a href="http://en.wikipedia.org/wiki/Python_(programming_language)" target="_blank">Python</a>, <a href="http://www.uml.org/" target="_blank">UML</a>, etc&#8230;</p>
<p>One of the books that was recommended reading, and remains in my library, was <a href="http://www.amazon.com/gp/product/020161622X?ie=UTF8&amp;tag=thinkingscom-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=020161622X">The Pragmatic Programmer: From Journeyman to Master</a><img src="http://www.assoc-amazon.com/e/ir?t=thinkingscom-20&amp;l=as2&amp;o=1&amp;a=020161622X" style="border: medium none  ! important; margin: 0px ! important" border="0" height="1" width="1" />. Chapter 3 talks about the basic tools needed for any programmer. Here is a review and description of the tools I use and consider fundamental.<span id="more-66"></span></p>
<p><strong>1. Plain Text</strong></p>
<p>There are many advantages to using plain text as the format of choice for programming. The keys for me are: readability, easy manipulation and portability.</p>
<p>I prefer to use <a href="http://en.wikipedia.org/wiki/XML" target="_blank">XML</a> based formats (<a href="http://www.w3.org/TR/xhtml1/" target="_blank">XHTML</a> being the primary format) for much of what I do, since primarily I program web applications. I also use <a href="http://www.yaml.org/" target="_blank">YAML</a> for configuration files, mainly using <a href="http://www.symfony-project.org/" target="_blank">Symfony</a>.</p>
<p><strong>2. Shell</strong></p>
<p>My development environment of choice has always been within a <a href="http://en.wikipedia.org/wiki/Linux" target="_blank">Linux</a> distribution. Starting with <a href="http://en.wikipedia.org/wiki/Red_Hat" target="_blank">Red Hat</a>, then <a href="http://en.wikipedia.org/wiki/Gentoo_Linux" target="_blank">Gentoo</a> and now <a href="http://en.wikipedia.org/wiki/Ubuntu_(Linux_distribution)" target="_blank">Ubuntu</a>. The <a href="http://en.wikipedia.org/wiki/Bash" target="_blank">Bash Shell</a> has been my constant companion in the terminal in each distribution. When I must work on a Windows machine, then it&#8217;s Bash via <a href="http://www.cygwin.com/" target="_blank">Cygwin</a>.</p>
<p>To save countless hours and improve your productivity tremendously, invest some time daily into learning more about how to use the shell. Here are a few resources to get you started:</p>
<ul>
<li><a href="http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html" target="_blank">BASH Programming &#8211; Introduction HOW-TO</a></li>
<li><a href="http://www.math.ucdavis.edu/~zjohnson/doc/Adv-Bash-Scr-HOWTO/" target="_blank">Advanced Bash-Scripting HOWTO</a></li>
<li><a href="http://www.ibm.com/developerworks/library/l-bash.html" target="_blank">Bash by example, Part 1</a></li>
<li><a href="http://www.ibm.com/developerworks/library/l-bash2.html" target="_blank">Bash by example, Part 2</a></li>
</ul>
<p><strong>3. Editor</strong></p>
<p>I started with <a href="http://en.wikipedia.org/wiki/Emacs" target="_blank">Emacs</a>, then converted to the darkside (<a href="http://en.wikipedia.org/wiki/Vi" target="_blank">Vi</a>). I now use the <a href="http://en.wikipedia.org/wiki/Eclipse_(software)" target="_blank">Eclipse</a> editor mostly. When I&#8217;m living in the terminal it&#8217;s Vi or Vim for me. As with your shell, time spent learning about how to use your editor will yield massive dividends.</p>
<p><strong>4. Source Code Version Control</strong></p>
<p>If you are not using some form of version control, you are seriously living on the edge! I started out using <a href="http://en.wikipedia.org/wiki/Concurrent_Versions_System" target="_blank">CVS</a> (or as one professor said, &#8220;Save Your Ass&#8221;), but then graduated to <a href="http://en.wikipedia.org/wiki/Subversion_(software)" target="_blank">SVN</a>. You will also want to spend consistent time learning how to properly use the version control system.</p>
<p>Another reason text formats are so useful is that changes are easily tracked using version control.</p>
<p><strong>5. Debugging</strong></p>
<p>In my C++ days, <a href="http://sourceware.org/gdb/" target="_blank">GDB</a> saved me many hours of painful bug chasing. Now, working mostly in <a href="http://sourceware.org/gdb/" target="_blank">PHP</a>/<a href="http://en.wikipedia.org/wiki/JavaScript" target="_blank">Javascript</a> environments, I use <a href="https://addons.mozilla.org/en-US/firefox/addon/1843" target="_blank">Firebug</a>, the built in <a href="http://www.symfony-project.org/book/1_0/16-Application-Management-Tools" target="_blank">Symfony tools</a> and <a href="http://xdebug.org/" target="_blank">Xdebug</a>. When in <a href="http://www.python.org/" target="_blank">Python</a>, I just use the <a href="http://docs.python.org/lib/module-pdb.html" target="_blank">Python Debugger</a>.</p>
<p><strong>6. Text Manipulators</strong></p>
<p>Now that you have all those text based files, you need to be able to quickly manipulate them.  You will want to spend some learning about <a href="http://en.wikipedia.org/wiki/Regular_expression" target="_blank">regular expressions</a>. Most of the tools dealing with text manipulation use regular expressions. I prefer to use Python as my tool of choice (<a href="http://en.wikipedia.org/wiki/Perl" target="_blank">sorry Larry</a>). Take the time to study the <a href="http://www.linuxtopia.org/online_books/gnu_linux_tools_guide/text-manipulation-tools.html" target="_blank">tools mentioned here</a>.</p>
<p><strong>7. Code Generators</strong></p>
<p>The code generator I use most often is <a href="http://www.symfony-project.org/book/1_0/14-Generators" target="_blank">the one Symfony provides</a>. Otherwise, I use Python to create scripts, that given certain parameters or configuration files, pre-generates some template code.</p>
<p><strong>8. Testing Framework</strong></p>
<p>I have just started to incorporate unit tests into my projects using <a href="http://www.symfony-project.org/book/1_1/15-Unit-and-Functional-Testing" target="_blank">Lime within Symfony</a>. Before, I would write out the results that were expected by various inputs and run those tests manually. <a href="http://www.iersolutions.com" target="_blank">Our development group</a> is now implementing the &#8220;build the test framework first&#8221; strategy into our <a href="http://en.wikipedia.org/wiki/Agile_software_development" target="_blank">agile methods</a>.</p>
<p>What are your essential tools?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thinkingserious.com/2008/04/05/the-8-essential-tools-for-programmers/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

