<?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>Make Tech Easier&#187; programming</title>
	<atom:link href="http://maketecheasier.com/tag/programming/feed" rel="self" type="application/rss+xml" />
	<link>http://maketecheasier.com</link>
	<description>Uncomplicating the complicated, making life easier</description>
	<lastBuildDate>Sun, 12 Feb 2012 15:58:24 +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>The Beginner Guide to Writing Linux Shell Scripts</title>
		<link>http://maketecheasier.com/write-linux-shell-scripts/2011/06/30</link>
		<comments>http://maketecheasier.com/write-linux-shell-scripts/2011/06/30#comments</comments>
		<pubDate>Thu, 30 Jun 2011 14:58:29 +0000</pubDate>
		<dc:creator>Joshua Price</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://maketecheasier.com/?p=34658</guid>
		<description><![CDATA[For starters &#8211; let&#8217;s clarify that headline. Linux has more than one possible shell, and scripting any of them is a subject that can easily pack a full book. What we&#8217;re going to be doing is covering the basic elements of a bash script. If you don&#8217;t know what shell you&#8217;re using, it&#8217;s probably bash. [...]<p><div style="float:left;margin-bottom:10px"><a href="http://api.tweetmeme.com/share?url=http://maketecheasier.com/write-linux-shell-scripts/2011/06/30&amp;service=bit.ly" target="_blank"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://maketecheasier.com/write-linux-shell-scripts/2011/06/30" style="border:none;margin-right:5px" width="51" height="61"></a><a href="http://digg.com/tools/diggthis/login?url=http://maketecheasier.com/write-linux-shell-scripts/2011/06/30" target="_blank"><img src="http://images.maketecheasier.com/diggme.png" style="border:none;margin-right:5px" ></a><a href="http://www.facebook.com/sharer.php?u=http://maketecheasier.com/write-linux-shell-scripts/2011/06/30" target="_blank"><img src="http://images.maketecheasier.com/fb.jpg" style="border:none;margin-right:5px" ></a><a href="http://www.google.com/reader/link?url=http://maketecheasier.com/write-linux-shell-scripts/2011/06/30&amp;title=The+Beginner+Guide+to+Writing+Linux+Shell+Scripts&amp;srcTitle=MakeTechEasier.com" target="_blank"><img src="http://images.maketecheasier.com/gbuzz-feed.png" style="border:none;margin-right:5px" ></a><a href="http://www.stumbleupon.com/submit?url=http://maketecheasier.com/write-linux-shell-scripts/2011/06/30" target="_blank"><img src="http://images.maketecheasier.com/stumble.png"></a></div>
<div style="clear:both"></div>
<strong><a href="http://maketecheasier.com/write-linux-shell-scripts/2011/06/30">The Beginner Guide to Writing Linux Shell Scripts</a></strong> originally published on <a href="http://maketecheasier.com">Make Tech Easier</a> (<a href="http://feedproxy.google.com/MakeTechEasier">RSS</a>)
<br/>
Follow us at <a href="http://www.facebook.com/MakeTechEasier">Facebook</a> | <a href="http://twitter.com/MakeTechEasier">Twitter</a></p>
]]></description>
			<content:encoded><![CDATA[<p><img src="http://imagecdn.maketecheasier.com/2011/06/bashscripting-small.png" alt="bashscripting-small" title="bashscripting-small" width="200" height="150" class="alignleft size-full wp-image-34667" />For starters &#8211; let&#8217;s clarify that headline. Linux has more than one possible shell, and scripting any of them is a subject that can easily pack a full book. What we&#8217;re going to be doing is covering the basic elements of a <em>bash</em> script. If you don&#8217;t know what shell you&#8217;re using, it&#8217;s probably <em>bash</em>. The process will be familiar to anyone who&#8217;s worked with DOS&#8217;s <em>bat</em> files, it&#8217;s essentially the same concept. You just put a series of commands into a text file and run it. The difference comes from the fact that bash scripts can do a LOT more than batch files. In fact, bash scripting isn&#8217;t all that far from a full-fledged language like Python. Today we&#8217;ll be covering a few basics like input, output, arguments and variables.<br />
<span id="more-34658"></span><br />
<strong>Note</strong>: <em>If we want to get really technical, bash is not a Linux-only shell.  Much (though possibly not all) of the following would apply to any UNIX-type system, including Mac OSX and the BSDs.</em></p>
<h2>Hello World</h2>
<p>It&#8217;s tradition to begin a new &#8220;language&#8221; by creating a simple script to output the words &#8220;Hello World!&#8221;. That&#8217;s easy enough, just open your favorite text editor and enter the following:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/bash</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> Hello World<span style="color: #000000; font-weight: bold;">!</span></pre></div></div>

<p>With only two lines, it couldn&#8217;t be a whole lot simpler, but that first line, <em>#!/bin/bash</em>, may not be immediately obvious. The first two characters (often called a hashbang) are a special signal. It tells Linux that this script should be run through the /bin/bash shell, as opposed to the C shell or Korn shell or anything else you might have installed. Without it, there&#8217;s no easy way for Linux to tell exactly what type of shell script this is. A Python script, for example, would likely start with something like <em>#!/usr/bin/python</em>.  </p>
<p>After that is just the <em>echo</em> statement, which prints the words after it to the terminal (technically, to <em>standard output</em>).  </p>
<h2>Running Your Script</h2>
<p>As is often the case with Linux, there are multiple ways to do this job. The most basic way would be to call bash manually and feed it the script file, as in</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#Filename can be anything, .sh is a common practice for shell scripts.</span>
<span style="color: #c20cb9; font-weight: bold;">bash</span> myscript.sh</pre></div></div>

<p><img src="http://imagecdn.maketecheasier.com/2011/06/bashscripting-hello1.png" alt="bashscripting-hello1" title="bashscripting-hello1" width="246" height="66" class="aligncenter size-full wp-image-34660" /></p>
<p>Clever readers may be thinking &#8220;<em>But wait, didn&#8217;t we put that hashbang thing in so it would know to use bash?  Why did I have to run bash manually?</em>&#8221; and the answer is &#8220;<em>You didn&#8217;t</em>&#8220;. At least, you wouldn&#8217;t have if we had taken a moment to make the script executable on its own.  </p>
<p>In the previous example, we launched bash and sent it the script. Now we&#8217;ll save ourselves some future time by making the script executable so we dont need to run bash manually. That&#8217;s as easy as a single command.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">chmod</span> +x myscript.sh</pre></div></div>

<p>And now it can be run with the filename directly.  </p>
<p><img src="http://imagecdn.maketecheasier.com/2011/06/bashscripting-hello2.png" alt="bashscripting-hello2" title="bashscripting-hello2" width="243" height="109" class="aligncenter size-full wp-image-34661" /></p>
<h2>Variables and Arguments</h2>
<p>Variables in bash can be a little more confusing than some other scripting languages, partly because they sometimes need to be prefaced with a <em>$</em> character and sometimes not &#8211; depending on what you&#8217;re doing.  Take the following example.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">PATH</span>=<span style="color: #007800;">$PATH</span>:<span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>josh<span style="color: #000000; font-weight: bold;">/</span>scripts</pre></div></div>

<p>We refer to the same variable, PATH, two times. Once there&#8217;s no <em>$</em>, but the other time there is.  There are a few ways that you can remember when a $ is appropriate, but this author uses a &#8220;talking&#8221; metaphor. If I&#8217;m talking TO the variable (such as assigning it a new value) I call it by the short name, in this case PATH. If I&#8217;m talking ABOUT a variable (such as getting its current value) it gets a more formal title ($PATH). The precise reasoning and inner workings of this design are beyond the scope of this guide, so just try to remember that you need to include a $ if you&#8217;re trying to fetch the information in a variable.  </p>
<p>Now we&#8217;re going to use a variable in our script. Change the second line to look like the following:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/bash</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> Hello <span style="color: #007800;">$1</span><span style="color: #000000; font-weight: bold;">!</span></pre></div></div>

<p>And re-run your script, but this time include your name after the script name.  </p>
<p><img src="http://imagecdn.maketecheasier.com/2011/06/bashscripting-arg1.png" alt="bashscripting-arg1" title="bashscripting-arg1" width="232" height="59" class="aligncenter size-full wp-image-34662" /></p>
<p>Bash auto-assigns certain variables for you, including a few such as $1, $2 etc which hold each of the arguments passed to the script. Variables can be reassigned and renamed any way you wish, so you could rewrite the previous script as</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/bash</span>
&nbsp;
<span style="color: #007800;">firstname</span>=<span style="color: #007800;">$1</span>
<span style="color: #007800;">lastname</span>=<span style="color: #007800;">$2</span>
&nbsp;
<span style="color: #7a0874; font-weight: bold;">echo</span> Hello <span style="color: #007800;">$firstname</span> <span style="color: #007800;">$lastname</span><span style="color: #000000; font-weight: bold;">!</span></pre></div></div>

<p>As you can see, there are no $ signs when assigning the value to the variable, but you do need them when pulling the info out.  </p>
<h2>Conditionals and Loops</h2>
<p>No script could get very far without the ability to analyse or loop through data. The most common method of determining a course of action is to use the if statement. It works much like you&#8217;d expect &#8211; IF something THEN do stuff ELSE do something different. This example compares the string of characters that we stored in the variable <em>firstname</em> and compares it to some hardcoded text. If they match, it prints special output.  Otherwise, it continues as normal.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/bash</span>
&nbsp;
<span style="color: #007800;">firstname</span>=<span style="color: #007800;">$1</span>
<span style="color: #007800;">lastname</span>=<span style="color: #007800;">$2</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$firstname</span>&quot;</span> == <span style="color: #ff0000;">&quot;Josh&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>
<span style="color: #000000; font-weight: bold;">then</span>
  <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;What a great name&quot;</span>
<span style="color: #000000; font-weight: bold;">else</span>
  <span style="color: #7a0874; font-weight: bold;">echo</span> Hello <span style="color: #007800;">$firstname</span> <span style="color: #007800;">$lastname</span><span style="color: #000000; font-weight: bold;">!</span>
<span style="color: #000000; font-weight: bold;">fi</span></pre></div></div>

<p>Finally, the next core component is bash&#8217;s ability to loop over data. The normal looping mechanisms for bash are FOR, WHILE, and UNTIL. We&#8217;ll start with while, as it&#8217;s the simplest.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/bash </span>
         <span style="color: #007800;">counter</span>=<span style="color: #000000;">0</span>
         <span style="color: #666666; font-style: italic;">#While the counter is less than 10, keep looping</span>
         <span style="color: #000000; font-weight: bold;">while</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>  <span style="color: #007800;">$counter</span> <span style="color: #660033;">-lt</span> <span style="color: #000000;">50</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">do</span>
             <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$counter</span>
             <span style="color: #7a0874; font-weight: bold;">let</span> <span style="color: #007800;">counter</span>=counter+<span style="color: #000000;">1</span> 
         <span style="color: #000000; font-weight: bold;">done</span></pre></div></div>

<p>That example creates a <em>counter</em> variable, begins a <em>while</em> loop, and continues looping (and adding one to the counter) until it reaches the limit, in this case 50. Anything after the <em>done</em> statement will execute once the loop is complete.  </p>
<p>UNTIL operates similarly, but as the reverse of WHILE. A while loop will continue as long as its expression is true (counter less than 50). The until loop takes the opposite approach, and would be written as</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">until</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>  <span style="color: #007800;">$counter</span> <span style="color: #660033;">-gt</span> <span style="color: #000000;">50</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">do</span></pre></div></div>

<p>In this example, &#8220;while less than 50&#8243; and &#8220;until greater than 50&#8243; will have nearly identical results (the difference being that one will include the number 50 itself, and the other will not. Try it out for yourself to see which one, and why.)</p>
<h2>Conclusion</h2>
<p>As stated above, it would take a lot more than a single Getting Started article to fully demonstrate the power of bash scripting. The pieces shown here can be seen as the core components of how bash operates, and should suffice to show you the basic principles behind shell scripting in Linux. If you really want to get into the guts and start making some great scripts, check out GNU&#8217;s official bash reference guide <a href="http://www.gnu.org/software/bash/manual/bashref.html">here</a>. Happy scripting!</p>
<p><div style="float:left;margin-bottom:10px"><a href="http://api.tweetmeme.com/share?url=http://maketecheasier.com/write-linux-shell-scripts/2011/06/30&amp;service=bit.ly" target="_blank"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://maketecheasier.com/write-linux-shell-scripts/2011/06/30" style="border:none;margin-right:5px" width="51" height="61"></a><a href="http://digg.com/tools/diggthis/login?url=http://maketecheasier.com/write-linux-shell-scripts/2011/06/30" target="_blank"><img src="http://images.maketecheasier.com/diggme.png" style="border:none;margin-right:5px" ></a><a href="http://www.facebook.com/sharer.php?u=http://maketecheasier.com/write-linux-shell-scripts/2011/06/30" target="_blank"><img src="http://images.maketecheasier.com/fb.jpg" style="border:none;margin-right:5px" ></a><a href="http://www.google.com/reader/link?url=http://maketecheasier.com/write-linux-shell-scripts/2011/06/30&amp;title=The+Beginner+Guide+to+Writing+Linux+Shell+Scripts&amp;srcTitle=MakeTechEasier.com" target="_blank"><img src="http://images.maketecheasier.com/gbuzz-feed.png" style="border:none;margin-right:5px" ></a><a href="http://www.stumbleupon.com/submit?url=http://maketecheasier.com/write-linux-shell-scripts/2011/06/30" target="_blank"><img src="http://images.maketecheasier.com/stumble.png"></a></div>
<div style="clear:both"></div>
<strong><a href="http://maketecheasier.com/write-linux-shell-scripts/2011/06/30">The Beginner Guide to Writing Linux Shell Scripts</a></strong> originally published on <a href="http://maketecheasier.com">Make Tech Easier</a> (<a href="http://feedproxy.google.com/MakeTechEasier">RSS</a>)
<br/>
Follow us at <a href="http://www.facebook.com/MakeTechEasier">Facebook</a> | <a href="http://twitter.com/MakeTechEasier">Twitter</a></p>
]]></content:encoded>
			<wfw:commentRss>http://maketecheasier.com/write-linux-shell-scripts/2011/06/30/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Agile: Create Web Apps the Amazingly Simple Way</title>
		<link>http://maketecheasier.com/agile-create-web-apps-amazingly-simple-way/2010/09/09</link>
		<comments>http://maketecheasier.com/agile-create-web-apps-amazingly-simple-way/2010/09/09#comments</comments>
		<pubDate>Thu, 09 Sep 2010 12:00:09 +0000</pubDate>
		<dc:creator>Joshua Price</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[platform]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[web 2.0]]></category>

		<guid isPermaLink="false">http://maketecheasier.com/?p=21014</guid>
		<description><![CDATA[There are some people who insist that the only real way to code is in a text-based editor like vi or emacs. Others would sooner chop off a limb than depart with the comforts of Visual Studio. While the first group will happily code away at their consoles from now until Y2K38, the second group [...]<p><div style="float:left;margin-bottom:10px"><a href="http://api.tweetmeme.com/share?url=http://maketecheasier.com/agile-create-web-apps-amazingly-simple-way/2010/09/09&amp;service=bit.ly" target="_blank"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://maketecheasier.com/agile-create-web-apps-amazingly-simple-way/2010/09/09" style="border:none;margin-right:5px" width="51" height="61"></a><a href="http://digg.com/tools/diggthis/login?url=http://maketecheasier.com/agile-create-web-apps-amazingly-simple-way/2010/09/09" target="_blank"><img src="http://images.maketecheasier.com/diggme.png" style="border:none;margin-right:5px" ></a><a href="http://www.facebook.com/sharer.php?u=http://maketecheasier.com/agile-create-web-apps-amazingly-simple-way/2010/09/09" target="_blank"><img src="http://images.maketecheasier.com/fb.jpg" style="border:none;margin-right:5px" ></a><a href="http://www.google.com/reader/link?url=http://maketecheasier.com/agile-create-web-apps-amazingly-simple-way/2010/09/09&amp;title=Agile%3A+Create+Web+Apps+the+Amazingly+Simple+Way&amp;srcTitle=MakeTechEasier.com" target="_blank"><img src="http://images.maketecheasier.com/gbuzz-feed.png" style="border:none;margin-right:5px" ></a><a href="http://www.stumbleupon.com/submit?url=http://maketecheasier.com/agile-create-web-apps-amazingly-simple-way/2010/09/09" target="_blank"><img src="http://images.maketecheasier.com/stumble.png"></a></div>
<div style="clear:both"></div>
<strong><a href="http://maketecheasier.com/agile-create-web-apps-amazingly-simple-way/2010/09/09">Agile: Create Web Apps the Amazingly Simple Way</a></strong> originally published on <a href="http://maketecheasier.com">Make Tech Easier</a> (<a href="http://feedproxy.google.com/MakeTechEasier">RSS</a>)
<br/>
Follow us at <a href="http://www.facebook.com/MakeTechEasier">Facebook</a> | <a href="http://twitter.com/MakeTechEasier">Twitter</a></p>
]]></description>
			<content:encoded><![CDATA[<p><img src="http://imagecdn.maketecheasier.com/2010/09/agile-small.png" alt="agile-small" title="agile-small" width="200" height="168" class="alignleft size-full wp-image-21081" />There are some people who insist that the only real way to code is in a text-based editor like vi or emacs. Others would sooner chop off a limb than depart with the comforts of Visual Studio. While the first group will happily code away at their consoles from now until Y2K38, the second group is always demanding new innovations in simplicity of software development. These people are the target users of the <em>Agile Platform</em> &#8211; an amazingly simple way to create beautiful and functional web apps. As just one example, you can take an Excel spreadsheet and turn it into a searchable, sortable, editable web app in literally 5 minutes, without writing a single line of code.  Old-school hacker or not, that&#8217;s pretty impressive.<br />
<span id="more-21014"></span></p>
<h3>Getting the Agile Platform</h3>
<p> The Agile Platform is Windows software, and an installer can be found <a href="http://www.outsystems.com/download" target="_blank">here</a>. It&#8217;s worth noting that the installer may download some additional components (such as parts of IIS or SQL Server) during the install, so the process may take a while.  </p>
<h3>First Agile Application</h3>
<p>When everything is installed, fire up Service Studio, Agile&#8217;s development environment. At the main menu, choose to start your own app from scratch. You&#8217;ll be dropped into the main editor window.  </p>
<p><img src="http://imagecdn.maketecheasier.com/2010/09/agile-blank.png" alt="agile-blank" title="agile-blank" width="577" height="430" class="aligncenter size-full wp-image-21044" /></p>
<p>Right now you&#8217;ve just got an empty template, waiting for data. All we have to do now is give it some data (in this case, in the form of an Excel spreadsheet). Agile will create a web site based on the data.  </p>
<h3>Importing the Data</h3>
<p>As an example exercise, we&#8217;ll create a simple bug tracker/ticket system. To make the process simpler, I&#8217;ve prepared a spreadsheet to act as the example data, which can be downloaded <a href="http://dl.dropbox.com/u/6864546/ticket.xls" target="_blank">here</a>.  </p>
<p>In Service Studio, click &#8220;<em>Import -> Entities from Excel</em>&#8221; and choose the file you just downloaded. If you watch the right hand pane, you&#8217;ll see a few new entries show up. The section you need to worry about is <em>Entities</em>. In there, you&#8217;ll now see a new entity called <em>Ticket</em>. Drag this entity from the panel and place it directly on top of the <em>HomePage</em> icon.  </p>
<p><img src="http://imagecdn.maketecheasier.com/2010/09/agile-dragentity.png" alt="agile-drag-entity" title="agile-dragentity" width="577" height="313" class="aligncenter size-full wp-image-21060" /></p>
<h3>View Your &#8220;Work&#8221;</h3>
<p>Believe it or not, you&#8217;ve now done everything you need to do for our basic bug tracker. Have doubts? You can see for yourself by publishing the project and previewing in your browser. Click the 1-Click Publish button at the top of the screen to begin building.  </p>
<p><img src="http://imagecdn.maketecheasier.com/2010/09/agile-publish.png" alt="agile-publish" title="agile-publish" width="497" height="332" class="aligncenter size-full wp-image-21062" /></p>
<p>It&#8217;ll take at least a few seconds, and you can watch the progress with the bar in the lower left of the screen. Once it&#8217;s done, you&#8217;ll be presented with an option to view the project in your web browser via a button in the lower right. You&#8217;ll now see the page Agile generated for you based on your data.  </p>
<p><img src="http://imagecdn.maketecheasier.com/2010/09/agile-preview.png" alt="agile-preview" title="agile-preview" width="577" height="358" class="aligncenter size-full wp-image-21063" /></p>
<p>Pretty cool huh?</p>
<h3>Editing Your Page and Data</h3>
<p>You will of course want to be able to change the data once it&#8217;s in your system. Let&#8217;s start by turning the ticket number on our page into a link, which will take users to a &#8220;<em>Edit Ticket</em>&#8221; page. On the main flow screen, double click the silver square labeled &#8220;<em>Ticket_List</em>&#8220;. This will open a WYSIWYG editor where you can interactively manage the items on your page.  </p>
<p>Right click the ticket number as demonstrated above, and select &#8220;<em>Link to New Ticket_Edit Web Screen</em>&#8220;. This will generate a new page where you can easily edit all the data listed. Go ahead, publish again and see for yourself.  </p>
<p><img src="http://imagecdn.maketecheasier.com/2010/09/agile-editpage.png" alt="agile-edit-page" title="agile-editpage" width="434" height="356" class="aligncenter size-full wp-image-21066" /></p>
<h3>More Information</h3>
<p>One of the best features of this platform is that they provide an extremely comprehensive set of training materials for you to learn everything you&#8217;d need to know. It&#8217;s all available right <a href="http://www.outsystems.com/Training/" target="_blank">here</a>.  </p>
<h3>Conclusion</h3>
<p>I&#8217;ve barely scratched the surface of Agile, and honestly, I&#8217;m already pretty blown away. It&#8217;s rare that I&#8217;m really impressed by software. As in REALLY impressed, but Agile is one heck of a product. What we&#8217;ve done in this guide is just a tiny portion of what this platform can do, but even that tiny bit shows what an amazingly well designed system this is. To me, the biggest drawback about the Agile Platform is its reliance on Windows libraries and applications. It&#8217;s not a <em>bad</em> thing exactly, the platform seems to work quite well on my Windows 7 test machine, but portability would have made this a real killer app. That said, I&#8217;d be willing to boot Windows once in a while if it means I can develop beautiful, functional and powerful web application in one lazy afternoon.  </p>
<p><div style="float:left;margin-bottom:10px"><a href="http://api.tweetmeme.com/share?url=http://maketecheasier.com/agile-create-web-apps-amazingly-simple-way/2010/09/09&amp;service=bit.ly" target="_blank"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://maketecheasier.com/agile-create-web-apps-amazingly-simple-way/2010/09/09" style="border:none;margin-right:5px" width="51" height="61"></a><a href="http://digg.com/tools/diggthis/login?url=http://maketecheasier.com/agile-create-web-apps-amazingly-simple-way/2010/09/09" target="_blank"><img src="http://images.maketecheasier.com/diggme.png" style="border:none;margin-right:5px" ></a><a href="http://www.facebook.com/sharer.php?u=http://maketecheasier.com/agile-create-web-apps-amazingly-simple-way/2010/09/09" target="_blank"><img src="http://images.maketecheasier.com/fb.jpg" style="border:none;margin-right:5px" ></a><a href="http://www.google.com/reader/link?url=http://maketecheasier.com/agile-create-web-apps-amazingly-simple-way/2010/09/09&amp;title=Agile%3A+Create+Web+Apps+the+Amazingly+Simple+Way&amp;srcTitle=MakeTechEasier.com" target="_blank"><img src="http://images.maketecheasier.com/gbuzz-feed.png" style="border:none;margin-right:5px" ></a><a href="http://www.stumbleupon.com/submit?url=http://maketecheasier.com/agile-create-web-apps-amazingly-simple-way/2010/09/09" target="_blank"><img src="http://images.maketecheasier.com/stumble.png"></a></div>
<div style="clear:both"></div>
<strong><a href="http://maketecheasier.com/agile-create-web-apps-amazingly-simple-way/2010/09/09">Agile: Create Web Apps the Amazingly Simple Way</a></strong> originally published on <a href="http://maketecheasier.com">Make Tech Easier</a> (<a href="http://feedproxy.google.com/MakeTechEasier">RSS</a>)
<br/>
Follow us at <a href="http://www.facebook.com/MakeTechEasier">Facebook</a> | <a href="http://twitter.com/MakeTechEasier">Twitter</a></p>
]]></content:encoded>
			<wfw:commentRss>http://maketecheasier.com/agile-create-web-apps-amazingly-simple-way/2010/09/09/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>How to Install Google Go in Ubuntu</title>
		<link>http://maketecheasier.com/install-google-go-in-ubuntu/2010/04/15</link>
		<comments>http://maketecheasier.com/install-google-go-in-ubuntu/2010/04/15#comments</comments>
		<pubDate>Thu, 15 Apr 2010 12:00:11 +0000</pubDate>
		<dc:creator>Joshua Price</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[compile]]></category>
		<category><![CDATA[gcc]]></category>
		<category><![CDATA[go]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://maketecheasier.com/?p=14523</guid>
		<description><![CDATA[What do you get when you mix Python and C? According to Google, it&#8217;s Go &#8211; a new programming language developed in-house and later open sourced. Go was created by a small team inside Google, including the well known Ken Thompson, co-inventor of Unix and major influence on C. It was created out of a [...]<p><div style="float:left;margin-bottom:10px"><a href="http://api.tweetmeme.com/share?url=http://maketecheasier.com/install-google-go-in-ubuntu/2010/04/15&amp;service=bit.ly" target="_blank"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://maketecheasier.com/install-google-go-in-ubuntu/2010/04/15" style="border:none;margin-right:5px" width="51" height="61"></a><a href="http://digg.com/tools/diggthis/login?url=http://maketecheasier.com/install-google-go-in-ubuntu/2010/04/15" target="_blank"><img src="http://images.maketecheasier.com/diggme.png" style="border:none;margin-right:5px" ></a><a href="http://www.facebook.com/sharer.php?u=http://maketecheasier.com/install-google-go-in-ubuntu/2010/04/15" target="_blank"><img src="http://images.maketecheasier.com/fb.jpg" style="border:none;margin-right:5px" ></a><a href="http://www.google.com/reader/link?url=http://maketecheasier.com/install-google-go-in-ubuntu/2010/04/15&amp;title=How+to+Install+Google+Go+in+Ubuntu&amp;srcTitle=MakeTechEasier.com" target="_blank"><img src="http://images.maketecheasier.com/gbuzz-feed.png" style="border:none;margin-right:5px" ></a><a href="http://www.stumbleupon.com/submit?url=http://maketecheasier.com/install-google-go-in-ubuntu/2010/04/15" target="_blank"><img src="http://images.maketecheasier.com/stumble.png"></a></div>
<div style="clear:both"></div>
<strong><a href="http://maketecheasier.com/install-google-go-in-ubuntu/2010/04/15">How to Install Google Go in Ubuntu</a></strong> originally published on <a href="http://maketecheasier.com">Make Tech Easier</a> (<a href="http://feedproxy.google.com/MakeTechEasier">RSS</a>)
<br/>
Follow us at <a href="http://www.facebook.com/MakeTechEasier">Facebook</a> | <a href="http://twitter.com/MakeTechEasier">Twitter</a></p>
]]></description>
			<content:encoded><![CDATA[<p><img src="http://imagecdn.maketecheasier.com/2010/04/googlego-logo.png" alt="googlego-logo" title="googlego-logo" width="153" height="55" class="alignleft size-full wp-image-14530" />What do you get when you mix Python and C? According to Google, it&#8217;s <a href="http://golang.org/" target="_blank">Go</a> &#8211; a new programming language developed in-house and later open sourced. Go was created by a small team inside Google, including the well known Ken Thompson, co-inventor of Unix and major influence on C. It was created out of a lack of satisfaction with existing languages, mainly the excessively (in the minds of Go&#8217;s developers) long compile times needed for other languages. With Go, even a very large and complex application can compile in a few seconds, often less. Additionally, Go has built in concurrency support, so you can code for multiple CPUs without resorting to outside libraries of unknown quality.  While we don&#8217;t usually cover much programming here at MakeTechEasier, Go is such an interesting language that we just had to dip in a bit, and where better to start than by covering the system setup needed to get Go up and running on your Linux box.<br />
<span id="more-14523"></span><br />
<em>Note:  This guide will cover the steps needed to get the Go compiler working in Linux.  It will not address how to write programs for Go, however if there is reader interest, we certainly could create such a tutorial.  </em></p>
<h3>Quick Overview</h3>
<p>Go is a compiled language like C or C++, not interpreted like Python. This is course means that to do anything you need a Go compiler. Since Go is only officially available in source form, that means we&#8217;ll need to compile the Go compiler with gcc. When everything is done, you will have two Go compilers available, 6g and 8g. The only difference between them is that 6g creates 64-bit binaries and 8g creates 32-bit. Once you know which compiler you want, just code and compile for Go much like you would for gcc.  </p>
<p>There are technically other compiler options, but 6g and 8g are the official compilers and will be used exclusively in this guide.  </p>
<p><strong>Update:</strong> A PPA is now available for Google Go. To install, open a terminal and type:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> add-apt-repository ppa:gophers<span style="color: #000000; font-weight: bold;">/</span>go
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> update
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> golang</pre></div></div>

<h3>Preparing the System</h3>
<p>There are a few quick easy things we&#8217;ll need to do in order to get our environment prepared. First, Go requires a few environment variables to be set in the shell so that it knows where to find and place files. You could type all the following commands directly into the terminal, but since some of them may be needed later, we&#8217;ll put them all in our <em>.bashrc</em> file. </p>
<p>Open your <em>~/.bashrc file</em>, and enter the following lines at the end:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#This line will tell the Go installer where to place the source code before compilation</span>
<span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">GOROOT</span>=<span style="color: #007800;">$HOME</span><span style="color: #000000; font-weight: bold;">/</span>gosource
&nbsp;
<span style="color: #666666; font-style: italic;">#With this line, you choose the architecture of your machine.  </span>
<span style="color: #666666; font-style: italic;">#Those with 64 bit CPUs should enter &quot;amd64&quot; here.  </span>
<span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">GOARCH</span>=<span style="color: #000000;">386</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#Your operating system</span>
<span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">GOOS</span>=linux
&nbsp;
<span style="color: #666666; font-style: italic;">#And now the location where the installer will place the finished files</span>
<span style="color: #666666; font-style: italic;">#Don't forget to create this directory before installing</span>
<span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">GOBIN</span>=<span style="color: #007800;">$HOME</span><span style="color: #000000; font-weight: bold;">/</span>gobin
&nbsp;
<span style="color: #666666; font-style: italic;">#Include Go binaries in command path</span>
<span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">PATH</span>=<span style="color: #007800;">$PATH</span>:<span style="color: #007800;">$GOBIN</span></pre></div></div>

<p>Then at the command line type</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">source</span> ~<span style="color: #000000; font-weight: bold;">/</span>.bashrc</pre></div></div>

<p>to make sure it reads the file and creates those environment variables.  </p>
<h3>Installing Build Dependencies</h3>
<p>We need a C compiler (such as gcc) along with some other utilities to create the Go compilers (6g and 8g). At your command prompt, run the following commands to install all needed build dependencies.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#If you normally use aptitude instead of apt-get, use that here as well</span>
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> <span style="color: #c20cb9; font-weight: bold;">bison</span> <span style="color: #c20cb9; font-weight: bold;">gcc</span> libc6-dev <span style="color: #c20cb9; font-weight: bold;">ed</span> <span style="color: #c20cb9; font-weight: bold;">gawk</span> <span style="color: #c20cb9; font-weight: bold;">make</span> python-setuptools python-dev build-essential
<span style="color: #c20cb9; font-weight: bold;">sudo</span> easy_install mercurial</pre></div></div>

<h3>Getting and Compiling the Go Source Code</h3>
<p>Now that we&#8217;ve got everything we need to install Go, we&#8217;re ready to get the code itself. To fetch the files, enter the following command:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">hg clone <span style="color: #660033;">-r</span> release https:<span style="color: #000000; font-weight: bold;">//</span>go.googlecode.com<span style="color: #000000; font-weight: bold;">/</span>hg<span style="color: #000000; font-weight: bold;">/</span> <span style="color: #007800;">$GOROOT</span></pre></div></div>

<p>Your output should approximately match the following:</p>
<p><img src="http://imagecdn.maketecheasier.com/2010/04/googlego-fetchsource.png" alt="googlego-fetchsource" title="googlego-fetchsource" width="576" height="118" class="aligncenter size-full wp-image-14532" /></p>
<p>And now we&#8217;re ready to compile Go into a usable language. To begin, enter the following in your terminal:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #007800;">$GOROOT</span><span style="color: #000000; font-weight: bold;">/</span>src
.<span style="color: #000000; font-weight: bold;">/</span>all.bash</pre></div></div>

<p>Remember, this part is gcc compiling Go, so this will not have the speed benefits associated with writing and compiling actual Go code and will likely take a few minutes.  </p>
<p>If you get a message about $GOBIN, make sure you remembered to create the directory that you put in your <em>.bashrc</em> file. Similarly, for other errors, double check the variables you put in your <em>.bashrc</em> file.  </p>
<h3>Test Your Installation</h3>
<p>Save the following into a file called <em>test.go</em></p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">package main
&nbsp;
import <span style="color: #ff0000;">&quot;fmt&quot;</span>
&nbsp;
func main<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	fmt.<span style="color: #202020;">Printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Hello, Go!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Now at the command line&#8230;</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#These commands are for 32-bit builds</span>
<span style="color: #666666; font-style: italic;">#Replace the &quot;8&quot; with &quot;6&quot; in all examples to build for 64.  </span>
&nbsp;
<span style="color: #666666; font-style: italic;">#Compile...</span>
8g test.go
<span style="color: #666666; font-style: italic;">#Link</span>
8l test.8
<span style="color: #666666; font-style: italic;">#And run..</span>
.<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">8</span>.out</pre></div></div>

<p>If all went well, you should see something like this:<br />
<img src="http://imagecdn.maketecheasier.com/2010/04/googlego-hello.png" alt="googlego-hello" title="googlego-hello" width="328" height="92" class="aligncenter size-full wp-image-14536" /></p>
<p>And you&#8217;re ready to start coding!<br />
<!--adsense#468x60--></p>
<p><div style="float:left;margin-bottom:10px"><a href="http://api.tweetmeme.com/share?url=http://maketecheasier.com/install-google-go-in-ubuntu/2010/04/15&amp;service=bit.ly" target="_blank"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://maketecheasier.com/install-google-go-in-ubuntu/2010/04/15" style="border:none;margin-right:5px" width="51" height="61"></a><a href="http://digg.com/tools/diggthis/login?url=http://maketecheasier.com/install-google-go-in-ubuntu/2010/04/15" target="_blank"><img src="http://images.maketecheasier.com/diggme.png" style="border:none;margin-right:5px" ></a><a href="http://www.facebook.com/sharer.php?u=http://maketecheasier.com/install-google-go-in-ubuntu/2010/04/15" target="_blank"><img src="http://images.maketecheasier.com/fb.jpg" style="border:none;margin-right:5px" ></a><a href="http://www.google.com/reader/link?url=http://maketecheasier.com/install-google-go-in-ubuntu/2010/04/15&amp;title=How+to+Install+Google+Go+in+Ubuntu&amp;srcTitle=MakeTechEasier.com" target="_blank"><img src="http://images.maketecheasier.com/gbuzz-feed.png" style="border:none;margin-right:5px" ></a><a href="http://www.stumbleupon.com/submit?url=http://maketecheasier.com/install-google-go-in-ubuntu/2010/04/15" target="_blank"><img src="http://images.maketecheasier.com/stumble.png"></a></div>
<div style="clear:both"></div>
<strong><a href="http://maketecheasier.com/install-google-go-in-ubuntu/2010/04/15">How to Install Google Go in Ubuntu</a></strong> originally published on <a href="http://maketecheasier.com">Make Tech Easier</a> (<a href="http://feedproxy.google.com/MakeTechEasier">RSS</a>)
<br/>
Follow us at <a href="http://www.facebook.com/MakeTechEasier">Facebook</a> | <a href="http://twitter.com/MakeTechEasier">Twitter</a></p>
]]></content:encoded>
			<wfw:commentRss>http://maketecheasier.com/install-google-go-in-ubuntu/2010/04/15/feed</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>A Basic Introduction To Python 3</title>
		<link>http://maketecheasier.com/a-basic-introduction-to-python-3/2009/03/25</link>
		<comments>http://maketecheasier.com/a-basic-introduction-to-python-3/2009/03/25#comments</comments>
		<pubDate>Wed, 25 Mar 2009 00:11:46 +0000</pubDate>
		<dc:creator>Joshua Price</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[py3k]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[scripts]]></category>

		<guid isPermaLink="false">http://maketecheasier.com/?p=3485</guid>
		<description><![CDATA[A while back I was introduced to what has become my #1 favorite programming/scripting language: Python. It&#8217;s difficult for a language developer to come up with something that&#8217;s both powerful and easy to write, something that flows naturally and allows you to focus on what&#8217;s important in your code. Python does this beautifully. It makes [...]<p><div style="float:left;margin-bottom:10px"><a href="http://api.tweetmeme.com/share?url=http://maketecheasier.com/a-basic-introduction-to-python-3/2009/03/25&amp;service=bit.ly" target="_blank"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://maketecheasier.com/a-basic-introduction-to-python-3/2009/03/25" style="border:none;margin-right:5px" width="51" height="61"></a><a href="http://digg.com/tools/diggthis/login?url=http://maketecheasier.com/a-basic-introduction-to-python-3/2009/03/25" target="_blank"><img src="http://images.maketecheasier.com/diggme.png" style="border:none;margin-right:5px" ></a><a href="http://www.facebook.com/sharer.php?u=http://maketecheasier.com/a-basic-introduction-to-python-3/2009/03/25" target="_blank"><img src="http://images.maketecheasier.com/fb.jpg" style="border:none;margin-right:5px" ></a><a href="http://www.google.com/reader/link?url=http://maketecheasier.com/a-basic-introduction-to-python-3/2009/03/25&amp;title=A+Basic+Introduction+To+Python+3&amp;srcTitle=MakeTechEasier.com" target="_blank"><img src="http://images.maketecheasier.com/gbuzz-feed.png" style="border:none;margin-right:5px" ></a><a href="http://www.stumbleupon.com/submit?url=http://maketecheasier.com/a-basic-introduction-to-python-3/2009/03/25" target="_blank"><img src="http://images.maketecheasier.com/stumble.png"></a></div>
<div style="clear:both"></div>
<strong><a href="http://maketecheasier.com/a-basic-introduction-to-python-3/2009/03/25">A Basic Introduction To Python 3</a></strong> originally published on <a href="http://maketecheasier.com">Make Tech Easier</a> (<a href="http://feedproxy.google.com/MakeTechEasier">RSS</a>)
<br/>
Follow us at <a href="http://www.facebook.com/MakeTechEasier">Facebook</a> | <a href="http://twitter.com/MakeTechEasier">Twitter</a></p>
]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-thumbnail wp-image-3486" src="http://imagecdn.maketecheasier.com/2009/03/280px-python_logo-150x150.png" alt="Python Logo" width="150" height="150" />A while back I was introduced to what has become my #1 favorite programming/scripting language: Python.  It&#8217;s difficult for a language developer to come up with something that&#8217;s both powerful and easy to write, something that flows naturally and allows you to focus on what&#8217;s important in your code.  Python does this beautifully.  It makes just the right kinds of assumptions, allowing you to focus more on what your program should do instead of exactly how it should be done.  There&#8217;s no worrying about memory management, variable typing, or those blasted semicolons, you just keep your mind on the logic of your application.</p>
<p><span id="more-3485"></span>Python takes some pretty big departures from some of the more traditional languages like C/C++, fitting in better with the dynamic languages like Ruby, Smalltalk, and even Javascript.  The ability to quickly and easily finish complex tasks in Python has even been the subject of some great <a href="http://xkcd.com/353/" target="_blank">web</a> <a href="http://xkcd.com/413/" target="_blank">comics</a>.</p>
<blockquote><p>Note &#8211; Python is an interpreted language, the interpreter can be downloaded <a href="http://python.org" target="_blank">here</a>. All examples in this guide are written for Python 3.0 which is <strong>NOT</strong> fully backward-compatible with prior versions. If you&#8217;re having trouble running the examples, check your Python version.</p></blockquote>
<h3>Running the examples</h3>
<p>I&#8217;ll include various examples throughout this guide.  Once you&#8217;ve got the Python 3 interpreter installed (make sure it&#8217;s Python 3), code can be run in two ways:</p>
<h3>Script file</h3>
<p>You can copy/paste the complete text of the example code into a text file.  Python files typically end in .py.  Open your command prompt and run the Python executable followed by the name of the file.  On my Linux machine, I run:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">python3.0 myfile.<span style="color: black;">py</span></pre></div></div>

<p>This should be roughly the same on Windows and Mac as well, though you may have to specify the full path to the Python interpreter, such as</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">C:\Python30\python.<span style="color: black;">exe</span> myfile.<span style="color: black;">py</span></pre></div></div>

<h3>Interactive Interpreter</h3>
<p>Python can also be run in interactive mode, where you can type in commands one at a time to see how it responds.  This can be very useful in troubleshooting, or in trying out new things.  Run the Python executable on its own, without any script file, and it will open up the interactive prompt.</p>
<p><img class="aligncenter size-full wp-image-3735" src="http://imagecdn.maketecheasier.com/2009/03/interpreter.png" alt="Python interactive interpreter" width="515" height="278" /></p>
<p>Ctrl-D will exit the interpreter.</p>
<h3>Whitespace</h3>
<p>One of the most unusual aspects of Python is its use of whitespace to indicate blocks of code. Instead of <em>begin</em> and <em>end</em>, or grouping by brackets, Python uses the amount of indentation to tell how to handle blocks of code for looping and such. To many people coming from other programming languages, this seems like insanity. Once you get used to the idea, however, it becomes quite natural and forces your code to be clear and readable. We all indent code blocks anyway (or at least should) so it just makes sense for the language to understand that statements all lined up together are part of the same block.</p>
<p>As an added benefit, Python is not picky about just how much you like to indent, or even whether you prefer tabs or spaces. You can use a tab, a space, two spaces, 137 spaces, Python doesn&#8217;t care. All you need to do is be consistent. It will check your code and see &#8220;The first code block is indented by 4 spaces, so I&#8217;ll assume each other block is indented by another 4 spaces&#8221; or whatever the case may be. As long as you&#8217;re consistent in the way you indent your code, Python is flexible enough to understand. The following example may help clear things up.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="python" style="font-family:monospace;">x = <span style="color: #ff4500;">0</span>
<span style="color: #ff7700;font-weight:bold;">while</span> x <span style="color: #66cc66;">&lt;</span> <span style="color: #ff4500;">10</span>:
    <span style="color: #ff7700;font-weight:bold;">print</span><span style="color: black;">&#40;</span>x<span style="color: black;">&#41;</span>
    x += <span style="color: #ff4500;">1</span>
<span style="color: #ff7700;font-weight:bold;">print</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;All done&quot;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p><strong>Code Breakdown: </strong>The <em>while</em> loop tells Python to run the following block of code as long as certain conditions are true. In this case, the condition is that x is less than 10. It will continue to loop over that block until x hits 10. The &#8220;x += 1&#8243; translates to &#8220;x = x + 1&#8243; or &#8220;make x larger by 1&#8243;. Notice the final line does not get run until the <em>while</em> loop is finished. Python sees the indented lines, and treats those as the group of code to be run on each trip through the <em>while</em> loop. The final line is not indented with the others, so Python does not act on it until the <em>while</em> loop is finished.</p>
<h3>Dynamic Typing</h3>
<p>Python does not require you to define what type of data will be in a variable.  You can put an integer, a string, a decimal, anything you want into a variable without having to tell Python what it is.  Python will figure out, based on what you assign, what type of data that variable should hold.  The following example should demonstrate:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="python" style="font-family:monospace;">x = <span style="color: #ff4500;">0</span>
<span style="color: #ff7700;font-weight:bold;">print</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;x is a: &quot;</span>,<span style="color: #008000;">type</span><span style="color: black;">&#40;</span>x<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
x = <span style="color: #ff4500;">3.14</span>
<span style="color: #ff7700;font-weight:bold;">print</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;x is a: &quot;</span>,<span style="color: #008000;">type</span><span style="color: black;">&#40;</span>x<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
x = <span style="color: #483d8b;">&quot;Hello&quot;</span>
<span style="color: #ff7700;font-weight:bold;">print</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;x is a: &quot;</span>,<span style="color: #008000;">type</span><span style="color: black;">&#40;</span>x<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
x = <span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span>,<span style="color: #ff4500;">2</span>,<span style="color: #ff4500;">3</span>,<span style="color: #ff4500;">4</span><span style="color: black;">&#93;</span>
<span style="color: #ff7700;font-weight:bold;">print</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;x is a: &quot;</span>,<span style="color: #008000;">type</span><span style="color: black;">&#40;</span>x<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>Which gives us the output below</p>
<p><img class="aligncenter size-full wp-image-3643" src="http://imagecdn.maketecheasier.com/2009/03/type-example.png" alt="Example of Python's dynamic typing" width="236" height="141" /></p>
<h3>Data Structures</h3>
<p>The three data structures you&#8217;ll most commonly use in python are</p>
<ul>
<li>Lists</li>
<li>Tuples</li>
<li>Dictionaries</li>
</ul>
<h3>Lists</h3>
<p>are a lot like arrays in some other languages.  They&#8217;re a one-dimensional sequence of items (though technically you can give them as many dimensions as you like).  Each item in that list can be changed, moved, and removed at will without having to recreate the list, and without causing any change to the other items.  Lists can contain any Python object, whether it be a number, a string, even other lists.  The following code shows some basic usage of lists.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#create a list with a few sample items</span>
myList = <span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span>,<span style="color: #ff4500;">2</span>,<span style="color: #ff4500;">3</span>,<span style="color: #ff4500;">4</span>,<span style="color: #ff4500;">5</span><span style="color: black;">&#93;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">#len() gives a count of how many items our list holds</span>
<span style="color: #ff7700;font-weight:bold;">print</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;myList has &quot;</span>, <span style="color: #008000;">len</span><span style="color: black;">&#40;</span>myList<span style="color: black;">&#41;</span>, <span style="color: #483d8b;">&quot; items.&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">#The items in a list don't have to be of the same type</span>
myList.<span style="color: black;">append</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;six&quot;</span><span style="color: black;">&#41;</span>
myList.<span style="color: black;">append</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;seven&quot;</span><span style="color: black;">&#41;</span>
myList.<span style="color: black;">append</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">8</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">#We've appended three new items to the end of the list</span>
<span style="color: #ff7700;font-weight:bold;">print</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;myList now has&quot;</span>,<span style="color: #008000;">len</span><span style="color: black;">&#40;</span>myList<span style="color: black;">&#41;</span>, <span style="color: #483d8b;">&quot; items.&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">#Now let's see item number 0 (first item)</span>
<span style="color: #ff7700;font-weight:bold;">print</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;first item:&quot;</span>, myList<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">#and now the fourth item</span>
<span style="color: #ff7700;font-weight:bold;">print</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;fourth item:&quot;</span>,mylist<span style="color: black;">&#91;</span><span style="color: #ff4500;">3</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">#Then pop the last item out of the list</span>
<span style="color: #ff7700;font-weight:bold;">print</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;and ends with&quot;</span> , myList.<span style="color: black;">pop</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">print</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;myList now has&quot;</span>,<span style="color: #008000;">len</span><span style="color: black;">&#40;</span>myList<span style="color: black;">&#41;</span>, <span style="color: #483d8b;">&quot; items.&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">#And see what we've done</span>
<span style="color: #ff7700;font-weight:bold;">print</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;The complete contents are:&quot;</span>, myList<span style="color: black;">&#41;</span></pre></td></tr></table></div>

<h3>Tuples</h3>
<p>I won&#8217;t be covering tuples much, as they won&#8217;t be used it our example program and they&#8217;re similar to lists in many ways.  Tuples, like lists, are a series of items grouped together.  The difference is that tuples are not mutable.  You cannot make in-place changes to the items in a tuple, you must re-create the tuple.  This means no &#8220;append&#8221; or &#8220;pop&#8221; or other things that directly make changes to the contents of the tuple.  If it helps, you can think of tuples as a read-only list (though that&#8217;s really not very accurate).</p>
<h3>Dictionaries</h3>
<p>These, I love.  When I was first taught about dictionaries, I remember thinking something along the lines of &#8220;Well.. I GUESS that could be useful&#8230; sometimes&#8221;.  Within a week, I used them every chance I got.</p>
<p>In Python, dictionaries are key:value pairs.  It&#8217;s kinda like a list except that each item has two parts, a key and a value.  In the following example, I&#8217;m going to make a dictionary to hold information about myself.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
</pre></td><td class="code"><pre class="python" style="font-family:monospace;">myDict = <span style="color: black;">&#123;</span><span style="color: black;">&#125;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">#       Key             Value</span>
myDict<span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;Name&quot;</span><span style="color: black;">&#93;</span>       = <span style="color: #483d8b;">&quot;Josh&quot;</span>
myDict<span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;Occupation&quot;</span><span style="color: black;">&#93;</span> = <span style="color: #483d8b;">&quot;Computer Geek&quot;</span>
myDict<span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;FavFood&quot;</span><span style="color: black;">&#93;</span>    = <span style="color: #483d8b;">&quot;Hani Special (no lettuce)&quot;</span>
myDict<span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;FavBand&quot;</span><span style="color: black;">&#93;</span>    = <span style="color: #483d8b;">&quot;Anything but the B-52s&quot;</span>
myDict<span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;Heroes&quot;</span><span style="color: black;">&#93;</span>     = <span style="color: #483d8b;">&quot;Tom Waits, Kurt Vonnegut, SpaceBat&quot;</span>
myDict<span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;FavNumber&quot;</span><span style="color: black;">&#93;</span>  = <span style="color: #ff4500;">3.141592</span>
myDict<span style="color: black;">&#91;</span><span style="color: #ff4500;">42</span><span style="color: black;">&#93;</span>           = <span style="color: #483d8b;">&quot;It's also a good number&quot;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">print</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;My name:&quot;</span>,            myDict<span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;Name&quot;</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">print</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;My heroes:&quot;</span>,          myDict<span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;Heroes&quot;</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">print</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;My favorite number:&quot;</span>, myDict<span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;FavNumber&quot;</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">print</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;What do I think of 42?&quot;</span>, myDict<span style="color: black;">&#91;</span><span style="color: #ff4500;">42</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">print</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: #808080; font-style: italic;"># Now I'll change my favorite number without creating a</span>
<span style="color: #808080; font-style: italic;"># whole new dictionary</span>
myDict<span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;FavNumber&quot;</span><span style="color: black;">&#93;</span> += <span style="color: #ff4500;">100</span>
<span style="color: #ff7700;font-weight:bold;">print</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;My NEW favorite number:&quot;</span>,myDict<span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;FavNumber&quot;</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>A few things should be clear from the example.  First, dictionaries can mix and match data of any type.  Your keys and values can be of anything.  You can even get really crazy and put things like functions inside dictionaries, but that&#8217;s way beyond the scope of this guide.</p>
<p>Second, dictionaries are mutable.  You can add and remove items on the fly without recreating the dictionary or affecting other items.</p>
<p>If you&#8217;re still not sure of the usefulness of dictionaries, consider using them to track a user&#8217;s settings.  You could have a dictionary called <em>settings</em> and store things like username, ip address, and screen resolution.  Any time you need to reference that data, you can just pull it from <em>settings["username"]</em>, or whatever other key you&#8217;ve specified.</p>
<h3>Bring it all home</h3>
<p>Now we&#8217;re going to get to the real action, creating a useful Python 3.0 program.  What this program will do is take a number representing money, and tell you how much pocket change would make that amount.  It&#8217;s a pretty common coding exercise and is a good way to demonstrate the concepts we&#8217;ve covered so far.</p>
<p>I should tell you now that this program is NOT going to be written in the &#8220;best&#8221; way, my aim is to write it using the most basic concepts and operations possible.  There are several &#8220;better&#8221; ways to write this, such using functions and the modulus operator, and including error checking, but this version should be pretty easy to understand.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#Get the cash amount</span>
total = <span style="color: #008000;">input</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;Enter cash amount in dollars:  $&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">#Reading from text input assumes text, so convert</span>
<span style="color: #808080; font-style: italic;">#to decimal and multiple by 100 so we can count pennies</span>
<span style="color: #808080; font-style: italic;">#(simpler math that way)</span>
pennies = <span style="color: #008000;">float</span><span style="color: black;">&#40;</span>total<span style="color: black;">&#41;</span> <span style="color: #66cc66;">*</span> <span style="color: #ff4500;">100</span>
&nbsp;
<span style="color: #808080; font-style: italic;">#create dictionary to hold our change values</span>
change = <span style="color: black;">&#123;</span><span style="color: #483d8b;">&quot;quarters&quot;</span> : <span style="color: #ff4500;">0</span>,
          <span style="color: #483d8b;">&quot;dimes&quot;</span>    : <span style="color: #ff4500;">0</span>,
          <span style="color: #483d8b;">&quot;nickels&quot;</span>  : <span style="color: #ff4500;">0</span>,
          <span style="color: #483d8b;">&quot;pennies&quot;</span>  : <span style="color: #ff4500;">0</span><span style="color: black;">&#125;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">#Loop until all money has been accounted for</span>
<span style="color: #ff7700;font-weight:bold;">while</span> pennies <span style="color: #66cc66;">&gt;</span> <span style="color: #ff4500;">0</span>:
  <span style="color: #808080; font-style: italic;">#Subtract each coin from the total, add 1 to count</span>
  <span style="color: #808080; font-style: italic;">#for each coin, and restart loop after counting</span>
  <span style="color: #ff7700;font-weight:bold;">if</span> pennies <span style="color: #66cc66;">&gt;</span>= <span style="color: #ff4500;">25</span>:
    change<span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;quarters&quot;</span><span style="color: black;">&#93;</span> += <span style="color: #ff4500;">1</span>
    pennies -= <span style="color: #ff4500;">25</span>
    <span style="color: #ff7700;font-weight:bold;">continue</span>
  <span style="color: #ff7700;font-weight:bold;">elif</span> pennies <span style="color: #66cc66;">&gt;</span>= <span style="color: #ff4500;">10</span>:
    change<span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;dimes&quot;</span><span style="color: black;">&#93;</span> += <span style="color: #ff4500;">1</span>
    pennies -= <span style="color: #ff4500;">10</span>
    <span style="color: #ff7700;font-weight:bold;">continue</span>
  <span style="color: #ff7700;font-weight:bold;">elif</span> pennies <span style="color: #66cc66;">&gt;</span>= <span style="color: #ff4500;">5</span>:
    change<span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;nickels&quot;</span><span style="color: black;">&#93;</span> += <span style="color: #ff4500;">1</span>
    pennies -= <span style="color: #ff4500;">5</span>
    <span style="color: #ff7700;font-weight:bold;">continue</span>
  <span style="color: #ff7700;font-weight:bold;">else</span>:
    change<span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;pennies&quot;</span><span style="color: black;">&#93;</span> = <span style="color: #008000;">int</span><span style="color: black;">&#40;</span>pennies<span style="color: black;">&#41;</span>
    pennies = <span style="color: #ff4500;">0</span>
&nbsp;
<span style="color: #808080; font-style: italic;">#Finally, print our results</span>
<span style="color: #ff7700;font-weight:bold;">print</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;Q:&quot;</span>,change<span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;quarters&quot;</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">print</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;D:&quot;</span>,change<span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;dimes&quot;</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">print</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;N:&quot;</span>,change<span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;nickels&quot;</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">print</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;P:&quot;</span>,change<span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;pennies&quot;</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p><strong>Code Breakdown:</strong> We&#8217;re using <em>input</em> to get an amount of money in from the command line.  Python assumes that what is being entered is a string of text, as opposed to a number, so we&#8217;ve got to tell it to convert that input into a usable number.  We could have left the number alone (ie 15.95) but instead we converted it to pennies (multiplying by 100) to make the maths simpler so we wouldn&#8217;t have to worry about decimal points.</p>
<p>Next, we create a dictionary to hold the results of our computing.  If this were a more complex program, we could pass that dictionary around to our functions, classes, etc without worrying about keeping track of separate variables for each type of coin.</p>
<p>After that comes the real work &#8211; the act of splitting our money total into individual coins.  This program uses a <em>while</em> loop to keep cycling until we have no money left from our original input.  Each trip through the loop looks at the amount of money, subtracts the largest coin it can, and restarts the loop.  Instead of doing subtractions over and over, this program would likely be much more efficient if we had used the modulus operator, but the subtraction is easier to understand.</p>
<p>Once we&#8217;re finished with the loop, all that&#8217;s left to do is display our results.</p>
<p>Python is capable of FAR more than I could possibly cover here, but I hope I&#8217;ve been able to demonstrate the basics of how it works, and how it can be used to quickly and easily create tools that would be much more complicated in a less intuitive language.</p>
<blockquote><p>In case anyone is as curious as I was about how to properly pronounce &#8220;tuple&#8221;, I was fortunate enough to have the opportunity to ask <a href="http://www.python.org/~guido/" target="_blank">Guido van Rossum</a> himself if it was &#8220;toople&#8221; or &#8220;tupple&#8221;, and he gave the somewhat unsatisfying answer &#8220;It&#8217;s whatever you want.&#8221;</p></blockquote>
<p><!--adsense#468x60--></p>
<p><div style="float:left;margin-bottom:10px"><a href="http://api.tweetmeme.com/share?url=http://maketecheasier.com/a-basic-introduction-to-python-3/2009/03/25&amp;service=bit.ly" target="_blank"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://maketecheasier.com/a-basic-introduction-to-python-3/2009/03/25" style="border:none;margin-right:5px" width="51" height="61"></a><a href="http://digg.com/tools/diggthis/login?url=http://maketecheasier.com/a-basic-introduction-to-python-3/2009/03/25" target="_blank"><img src="http://images.maketecheasier.com/diggme.png" style="border:none;margin-right:5px" ></a><a href="http://www.facebook.com/sharer.php?u=http://maketecheasier.com/a-basic-introduction-to-python-3/2009/03/25" target="_blank"><img src="http://images.maketecheasier.com/fb.jpg" style="border:none;margin-right:5px" ></a><a href="http://www.google.com/reader/link?url=http://maketecheasier.com/a-basic-introduction-to-python-3/2009/03/25&amp;title=A+Basic+Introduction+To+Python+3&amp;srcTitle=MakeTechEasier.com" target="_blank"><img src="http://images.maketecheasier.com/gbuzz-feed.png" style="border:none;margin-right:5px" ></a><a href="http://www.stumbleupon.com/submit?url=http://maketecheasier.com/a-basic-introduction-to-python-3/2009/03/25" target="_blank"><img src="http://images.maketecheasier.com/stumble.png"></a></div>
<div style="clear:both"></div>
<strong><a href="http://maketecheasier.com/a-basic-introduction-to-python-3/2009/03/25">A Basic Introduction To Python 3</a></strong> originally published on <a href="http://maketecheasier.com">Make Tech Easier</a> (<a href="http://feedproxy.google.com/MakeTechEasier">RSS</a>)
<br/>
Follow us at <a href="http://www.facebook.com/MakeTechEasier">Facebook</a> | <a href="http://twitter.com/MakeTechEasier">Twitter</a></p>
]]></content:encoded>
			<wfw:commentRss>http://maketecheasier.com/a-basic-introduction-to-python-3/2009/03/25/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>

