<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" xml:lang="en" xml:base="http://antoniocangiano.com/wp-atom.php">
	<title type="text">Zen and the Art of Programming</title>
	<subtitle type="text">By Antonio Cangiano, Software Engineer &amp; Technical Evangelist at IBM</subtitle>

	<updated>2009-10-21T14:38:20Z</updated>
	<generator uri="http://wordpress.org/" version="2.8.4">WordPress</generator>

	<link rel="alternate" type="text/html" href="http://antoniocangiano.com" />
	<id>http://antoniocangiano.com/feed/atom/</id>
	

			<link rel="self" href="http://feeds.feedburner.com/ZenAndTheArtOfRubyProgramming" type="application/atom+xml" /><feedburner:emailServiceId>ZenAndTheArtOfRubyProgramming</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry>
		<author>
			<name>Antonio Cangiano</name>
						<uri>http://antoniocangiano.com</uri>
					</author>
		<title type="html"><![CDATA[What is DB2 pureScale?]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ZenAndTheArtOfRubyProgramming/~3/PUUyPyDUKlY/" />
		<id>http://antoniocangiano.com/?p=1112</id>
		<updated>2009-10-21T14:38:20Z</updated>
		<published>2009-10-21T13:00:03Z</published>
		<category scheme="http://antoniocangiano.com" term="DB2" />		<summary type="html"><![CDATA[There are two main types of scalability: vertical and horizontal. Vertical scalability consists of potentiating the hardware specs of a given server. This is typically done by increasing the number (and to a minor extent, speed) of the processors, adding more RAM, and so on. Commodity hardware tends to impose a strong limit on the [...]]]></summary>
		<content type="html" xml:base="http://antoniocangiano.com/2009/10/21/what-is-db2-purescale/">&lt;p&gt;There are two main types of scalability: vertical and horizontal. Vertical scalability consists of potentiating the hardware specs of a given server. This is typically done by increasing the number (and to a minor extent, speed) of the processors, adding more RAM, and so on. Commodity hardware tends to impose a strong limit on the resources that can be augmented. There is only so much that can be stuffed into your typical x64_86 Dell server, even replacing the entire machine with the top of the line model (having the same architecture). For this very reason, many customers opt to purchase more expensive hardware that has the advantage of facilitating vertical scalability, by allowing much more headroom for additional resources. This is why Unix-based solutions like IBM System p + AIX and Sun&amp;#8217;s Solaris + SPARC are common choices in demanding environments.&lt;/p&gt;
&lt;p&gt;For all their merits, even premium hardware solutions can only do so much in terms of vertical scalability. They may postpone the problem, by allowing a large number of processors and a huge amount of RAM to be installed, but they are still not limitless. And that&amp;#8217;s when it becomes cheaper and much more feasible to attempt horizontal scalability, or the process of adding extra servers that share data and the overall system load.&lt;/p&gt;
&lt;p&gt;Commercial databases, particularly DB2, excel at vertical scalability, which incidentally is one of the weakest aspects of open source RDBMS like MySQL. When it comes to horizontal scalability though, even commercial databases tend do struggle a little. Scalability is achieved, but a lot of work is required to configure complex setups involving masters, slaves, replication, failover servers, and so on. Until now.&lt;/p&gt;
&lt;p align="center"&gt;&lt;img src="http://antoniocangiano.com/wp-content/uploads/2009/10/pureScale530x160.jpg" alt="DB2 pureScale" /&gt;&lt;/p&gt;
&lt;p&gt;IBM has just introduced a new technology for DB2 called pureScale, which accomplishes three incredible feats:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Horizontal scalability: Virtually unlimited capacity by simply adding new nodes to the cluster.&lt;/li&gt;
&lt;li&gt;Application transparency: No code changes needed.&lt;/li&gt;
&lt;li&gt;Continuos data availability: regardless of which server fails, the system will continue to operate albeit with a proportionally reduced throughput.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;DB2 pureScale applies to DB2 running on Unix (IBM System p running AIX only, for the moment), the same principles and rock solid technology employed by DB2 for z/OS Data Sharing and SYSPLEX. This technology happens to be employed by some of the largest companies in the world and it&amp;#8217;s considered the golden standard when it comes to easily create OLTP database clusters, providing virtually unlimited scalability capabilities.&lt;/p&gt;
&lt;p&gt;You can read more about it &lt;a href="http://freedb2.com/2009/10/10/for-databases-size-does-matter/"&gt;here&lt;/a&gt; and &lt;a href="http://www.ibm.com/developerworks/data/products/db2/purescale/?S_TACT=105AGX11&amp;#038;S_CMP=FP"&gt;here&lt;/a&gt;. If you are going to IOD this year, don&amp;#8217;t forget to attend &lt;a href="http://sample.iod2009.confnav.com/iod2009/webx/sessions/detail.html?id=20090813203706875443000000"&gt;this overview&lt;/a&gt; by one the architects of DB2 pureScale. And even if you can&amp;#8217;t head over to Las Vegas next week, you can still attend online our &lt;a href="https://events.webdialogs.com/portal/wipevents/register.php?id=4e91bbf910&amp;#038;l=en-US"&gt;Chat with the Lab&lt;/a&gt; today at 11:30am EST. Database scalability is a hot topic and this is going to be one of the most popular chats with the lab ever, so &lt;a href="https://events.webdialogs.com/portal/wipevents/register.php?id=4e91bbf910&amp;#038;l=en-US"&gt;register for free now&lt;/a&gt;.&lt;/p&gt;
&lt;!-- Social Bookmarks BEGIN --&gt;
&lt;div class="social_bookmark"&gt;
&lt;a&gt;&lt;strong&gt;&lt;em&gt;Bookmark and share:&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;div class="d"&gt;
&lt;br /&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://buzz.yahoo.com/submit?submitUrl=http://antoniocangiano.com/2009/10/21/what-is-db2-purescale/&amp;amp;submitHeadline=What+is+DB2+pureScale%3F&amp;amp;submitSummary=" rel="nofollow" title="Add to&amp;nbsp;Buzz"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/buzz.png" title="Add to&amp;nbsp;Buzz" alt="Add to&amp;nbsp;Buzz" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://antoniocangiano.com/2009/10/21/what-is-db2-purescale/&amp;amp;title=What+is+DB2+pureScale%3F" rel="nofollow" title="Add to&amp;nbsp;Del.icio.us"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&amp;nbsp;Del.icio.us" alt="Add to&amp;nbsp;Del.icio.us" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;amp;url=http://antoniocangiano.com/2009/10/21/what-is-db2-purescale/&amp;amp;title=What+is+DB2+pureScale%3F" rel="nofollow" title="Add to&amp;nbsp;digg"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&amp;nbsp;digg" alt="Add to&amp;nbsp;digg" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dotnetkicks.com/kick/?url=http://antoniocangiano.com/2009/10/21/what-is-db2-purescale/&amp;amp;title=What+is+DB2+pureScale%3F" rel="nofollow" title="Add to&amp;nbsp;DotNetKicks"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/dotnetkicks.png" title="Add to&amp;nbsp;DotNetKicks" alt="Add to&amp;nbsp;DotNetKicks" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dzone.com/links/add.html?description=What+is+DB2+pureScale%3F&amp;amp;url=http://antoniocangiano.com/2009/10/21/what-is-db2-purescale/&amp;amp;title=What+is+DB2+pureScale%3F" rel="nofollow" title="Add to&amp;nbsp;DZone"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/dzone.png" title="Add to&amp;nbsp;DZone" alt="Add to&amp;nbsp;DZone" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http://antoniocangiano.com/2009/10/21/what-is-db2-purescale/" rel="nofollow" title="Add to&amp;nbsp;Facebook"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&amp;nbsp;Facebook" alt="Add to&amp;nbsp;Facebook" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;amp;output=popup&amp;amp;bkmk=http://antoniocangiano.com/2009/10/21/what-is-db2-purescale/&amp;amp;title=What+is+DB2+pureScale%3F" rel="nofollow" title="Add to&amp;nbsp;Google Bookmarks"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&amp;nbsp;Google Bookmarks" alt="Add to&amp;nbsp;Google Bookmarks" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.newsvine.com/_wine/save?u=http://antoniocangiano.com/2009/10/21/what-is-db2-purescale/&amp;amp;h=What+is+DB2+pureScale%3F" rel="nofollow" title="Add to&amp;nbsp;Newsvine"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/newsvine.png" title="Add to&amp;nbsp;Newsvine" alt="Add to&amp;nbsp;Newsvine" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://antoniocangiano.com/2009/10/21/what-is-db2-purescale/&amp;amp;title=What+is+DB2+pureScale%3F" rel="nofollow" title="Add to&amp;nbsp;reddit"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&amp;nbsp;reddit" alt="Add to&amp;nbsp;reddit" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://slashdot.org/bookmark.pl?url=http://antoniocangiano.com/2009/10/21/what-is-db2-purescale/&amp;amp;title=What+is+DB2+pureScale%3F" rel="nofollow" title="Add to&amp;nbsp;Slashdot"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/slashdot.png" title="Add to&amp;nbsp;Slashdot" alt="Add to&amp;nbsp;Slashdot" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://antoniocangiano.com/2009/10/21/what-is-db2-purescale/&amp;amp;title=What+is+DB2+pureScale%3F" rel="nofollow" title="Add to&amp;nbsp;Stumble Upon"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&amp;nbsp;Stumble Upon" alt="Add to&amp;nbsp;Stumble Upon" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.squidoo.com/lensmaster/bookmark?http://antoniocangiano.com/2009/10/21/what-is-db2-purescale/" rel="nofollow" title="Add to&amp;nbsp;Squidoo"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/squidoo.png" title="Add to&amp;nbsp;Squidoo" alt="Add to&amp;nbsp;Squidoo" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.sphere.com/sphereit/http://antoniocangiano.com/2009/10/21/what-is-db2-purescale/" rel="nofollow" title="Add to&amp;nbsp;SphereIt"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/sphereit.png" title="Add to&amp;nbsp;SphereIt" alt="Add to&amp;nbsp;SphereIt" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://antoniocangiano.com/2009/10/21/what-is-db2-purescale/" rel="nofollow" title="Add to&amp;nbsp;Technorati"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&amp;nbsp;Technorati" alt="Add to&amp;nbsp;Technorati" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+What+is+DB2+pureScale%3F+@+http://antoniocangiano.com/2009/10/21/what-is-db2-purescale/" rel="nofollow" title="Add to&amp;nbsp;Twitter"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&amp;nbsp;Twitter" alt="Add to&amp;nbsp;Twitter" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://antoniocangiano.com/2009/10/21/what-is-db2-purescale/&amp;amp;t=What+is+DB2+pureScale%3F" rel="nofollow" title="Add to&amp;nbsp;Yahoo My Web"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&amp;nbsp;Yahoo My Web" alt="Add to&amp;nbsp;Yahoo My Web" /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;!-- Social Bookmarks END --&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=PUUyPyDUKlY:uGTZTjGVNGY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=PUUyPyDUKlY:uGTZTjGVNGY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?i=PUUyPyDUKlY:uGTZTjGVNGY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=PUUyPyDUKlY:uGTZTjGVNGY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?i=PUUyPyDUKlY:uGTZTjGVNGY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=PUUyPyDUKlY:uGTZTjGVNGY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=PUUyPyDUKlY:uGTZTjGVNGY:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=PUUyPyDUKlY:uGTZTjGVNGY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?i=PUUyPyDUKlY:uGTZTjGVNGY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ZenAndTheArtOfRubyProgramming/~4/PUUyPyDUKlY" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://antoniocangiano.com/2009/10/21/what-is-db2-purescale/#comments" thr:count="3" />
		<link rel="replies" type="application/atom+xml" href="http://antoniocangiano.com/2009/10/21/what-is-db2-purescale/feed/atom/" thr:count="3" />
		<thr:total>3</thr:total>
	<feedburner:origLink>http://antoniocangiano.com/2009/10/21/what-is-db2-purescale/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Antonio Cangiano</name>
						<uri>http://antoniocangiano.com</uri>
					</author>
		<title type="html"><![CDATA[Add code highlighting to your Google Waves]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ZenAndTheArtOfRubyProgramming/~3/L3POKerdLiE/" />
		<id>http://antoniocangiano.com/?p=1110</id>
		<updated>2009-10-20T00:53:46Z</updated>
		<published>2009-10-20T00:53:46Z</published>
		<category scheme="http://antoniocangiano.com" term="General" /><category scheme="http://antoniocangiano.com" term="Quick Tips" />		<summary type="html"><![CDATA[Google Wave is still rough around the edges, but it has a lot of potential in terms of becoming a great collaboration tool. As a developer, your first question will probably be: &#8220;How do I add code highlighting to my waves?&#8221;. The answer is straightforward, however not very easy to find if you google it. [...]]]></summary>
		<content type="html" xml:base="http://antoniocangiano.com/2009/10/19/add-code-highlighting-to-your-google-waves/">&lt;p&gt;Google Wave is still rough around the edges, but it has a lot of potential in terms of becoming a great collaboration tool. As a developer, your first question will probably be: &amp;#8220;How do I add code highlighting to my waves?&amp;#8221;. The answer is straightforward, however not very easy to find if you google it. I hope this post will help fellow developers who are experimenting with Google Wave.&lt;/p&gt;
&lt;p&gt;The following steps are required to obtain syntax highlighting for your code:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create a new wave and add the Syntaxy robot to your wave. Use the wave address: &lt;strong&gt;kasyntaxy@appspot.com&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reply&lt;/strong&gt; to your first message or within it, thereby creating a reply (called &amp;#8220;blip&amp;#8221; in Google lingo).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Specify your code&amp;#8217;s language&lt;/strong&gt;, prefixing the name with a hash and exclamation mark, like #!python or #!ruby.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;At this point, as you type the code in your blip it will be highlighted by the Syntaxy bot as shown in the picture below:&lt;/p&gt;
&lt;p align="center"&gt;&lt;img src="http://antoniocangiano.com/wp-content/uploads/2009/10/wave-syntaxy.png" alt="Highlight code on Google Wave" /&gt;&lt;/p&gt;
&lt;p&gt;More advanced automatic syntax highlighting bots will probably appear as Google Wave progresses, but this one should do the trick for now. On a side note, if you copy and paste code from XCode, the code formatting will be kept in your waves and blips without the need for bots.&lt;/p&gt;
&lt;!-- Social Bookmarks BEGIN --&gt;
&lt;div class="social_bookmark"&gt;
&lt;a&gt;&lt;strong&gt;&lt;em&gt;Bookmark and share:&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;div class="d"&gt;
&lt;br /&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://buzz.yahoo.com/submit?submitUrl=http://antoniocangiano.com/2009/10/19/add-code-highlighting-to-your-google-waves/&amp;amp;submitHeadline=Add+code+highlighting+to+your+Google+Waves&amp;amp;submitSummary=" rel="nofollow" title="Add to&amp;nbsp;Buzz"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/buzz.png" title="Add to&amp;nbsp;Buzz" alt="Add to&amp;nbsp;Buzz" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://antoniocangiano.com/2009/10/19/add-code-highlighting-to-your-google-waves/&amp;amp;title=Add+code+highlighting+to+your+Google+Waves" rel="nofollow" title="Add to&amp;nbsp;Del.icio.us"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&amp;nbsp;Del.icio.us" alt="Add to&amp;nbsp;Del.icio.us" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;amp;url=http://antoniocangiano.com/2009/10/19/add-code-highlighting-to-your-google-waves/&amp;amp;title=Add+code+highlighting+to+your+Google+Waves" rel="nofollow" title="Add to&amp;nbsp;digg"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&amp;nbsp;digg" alt="Add to&amp;nbsp;digg" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dotnetkicks.com/kick/?url=http://antoniocangiano.com/2009/10/19/add-code-highlighting-to-your-google-waves/&amp;amp;title=Add+code+highlighting+to+your+Google+Waves" rel="nofollow" title="Add to&amp;nbsp;DotNetKicks"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/dotnetkicks.png" title="Add to&amp;nbsp;DotNetKicks" alt="Add to&amp;nbsp;DotNetKicks" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dzone.com/links/add.html?description=Add+code+highlighting+to+your+Google+Waves&amp;amp;url=http://antoniocangiano.com/2009/10/19/add-code-highlighting-to-your-google-waves/&amp;amp;title=Add+code+highlighting+to+your+Google+Waves" rel="nofollow" title="Add to&amp;nbsp;DZone"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/dzone.png" title="Add to&amp;nbsp;DZone" alt="Add to&amp;nbsp;DZone" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http://antoniocangiano.com/2009/10/19/add-code-highlighting-to-your-google-waves/" rel="nofollow" title="Add to&amp;nbsp;Facebook"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&amp;nbsp;Facebook" alt="Add to&amp;nbsp;Facebook" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;amp;output=popup&amp;amp;bkmk=http://antoniocangiano.com/2009/10/19/add-code-highlighting-to-your-google-waves/&amp;amp;title=Add+code+highlighting+to+your+Google+Waves" rel="nofollow" title="Add to&amp;nbsp;Google Bookmarks"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&amp;nbsp;Google Bookmarks" alt="Add to&amp;nbsp;Google Bookmarks" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.newsvine.com/_wine/save?u=http://antoniocangiano.com/2009/10/19/add-code-highlighting-to-your-google-waves/&amp;amp;h=Add+code+highlighting+to+your+Google+Waves" rel="nofollow" title="Add to&amp;nbsp;Newsvine"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/newsvine.png" title="Add to&amp;nbsp;Newsvine" alt="Add to&amp;nbsp;Newsvine" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://antoniocangiano.com/2009/10/19/add-code-highlighting-to-your-google-waves/&amp;amp;title=Add+code+highlighting+to+your+Google+Waves" rel="nofollow" title="Add to&amp;nbsp;reddit"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&amp;nbsp;reddit" alt="Add to&amp;nbsp;reddit" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://slashdot.org/bookmark.pl?url=http://antoniocangiano.com/2009/10/19/add-code-highlighting-to-your-google-waves/&amp;amp;title=Add+code+highlighting+to+your+Google+Waves" rel="nofollow" title="Add to&amp;nbsp;Slashdot"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/slashdot.png" title="Add to&amp;nbsp;Slashdot" alt="Add to&amp;nbsp;Slashdot" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://antoniocangiano.com/2009/10/19/add-code-highlighting-to-your-google-waves/&amp;amp;title=Add+code+highlighting+to+your+Google+Waves" rel="nofollow" title="Add to&amp;nbsp;Stumble Upon"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&amp;nbsp;Stumble Upon" alt="Add to&amp;nbsp;Stumble Upon" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.squidoo.com/lensmaster/bookmark?http://antoniocangiano.com/2009/10/19/add-code-highlighting-to-your-google-waves/" rel="nofollow" title="Add to&amp;nbsp;Squidoo"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/squidoo.png" title="Add to&amp;nbsp;Squidoo" alt="Add to&amp;nbsp;Squidoo" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.sphere.com/sphereit/http://antoniocangiano.com/2009/10/19/add-code-highlighting-to-your-google-waves/" rel="nofollow" title="Add to&amp;nbsp;SphereIt"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/sphereit.png" title="Add to&amp;nbsp;SphereIt" alt="Add to&amp;nbsp;SphereIt" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://antoniocangiano.com/2009/10/19/add-code-highlighting-to-your-google-waves/" rel="nofollow" title="Add to&amp;nbsp;Technorati"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&amp;nbsp;Technorati" alt="Add to&amp;nbsp;Technorati" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+Add+code+highlighting+to+your+Google+Waves+@+http://antoniocangiano.com/2009/10/19/add-code-highlighting-to-your-google-waves/" rel="nofollow" title="Add to&amp;nbsp;Twitter"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&amp;nbsp;Twitter" alt="Add to&amp;nbsp;Twitter" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://antoniocangiano.com/2009/10/19/add-code-highlighting-to-your-google-waves/&amp;amp;t=Add+code+highlighting+to+your+Google+Waves" rel="nofollow" title="Add to&amp;nbsp;Yahoo My Web"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&amp;nbsp;Yahoo My Web" alt="Add to&amp;nbsp;Yahoo My Web" /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;!-- Social Bookmarks END --&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=L3POKerdLiE:A4uKnyxxlys:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=L3POKerdLiE:A4uKnyxxlys:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?i=L3POKerdLiE:A4uKnyxxlys:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=L3POKerdLiE:A4uKnyxxlys:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?i=L3POKerdLiE:A4uKnyxxlys:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=L3POKerdLiE:A4uKnyxxlys:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=L3POKerdLiE:A4uKnyxxlys:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=L3POKerdLiE:A4uKnyxxlys:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?i=L3POKerdLiE:A4uKnyxxlys:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ZenAndTheArtOfRubyProgramming/~4/L3POKerdLiE" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://antoniocangiano.com/2009/10/19/add-code-highlighting-to-your-google-waves/#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://antoniocangiano.com/2009/10/19/add-code-highlighting-to-your-google-waves/feed/atom/" thr:count="1" />
		<thr:total>1</thr:total>
	<feedburner:origLink>http://antoniocangiano.com/2009/10/19/add-code-highlighting-to-your-google-waves/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Antonio Cangiano</name>
						<uri>http://antoniocangiano.com</uri>
					</author>
		<title type="html"><![CDATA[Getting MacRuby&#8217;s compiler to work]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ZenAndTheArtOfRubyProgramming/~3/CGgSLe6J-eg/" />
		<id>http://antoniocangiano.com/?p=1107</id>
		<updated>2009-10-08T20:49:32Z</updated>
		<published>2009-10-08T20:45:13Z</published>
		<category scheme="http://antoniocangiano.com" term="Mac" /><category scheme="http://antoniocangiano.com" term="Quick Tips" /><category scheme="http://antoniocangiano.com" term="Ruby" />		<summary type="html"><![CDATA[There is major news in Rubyland today. MacRuby&#8217;s team just released their fist beta of version 0.5 (an experimental, still incomplete version of Ruby), which brings JIT, removal of the dreaded GIL (Global Interpreter Lock), native threads, GCD (Grand Central Dispatch) for multicore computing, and a whole new set of features found in the release [...]]]></summary>
		<content type="html" xml:base="http://antoniocangiano.com/2009/10/08/getting-macrubys-compiler-to-work/">&lt;p&gt;&lt;img src="http://antoniocangiano.com/wp-content/uploads/2009/10/macruby_logo.png" align="right" alt="MacRuby's logo" /&gt;There is major news in Rubyland today. MacRuby&amp;#8217;s team just released their fist beta of version 0.5 (an experimental, still incomplete version of Ruby), which brings JIT, removal of the dreaded GIL (Global Interpreter Lock), native threads, GCD (Grand Central Dispatch) for multicore computing, and a whole new set of features found in &lt;a href="http://www.macruby.org/blog/2009/10/07/macruby05b1.html"&gt;the release announcement&lt;/a&gt; to the table.&lt;/p&gt;
&lt;p&gt;The most important new feature is the presence of a compiler. That&amp;#8217;s right, thanks to this release, Ruby code can now become highly optimized executable code. How awesome is that? I can sense that you&amp;#8217;re pumped by this news, so why not head over to MacRuby.com and &lt;a href="http://www.macruby.org/downloads.html"&gt;download the installation file&lt;/a&gt; for yourself? After you&amp;#8217;ve done that, the next thing you&amp;#8217;re going to want to do is run a small test like the following:&lt;/p&gt;
&lt;div class="highlight"&gt;
&lt;pre&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;macrubyc world_domination.rb -o world_domination
&lt;span class="s1"&gt;Can&amp;#39;t locate program `llc&amp;#39;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Oh noes! llc is a tool that ships with the LLVM (upon which MacRuby is built), however it&amp;#8217;s not included with MacRuby&amp;#8217;s installer (it will be in the future). But fear not my friends, there is a solution:&lt;/p&gt;
&lt;div class="highlight"&gt;
&lt;pre&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;svn co -r 82747 https://llvm.org/svn/llvm-project/llvm/trunk llvm-trunk
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;llvm-trunk
&lt;span class="nv"&gt;$ &lt;/span&gt;./configure
&lt;span class="nv"&gt;$ UNIVERSAL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;UNIVERSAL_ARCH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;i386 x86_64&amp;quot;&lt;/span&gt; &lt;span class="nv"&gt;ENABLE_OPTIMIZED&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 make -j2
&lt;span class="nv"&gt;$ &lt;/span&gt;sudo env &lt;span class="nv"&gt;UNIVERSAL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;UNIVERSAL_ARCH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;i386 x86_64&amp;quot;&lt;/span&gt; &lt;span class="nv"&gt;ENABLE_OPTIMIZED&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 make install
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;If your machine does not have 2 cores, remove the -j2 option from the fourth line or adjust the number accordingly.&lt;/p&gt;
&lt;p&gt;The compilation phase may take a couple of centuries, depending on your machine&amp;#8217;s speed, but it should eventually build the LLVM. &lt;img src='http://antoniocangiano.com/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' /&gt;  llc will be placed in your PATH, and you&amp;#8217;ll finally be able to compile Ruby code and obtain an executable to help you carry out your world domination plans.&lt;/p&gt;
&lt;div class="highlight"&gt;
&lt;pre&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;macrubyc world_domination.rb -o world_domination
&lt;span class="nv"&gt;$ &lt;/span&gt;./world_domination
MUAHAHAHAHA!
&lt;/pre&gt;
&lt;/div&gt;
&lt;!-- Social Bookmarks BEGIN --&gt;
&lt;div class="social_bookmark"&gt;
&lt;a&gt;&lt;strong&gt;&lt;em&gt;Bookmark and share:&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;div class="d"&gt;
&lt;br /&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://buzz.yahoo.com/submit?submitUrl=http://antoniocangiano.com/2009/10/08/getting-macrubys-compiler-to-work/&amp;amp;submitHeadline=Getting+MacRuby%26%238217%3Bs+compiler+to+work&amp;amp;submitSummary=" rel="nofollow" title="Add to&amp;nbsp;Buzz"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/buzz.png" title="Add to&amp;nbsp;Buzz" alt="Add to&amp;nbsp;Buzz" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://antoniocangiano.com/2009/10/08/getting-macrubys-compiler-to-work/&amp;amp;title=Getting+MacRuby%26%238217%3Bs+compiler+to+work" rel="nofollow" title="Add to&amp;nbsp;Del.icio.us"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&amp;nbsp;Del.icio.us" alt="Add to&amp;nbsp;Del.icio.us" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;amp;url=http://antoniocangiano.com/2009/10/08/getting-macrubys-compiler-to-work/&amp;amp;title=Getting+MacRuby%26%238217%3Bs+compiler+to+work" rel="nofollow" title="Add to&amp;nbsp;digg"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&amp;nbsp;digg" alt="Add to&amp;nbsp;digg" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dotnetkicks.com/kick/?url=http://antoniocangiano.com/2009/10/08/getting-macrubys-compiler-to-work/&amp;amp;title=Getting+MacRuby%26%238217%3Bs+compiler+to+work" rel="nofollow" title="Add to&amp;nbsp;DotNetKicks"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/dotnetkicks.png" title="Add to&amp;nbsp;DotNetKicks" alt="Add to&amp;nbsp;DotNetKicks" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dzone.com/links/add.html?description=Getting+MacRuby%26%238217%3Bs+compiler+to+work&amp;amp;url=http://antoniocangiano.com/2009/10/08/getting-macrubys-compiler-to-work/&amp;amp;title=Getting+MacRuby%26%238217%3Bs+compiler+to+work" rel="nofollow" title="Add to&amp;nbsp;DZone"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/dzone.png" title="Add to&amp;nbsp;DZone" alt="Add to&amp;nbsp;DZone" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http://antoniocangiano.com/2009/10/08/getting-macrubys-compiler-to-work/" rel="nofollow" title="Add to&amp;nbsp;Facebook"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&amp;nbsp;Facebook" alt="Add to&amp;nbsp;Facebook" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;amp;output=popup&amp;amp;bkmk=http://antoniocangiano.com/2009/10/08/getting-macrubys-compiler-to-work/&amp;amp;title=Getting+MacRuby%26%238217%3Bs+compiler+to+work" rel="nofollow" title="Add to&amp;nbsp;Google Bookmarks"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&amp;nbsp;Google Bookmarks" alt="Add to&amp;nbsp;Google Bookmarks" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.newsvine.com/_wine/save?u=http://antoniocangiano.com/2009/10/08/getting-macrubys-compiler-to-work/&amp;amp;h=Getting+MacRuby%26%238217%3Bs+compiler+to+work" rel="nofollow" title="Add to&amp;nbsp;Newsvine"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/newsvine.png" title="Add to&amp;nbsp;Newsvine" alt="Add to&amp;nbsp;Newsvine" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://antoniocangiano.com/2009/10/08/getting-macrubys-compiler-to-work/&amp;amp;title=Getting+MacRuby%26%238217%3Bs+compiler+to+work" rel="nofollow" title="Add to&amp;nbsp;reddit"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&amp;nbsp;reddit" alt="Add to&amp;nbsp;reddit" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://slashdot.org/bookmark.pl?url=http://antoniocangiano.com/2009/10/08/getting-macrubys-compiler-to-work/&amp;amp;title=Getting+MacRuby%26%238217%3Bs+compiler+to+work" rel="nofollow" title="Add to&amp;nbsp;Slashdot"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/slashdot.png" title="Add to&amp;nbsp;Slashdot" alt="Add to&amp;nbsp;Slashdot" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://antoniocangiano.com/2009/10/08/getting-macrubys-compiler-to-work/&amp;amp;title=Getting+MacRuby%26%238217%3Bs+compiler+to+work" rel="nofollow" title="Add to&amp;nbsp;Stumble Upon"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&amp;nbsp;Stumble Upon" alt="Add to&amp;nbsp;Stumble Upon" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.squidoo.com/lensmaster/bookmark?http://antoniocangiano.com/2009/10/08/getting-macrubys-compiler-to-work/" rel="nofollow" title="Add to&amp;nbsp;Squidoo"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/squidoo.png" title="Add to&amp;nbsp;Squidoo" alt="Add to&amp;nbsp;Squidoo" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.sphere.com/sphereit/http://antoniocangiano.com/2009/10/08/getting-macrubys-compiler-to-work/" rel="nofollow" title="Add to&amp;nbsp;SphereIt"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/sphereit.png" title="Add to&amp;nbsp;SphereIt" alt="Add to&amp;nbsp;SphereIt" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://antoniocangiano.com/2009/10/08/getting-macrubys-compiler-to-work/" rel="nofollow" title="Add to&amp;nbsp;Technorati"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&amp;nbsp;Technorati" alt="Add to&amp;nbsp;Technorati" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+Getting+MacRuby%26%238217%3Bs+compiler+to+work+@+http://antoniocangiano.com/2009/10/08/getting-macrubys-compiler-to-work/" rel="nofollow" title="Add to&amp;nbsp;Twitter"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&amp;nbsp;Twitter" alt="Add to&amp;nbsp;Twitter" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://antoniocangiano.com/2009/10/08/getting-macrubys-compiler-to-work/&amp;amp;t=Getting+MacRuby%26%238217%3Bs+compiler+to+work" rel="nofollow" title="Add to&amp;nbsp;Yahoo My Web"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&amp;nbsp;Yahoo My Web" alt="Add to&amp;nbsp;Yahoo My Web" /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;!-- Social Bookmarks END --&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=CGgSLe6J-eg:-Ebytb8eYwU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=CGgSLe6J-eg:-Ebytb8eYwU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?i=CGgSLe6J-eg:-Ebytb8eYwU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=CGgSLe6J-eg:-Ebytb8eYwU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?i=CGgSLe6J-eg:-Ebytb8eYwU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=CGgSLe6J-eg:-Ebytb8eYwU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=CGgSLe6J-eg:-Ebytb8eYwU:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=CGgSLe6J-eg:-Ebytb8eYwU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?i=CGgSLe6J-eg:-Ebytb8eYwU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ZenAndTheArtOfRubyProgramming/~4/CGgSLe6J-eg" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://antoniocangiano.com/2009/10/08/getting-macrubys-compiler-to-work/#comments" thr:count="5" />
		<link rel="replies" type="application/atom+xml" href="http://antoniocangiano.com/2009/10/08/getting-macrubys-compiler-to-work/feed/atom/" thr:count="5" />
		<thr:total>5</thr:total>
	<feedburner:origLink>http://antoniocangiano.com/2009/10/08/getting-macrubys-compiler-to-work/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Antonio Cangiano</name>
						<uri>http://antoniocangiano.com</uri>
					</author>
		<title type="html"><![CDATA[The CRTC tries to eliminate ISP competition in Canada]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ZenAndTheArtOfRubyProgramming/~3/aITyZF5Bebw/" />
		<id>http://antoniocangiano.com/?p=1106</id>
		<updated>2009-09-24T16:18:21Z</updated>
		<published>2009-09-24T16:18:21Z</published>
		<category scheme="http://antoniocangiano.com" term="Canada" /><category scheme="http://antoniocangiano.com" term="General" />		<summary type="html"><![CDATA[The CRTC is at it again. This time they want to allow Canadian phone companies to cut off their wholesale offering, essentially killing ISP competition in Canada. Please express your concerns here, where you can quickly email Industry Minister Tony Clement, Prime Minister Harper, the Opposition Leader (Michael Ignatieff) and your local MP. Let them [...]]]></summary>
		<content type="html" xml:base="http://antoniocangiano.com/2009/09/24/the-crtc-tries-to-eliminate-isp-competition-in-canada/">&lt;p&gt;The CRTC is at it again. This time they want to allow Canadian phone companies to cut off their wholesale offering, essentially killing ISP competition in Canada. Please express your concerns &lt;a href="http://www.competitivebroadband.com/make-a-difference.aspx"&gt;here&lt;/a&gt;, where you can quickly email Industry Minister Tony Clement, Prime Minister Harper, the Opposition Leader (Michael Ignatieff) and your local MP. Let them know that you care about this important issue.&lt;/p&gt;
&lt;p&gt;For more details, I&amp;#8217;m attaching an informative email I received from TekSavvy:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Hello,&lt;/p&gt;
&lt;p&gt;We need your help &amp;#8212; we need you to lend us your voice and state your opinion on a recent CRTC decision that could allow the incumbent phone companies (such as Bell and Telus) to discontinue offering services (Internet and phone) to wholesale providers which in effect would eliminate competition in Canada.&lt;/p&gt;
&lt;p&gt;With no competition to help fuel the market; Internet innovation could come to stand still and prices for broadband access could skyrocket out of control.  The incumbents would also be free to do with the lines as they please.  This would open up future privacy invading Deep Packet Inspection (DPI) technologies and direct marketing/advertising based on *you* and *your families* internet activities and habits.&lt;/p&gt;
&lt;p&gt;They could also use this same technology to turn the Internet into a pay-per-website service the same way that TV is a pay-per-channel service. Can you imagine a world where you have to pay to use the Google website to search for information?  Then, if you find what you are looking for you may be restricted to the content because your ISP doesn&amp;#8217;t have a &amp;#8220;peering&amp;#8221; agreement with said company.&lt;/p&gt;
&lt;p&gt;Please help us stop this major potential catastrophe.&lt;/p&gt;
&lt;p&gt;All concerned consumers please visit:&lt;br /&gt;
&lt;a href="http://www.competitivebroadband.com/consumer/"&gt;http://www.competitivebroadband.com/consumer/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;All concerned businesses please visit:&lt;br /&gt;
&lt;a href="http://www.competitivebroadband.com"&gt;http://www.competitivebroadband.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Read the information presented and decide for yourself.&lt;/p&gt;
&lt;p&gt;Once you&amp;#8217;ve decided what you think is right, you can click the &amp;#8220;Make a Difference&amp;#8221; link, fill out the form with your details and send a pre-written message to Minister of Industry Tony Clement, Prime Minister Harper, the Opposition Leader, and your local MP or choose to write your own.&lt;/p&gt;
&lt;p&gt;Together we can make a difference.&lt;br /&gt;
Thank you,&lt;br /&gt;
TekSavvy Solutions, Inc.&lt;/p&gt;&lt;/blockquote&gt;
&lt;!-- Social Bookmarks BEGIN --&gt;
&lt;div class="social_bookmark"&gt;
&lt;a&gt;&lt;strong&gt;&lt;em&gt;Bookmark and share:&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;div class="d"&gt;
&lt;br /&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://buzz.yahoo.com/submit?submitUrl=http://antoniocangiano.com/2009/09/24/the-crtc-tries-to-eliminate-isp-competition-in-canada/&amp;amp;submitHeadline=The+CRTC+tries+to+eliminate+ISP+competition+in+Canada&amp;amp;submitSummary=" rel="nofollow" title="Add to&amp;nbsp;Buzz"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/buzz.png" title="Add to&amp;nbsp;Buzz" alt="Add to&amp;nbsp;Buzz" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://antoniocangiano.com/2009/09/24/the-crtc-tries-to-eliminate-isp-competition-in-canada/&amp;amp;title=The+CRTC+tries+to+eliminate+ISP+competition+in+Canada" rel="nofollow" title="Add to&amp;nbsp;Del.icio.us"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&amp;nbsp;Del.icio.us" alt="Add to&amp;nbsp;Del.icio.us" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;amp;url=http://antoniocangiano.com/2009/09/24/the-crtc-tries-to-eliminate-isp-competition-in-canada/&amp;amp;title=The+CRTC+tries+to+eliminate+ISP+competition+in+Canada" rel="nofollow" title="Add to&amp;nbsp;digg"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&amp;nbsp;digg" alt="Add to&amp;nbsp;digg" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dotnetkicks.com/kick/?url=http://antoniocangiano.com/2009/09/24/the-crtc-tries-to-eliminate-isp-competition-in-canada/&amp;amp;title=The+CRTC+tries+to+eliminate+ISP+competition+in+Canada" rel="nofollow" title="Add to&amp;nbsp;DotNetKicks"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/dotnetkicks.png" title="Add to&amp;nbsp;DotNetKicks" alt="Add to&amp;nbsp;DotNetKicks" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dzone.com/links/add.html?description=The+CRTC+tries+to+eliminate+ISP+competition+in+Canada&amp;amp;url=http://antoniocangiano.com/2009/09/24/the-crtc-tries-to-eliminate-isp-competition-in-canada/&amp;amp;title=The+CRTC+tries+to+eliminate+ISP+competition+in+Canada" rel="nofollow" title="Add to&amp;nbsp;DZone"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/dzone.png" title="Add to&amp;nbsp;DZone" alt="Add to&amp;nbsp;DZone" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http://antoniocangiano.com/2009/09/24/the-crtc-tries-to-eliminate-isp-competition-in-canada/" rel="nofollow" title="Add to&amp;nbsp;Facebook"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&amp;nbsp;Facebook" alt="Add to&amp;nbsp;Facebook" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;amp;output=popup&amp;amp;bkmk=http://antoniocangiano.com/2009/09/24/the-crtc-tries-to-eliminate-isp-competition-in-canada/&amp;amp;title=The+CRTC+tries+to+eliminate+ISP+competition+in+Canada" rel="nofollow" title="Add to&amp;nbsp;Google Bookmarks"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&amp;nbsp;Google Bookmarks" alt="Add to&amp;nbsp;Google Bookmarks" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.newsvine.com/_wine/save?u=http://antoniocangiano.com/2009/09/24/the-crtc-tries-to-eliminate-isp-competition-in-canada/&amp;amp;h=The+CRTC+tries+to+eliminate+ISP+competition+in+Canada" rel="nofollow" title="Add to&amp;nbsp;Newsvine"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/newsvine.png" title="Add to&amp;nbsp;Newsvine" alt="Add to&amp;nbsp;Newsvine" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://antoniocangiano.com/2009/09/24/the-crtc-tries-to-eliminate-isp-competition-in-canada/&amp;amp;title=The+CRTC+tries+to+eliminate+ISP+competition+in+Canada" rel="nofollow" title="Add to&amp;nbsp;reddit"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&amp;nbsp;reddit" alt="Add to&amp;nbsp;reddit" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://slashdot.org/bookmark.pl?url=http://antoniocangiano.com/2009/09/24/the-crtc-tries-to-eliminate-isp-competition-in-canada/&amp;amp;title=The+CRTC+tries+to+eliminate+ISP+competition+in+Canada" rel="nofollow" title="Add to&amp;nbsp;Slashdot"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/slashdot.png" title="Add to&amp;nbsp;Slashdot" alt="Add to&amp;nbsp;Slashdot" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://antoniocangiano.com/2009/09/24/the-crtc-tries-to-eliminate-isp-competition-in-canada/&amp;amp;title=The+CRTC+tries+to+eliminate+ISP+competition+in+Canada" rel="nofollow" title="Add to&amp;nbsp;Stumble Upon"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&amp;nbsp;Stumble Upon" alt="Add to&amp;nbsp;Stumble Upon" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.squidoo.com/lensmaster/bookmark?http://antoniocangiano.com/2009/09/24/the-crtc-tries-to-eliminate-isp-competition-in-canada/" rel="nofollow" title="Add to&amp;nbsp;Squidoo"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/squidoo.png" title="Add to&amp;nbsp;Squidoo" alt="Add to&amp;nbsp;Squidoo" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.sphere.com/sphereit/http://antoniocangiano.com/2009/09/24/the-crtc-tries-to-eliminate-isp-competition-in-canada/" rel="nofollow" title="Add to&amp;nbsp;SphereIt"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/sphereit.png" title="Add to&amp;nbsp;SphereIt" alt="Add to&amp;nbsp;SphereIt" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://antoniocangiano.com/2009/09/24/the-crtc-tries-to-eliminate-isp-competition-in-canada/" rel="nofollow" title="Add to&amp;nbsp;Technorati"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&amp;nbsp;Technorati" alt="Add to&amp;nbsp;Technorati" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+The+CRTC+tries+to+eliminate+ISP+competition+in+Canada+@+http://antoniocangiano.com/2009/09/24/the-crtc-tries-to-eliminate-isp-competition-in-canada/" rel="nofollow" title="Add to&amp;nbsp;Twitter"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&amp;nbsp;Twitter" alt="Add to&amp;nbsp;Twitter" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://antoniocangiano.com/2009/09/24/the-crtc-tries-to-eliminate-isp-competition-in-canada/&amp;amp;t=The+CRTC+tries+to+eliminate+ISP+competition+in+Canada" rel="nofollow" title="Add to&amp;nbsp;Yahoo My Web"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&amp;nbsp;Yahoo My Web" alt="Add to&amp;nbsp;Yahoo My Web" /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;!-- Social Bookmarks END --&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=aITyZF5Bebw:eJMktrGPBbk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=aITyZF5Bebw:eJMktrGPBbk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?i=aITyZF5Bebw:eJMktrGPBbk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=aITyZF5Bebw:eJMktrGPBbk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?i=aITyZF5Bebw:eJMktrGPBbk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=aITyZF5Bebw:eJMktrGPBbk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=aITyZF5Bebw:eJMktrGPBbk:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=aITyZF5Bebw:eJMktrGPBbk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?i=aITyZF5Bebw:eJMktrGPBbk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ZenAndTheArtOfRubyProgramming/~4/aITyZF5Bebw" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://antoniocangiano.com/2009/09/24/the-crtc-tries-to-eliminate-isp-competition-in-canada/#comments" thr:count="2" />
		<link rel="replies" type="application/atom+xml" href="http://antoniocangiano.com/2009/09/24/the-crtc-tries-to-eliminate-isp-competition-in-canada/feed/atom/" thr:count="2" />
		<thr:total>2</thr:total>
	<feedburner:origLink>http://antoniocangiano.com/2009/09/24/the-crtc-tries-to-eliminate-isp-competition-in-canada/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Antonio Cangiano</name>
						<uri>http://antoniocangiano.com</uri>
					</author>
		<title type="html"><![CDATA[Benchmarking Tornado vs. Twisted Web vs. Tornado on Twisted]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ZenAndTheArtOfRubyProgramming/~3/QPHxkdqB9mI/" />
		<id>http://antoniocangiano.com/?p=1104</id>
		<updated>2009-09-14T07:10:11Z</updated>
		<published>2009-09-13T12:07:51Z</published>
		<category scheme="http://antoniocangiano.com" term="Python" />		<summary type="html"><![CDATA[FriendFeed, which was recently acquired by Facebook, just released an interesting piece of open source software.
Tornado is an open source version of the scalable, non-blocking web server and tools that power FriendFeed. The FriendFeed application is written using a web framework that looks a bit like web.py or Google&#8217;s webapp, but with additional tools and [...]]]></summary>
		<content type="html" xml:base="http://antoniocangiano.com/2009/09/13/benchmarking-tornado-vs-twisted-web-vs-tornado-on-twisted/">&lt;p&gt;FriendFeed, which was recently acquired by Facebook, just released an interesting piece of open source software.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;a href="http://www.tornadoweb.org/"&gt;Tornado&lt;/a&gt; is an open source version of the scalable, non-blocking web server and tools that power FriendFeed. The FriendFeed application is written using a web framework that looks a bit like web.py or Google&amp;#8217;s webapp, but with additional tools and optimizations to take advantage of the underlying non-blocking infrastructure.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;big&gt;&lt;strong&gt;The story so far&lt;/strong&gt;&lt;/big&gt;&lt;/p&gt;
&lt;p&gt;This release generated widespread interest among the Python and open source development communities. Rightfully so. There are many reasons to like Tornado. To begin with, it&amp;#8217;s fast &amp;mdash; and that&amp;#8217;s fundamental for a web server. By using nginx as a load balancer and a static file server, and running a few Tornado instances (usually one per core available on the machine) it&amp;#8217;s possible to handle thousands upon thousands of concurrent connections on relatively modest hardware; and this isn&amp;#8217;t just theory. Tornado has already proven its worth in the field, by allowing FriendFeed to scale graciously.&lt;/p&gt;
&lt;p&gt;Tornado is not only a fast web server, it acts as a very lightweight application framework as well. As such, it&amp;#8217;s an appealing alternative to well established frameworks to the growing group of developers who&amp;#8217;d like to develop &amp;#8220;closer to the metal&amp;#8221; and avoid the baggage associated with full-fledged web frameworks. The two things combined make Tornado ideal for developing &amp;#8220;real time&amp;#8221; web services and applications.&lt;/p&gt;
&lt;p&gt;The feedback so far hasn&amp;#8217;t been all positive though. &lt;a href="http://glyph.twistedmatrix.com/2009/09/what-i-wish-tornado-were.html"&gt;Criticism of the project&lt;/a&gt; has mainly focused on the lack of test coverage and the fact that FriendFeed has opted not to contribute to, and improve on, the existing Twisted Web project (which has similar goals). To make things worse, there were a few nonchalant comments about it as well. Performance issues and lack of ease of use were the reported motivations for starting a new project from scratch.&lt;/p&gt;
&lt;p&gt;Dustin Sallings started working on a hybrid solution (henceforth &lt;a href="http://dustin.github.com/2009/09/12/tornado.html"&gt;Tornado on Twisted&lt;/a&gt;) that would reportedly keep the good parts that Tornado introduced, while using Twisted as its core for networking and HTTP parsing.&lt;/p&gt;
&lt;p&gt;At this point I became naturally curious about the speed of these three web servers. Is Tornado really faster than Twisted Web? And what about Tornado on Twisted, would it be faster or slower? Let&amp;#8217;s find out.&lt;/p&gt;
&lt;p&gt;&lt;big&gt;&lt;strong&gt;Benchmark results&lt;/strong&gt;&lt;/big&gt;&lt;/p&gt;
&lt;p&gt;I ran a simple Hello World app for all three web servers. All the web servers were run in standalone mode without a load balancer. I stress tested the web servers with httperf using a progressively larger amount of concurrent requests. 100,000 requests were generated for each test. The web servers were run on a desktop machine with an Intel® Core™2 Quad Processor Q6600 (8M Cache, 2.40 GHz, 1066 MHz FSB) processor and 8GB of RAM. The operating system of choice was Ubuntu 9.04 (x86_64).&lt;/p&gt;
&lt;p&gt;Without further ado, here are the results:&lt;/p&gt;
&lt;p align="center"&gt;&lt;img src="http://antoniocangiano.com/images/python-throughput.png" alt="Throughput for Tornado, Twisted, and Tornado on Twisted" /&gt;&lt;/p&gt;
&lt;p&gt;As you can see Tornado turned out to be faster than the rest of the Python web servers. Handling a peak of almost 3900 req/s with a single front-end and on commodity hardware is nothing to sneer at.&lt;/p&gt;
&lt;p&gt;Twisted Web didn&amp;#8217;t do too bad either (max. 2703.7 req/s), but the difference in performance is noticeable. Likewise, the performance of Tornado on Twisted was virtually identical to that of Twisted Web.&lt;/p&gt;
&lt;p&gt;There you have it. I was curious about the possible outcome and now I know. Remember, this is a report on the numbers I got on my machine, not a research paper. But I hope that you find them interesting nevertheless.&lt;/p&gt;
&lt;p&gt;&lt;big&gt;&lt;strong&gt;Show me the code&lt;/strong&gt;&lt;/big&gt;&lt;/p&gt;
&lt;p&gt;Tornado:&lt;/p&gt;
&lt;div class="highlight"&gt;
&lt;pre&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;tornado.httpserver&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;tornado.ioloop&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;tornado.options&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;tornado.web&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;logging&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;tornado.options&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;define&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;options&lt;/span&gt;

&lt;span class="n"&gt;define&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;port&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;default&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;8888&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;help&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;run on the given port&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MainHandler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tornado&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;web&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RequestHandler&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Hello, world!&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;tornado&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parse_command_line&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;application&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tornado&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;web&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Application&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;r&amp;quot;/&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;MainHandler&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="n"&gt;http_server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tornado&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;httpserver&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HTTPServer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;application&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;http_server&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;tornado&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ioloop&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IOLoop&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;instance&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;__main__&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Twisted Web:&lt;/p&gt;
&lt;div class="highlight"&gt;
&lt;pre&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;twisted.internet&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;epollreactor&lt;/span&gt;
&lt;span class="n"&gt;epollreactor&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;install&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;twisted.internet&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;reactor&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;twisted.web&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;resource&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Simple&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;resource&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Resource&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;isLeaf&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;render_GET&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Hello, world!&amp;quot;&lt;/span&gt;

&lt;span class="n"&gt;site&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Site&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Simple&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="n"&gt;reactor&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;listenTCP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;8888&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;site&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;reactor&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Tornado on Twisted:&lt;/p&gt;
&lt;div class="highlight"&gt;
&lt;pre&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;twisted.internet&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;epollreactor&lt;/span&gt;
&lt;span class="n"&gt;epollreactor&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;install&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;twisted.internet&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;reactor&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;tornado.options&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;tornado.twister&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;tornado.web&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;logging&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;tornado.options&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;define&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;options&lt;/span&gt;

&lt;span class="n"&gt;define&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;port&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;default&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;8888&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;help&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;run on the given port&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MainHandler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tornado&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;web&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RequestHandler&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Hello, world!&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;tornado&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parse_command_line&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;application&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tornado&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;web&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Application&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;r&amp;quot;/&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;MainHandler&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;])&lt;/span&gt;

    &lt;span class="n"&gt;site&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tornado&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;twister&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;TornadoSite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;application&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;reactor&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;listenTCP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;site&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;reactor&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;__main__&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;UPDATE (September 14, 2009):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The original version of this post included Unicorn as well. This wasn&amp;#8217;t fair however, since it&amp;#8217;s not an asynchronous web server.&lt;/li&gt;
&lt;li&gt;EventMachine HTTP Server was added, but I have since decided to remove it as I prefer to let the article be a fair comparison between asynchronous Python web servers.&lt;/li&gt;
&lt;li&gt;I initially used Apache Benchmark (ab). The results were misleading at best. I re-ran the tests with httperf and updated the results above.&lt;/li&gt;
&lt;li&gt;Stock Tornado couldn&amp;#8217;t be tested with httperf because their HTTP Server doesn&amp;#8217;t implement getClientIP(). I had to manually modify a method to return the remote ip address. This may introduce a very minimal advantage for Tornado, but it should be negligible in this context.&lt;/li&gt;
&lt;li&gt;I modified the examples for Twisted and Tornado on Twisted, to ensure that both took advantage of the epoll-based reactor.&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- Social Bookmarks BEGIN --&gt;
&lt;div class="social_bookmark"&gt;
&lt;a&gt;&lt;strong&gt;&lt;em&gt;Bookmark and share:&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;div class="d"&gt;
&lt;br /&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://buzz.yahoo.com/submit?submitUrl=http://antoniocangiano.com/2009/09/13/benchmarking-tornado-vs-twisted-web-vs-tornado-on-twisted/&amp;amp;submitHeadline=Benchmarking+Tornado+vs.+Twisted+Web+vs.+Tornado+on+Twisted&amp;amp;submitSummary=" rel="nofollow" title="Add to&amp;nbsp;Buzz"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/buzz.png" title="Add to&amp;nbsp;Buzz" alt="Add to&amp;nbsp;Buzz" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://antoniocangiano.com/2009/09/13/benchmarking-tornado-vs-twisted-web-vs-tornado-on-twisted/&amp;amp;title=Benchmarking+Tornado+vs.+Twisted+Web+vs.+Tornado+on+Twisted" rel="nofollow" title="Add to&amp;nbsp;Del.icio.us"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&amp;nbsp;Del.icio.us" alt="Add to&amp;nbsp;Del.icio.us" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;amp;url=http://antoniocangiano.com/2009/09/13/benchmarking-tornado-vs-twisted-web-vs-tornado-on-twisted/&amp;amp;title=Benchmarking+Tornado+vs.+Twisted+Web+vs.+Tornado+on+Twisted" rel="nofollow" title="Add to&amp;nbsp;digg"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&amp;nbsp;digg" alt="Add to&amp;nbsp;digg" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dotnetkicks.com/kick/?url=http://antoniocangiano.com/2009/09/13/benchmarking-tornado-vs-twisted-web-vs-tornado-on-twisted/&amp;amp;title=Benchmarking+Tornado+vs.+Twisted+Web+vs.+Tornado+on+Twisted" rel="nofollow" title="Add to&amp;nbsp;DotNetKicks"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/dotnetkicks.png" title="Add to&amp;nbsp;DotNetKicks" alt="Add to&amp;nbsp;DotNetKicks" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dzone.com/links/add.html?description=Benchmarking+Tornado+vs.+Twisted+Web+vs.+Tornado+on+Twisted&amp;amp;url=http://antoniocangiano.com/2009/09/13/benchmarking-tornado-vs-twisted-web-vs-tornado-on-twisted/&amp;amp;title=Benchmarking+Tornado+vs.+Twisted+Web+vs.+Tornado+on+Twisted" rel="nofollow" title="Add to&amp;nbsp;DZone"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/dzone.png" title="Add to&amp;nbsp;DZone" alt="Add to&amp;nbsp;DZone" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http://antoniocangiano.com/2009/09/13/benchmarking-tornado-vs-twisted-web-vs-tornado-on-twisted/" rel="nofollow" title="Add to&amp;nbsp;Facebook"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&amp;nbsp;Facebook" alt="Add to&amp;nbsp;Facebook" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;amp;output=popup&amp;amp;bkmk=http://antoniocangiano.com/2009/09/13/benchmarking-tornado-vs-twisted-web-vs-tornado-on-twisted/&amp;amp;title=Benchmarking+Tornado+vs.+Twisted+Web+vs.+Tornado+on+Twisted" rel="nofollow" title="Add to&amp;nbsp;Google Bookmarks"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&amp;nbsp;Google Bookmarks" alt="Add to&amp;nbsp;Google Bookmarks" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.newsvine.com/_wine/save?u=http://antoniocangiano.com/2009/09/13/benchmarking-tornado-vs-twisted-web-vs-tornado-on-twisted/&amp;amp;h=Benchmarking+Tornado+vs.+Twisted+Web+vs.+Tornado+on+Twisted" rel="nofollow" title="Add to&amp;nbsp;Newsvine"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/newsvine.png" title="Add to&amp;nbsp;Newsvine" alt="Add to&amp;nbsp;Newsvine" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://antoniocangiano.com/2009/09/13/benchmarking-tornado-vs-twisted-web-vs-tornado-on-twisted/&amp;amp;title=Benchmarking+Tornado+vs.+Twisted+Web+vs.+Tornado+on+Twisted" rel="nofollow" title="Add to&amp;nbsp;reddit"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&amp;nbsp;reddit" alt="Add to&amp;nbsp;reddit" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://slashdot.org/bookmark.pl?url=http://antoniocangiano.com/2009/09/13/benchmarking-tornado-vs-twisted-web-vs-tornado-on-twisted/&amp;amp;title=Benchmarking+Tornado+vs.+Twisted+Web+vs.+Tornado+on+Twisted" rel="nofollow" title="Add to&amp;nbsp;Slashdot"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/slashdot.png" title="Add to&amp;nbsp;Slashdot" alt="Add to&amp;nbsp;Slashdot" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://antoniocangiano.com/2009/09/13/benchmarking-tornado-vs-twisted-web-vs-tornado-on-twisted/&amp;amp;title=Benchmarking+Tornado+vs.+Twisted+Web+vs.+Tornado+on+Twisted" rel="nofollow" title="Add to&amp;nbsp;Stumble Upon"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&amp;nbsp;Stumble Upon" alt="Add to&amp;nbsp;Stumble Upon" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.squidoo.com/lensmaster/bookmark?http://antoniocangiano.com/2009/09/13/benchmarking-tornado-vs-twisted-web-vs-tornado-on-twisted/" rel="nofollow" title="Add to&amp;nbsp;Squidoo"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/squidoo.png" title="Add to&amp;nbsp;Squidoo" alt="Add to&amp;nbsp;Squidoo" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.sphere.com/sphereit/http://antoniocangiano.com/2009/09/13/benchmarking-tornado-vs-twisted-web-vs-tornado-on-twisted/" rel="nofollow" title="Add to&amp;nbsp;SphereIt"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/sphereit.png" title="Add to&amp;nbsp;SphereIt" alt="Add to&amp;nbsp;SphereIt" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://antoniocangiano.com/2009/09/13/benchmarking-tornado-vs-twisted-web-vs-tornado-on-twisted/" rel="nofollow" title="Add to&amp;nbsp;Technorati"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&amp;nbsp;Technorati" alt="Add to&amp;nbsp;Technorati" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+Benchmarking+Tornado+vs.+Twisted+Web+vs.+Tornado+on+Twisted+@+http://antoniocangiano.com/2009/09/13/benchmarking-tornado-vs-twisted-web-vs-tornado-on-twisted/" rel="nofollow" title="Add to&amp;nbsp;Twitter"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&amp;nbsp;Twitter" alt="Add to&amp;nbsp;Twitter" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://antoniocangiano.com/2009/09/13/benchmarking-tornado-vs-twisted-web-vs-tornado-on-twisted/&amp;amp;t=Benchmarking+Tornado+vs.+Twisted+Web+vs.+Tornado+on+Twisted" rel="nofollow" title="Add to&amp;nbsp;Yahoo My Web"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&amp;nbsp;Yahoo My Web" alt="Add to&amp;nbsp;Yahoo My Web" /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;!-- Social Bookmarks END --&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=QPHxkdqB9mI:PgmOFqk3of0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=QPHxkdqB9mI:PgmOFqk3of0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?i=QPHxkdqB9mI:PgmOFqk3of0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=QPHxkdqB9mI:PgmOFqk3of0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?i=QPHxkdqB9mI:PgmOFqk3of0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=QPHxkdqB9mI:PgmOFqk3of0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=QPHxkdqB9mI:PgmOFqk3of0:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=QPHxkdqB9mI:PgmOFqk3of0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?i=QPHxkdqB9mI:PgmOFqk3of0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ZenAndTheArtOfRubyProgramming/~4/QPHxkdqB9mI" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://antoniocangiano.com/2009/09/13/benchmarking-tornado-vs-twisted-web-vs-tornado-on-twisted/#comments" thr:count="26" />
		<link rel="replies" type="application/atom+xml" href="http://antoniocangiano.com/2009/09/13/benchmarking-tornado-vs-twisted-web-vs-tornado-on-twisted/feed/atom/" thr:count="26" />
		<thr:total>26</thr:total>
	<feedburner:origLink>http://antoniocangiano.com/2009/09/13/benchmarking-tornado-vs-twisted-web-vs-tornado-on-twisted/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Antonio Cangiano</name>
						<uri>http://antoniocangiano.com</uri>
					</author>
		<title type="html"><![CDATA[Installing and configuring DB2 Express-C 9.7 on Ubuntu 9.04 Server]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ZenAndTheArtOfRubyProgramming/~3/Ze04I-ERyk8/" />
		<id>http://antoniocangiano.com/?p=1103</id>
		<updated>2009-09-11T01:53:00Z</updated>
		<published>2009-09-11T01:53:00Z</published>
		<category scheme="http://antoniocangiano.com" term="DB2" />		<summary type="html"><![CDATA[DB2 Express-C 9.7 can easily be installed on Ubuntu 9.04 Desktop edition by simply issuing sudo ./db2setup. This will open up a launchpad and you&#8217;ll be able to install the product through a wizard. But what about setting up DB2 Express-C 9.7 on Ubuntu 9.04 Server edition? When you are ssh-ing into your VPS or [...]]]></summary>
		<content type="html" xml:base="http://antoniocangiano.com/2009/09/10/installing-and-configuring-db2-express-c-9-7-on-ubuntu-9-04-server/">&lt;p&gt;&lt;a href="http://www.ibm.com/software/data/db2/express/download.html?S_CMP=ECDDWW01&amp;#038;S_TACT=ACDB201"&gt;DB2 Express-C 9.7&lt;/a&gt; can easily be installed on Ubuntu 9.04 Desktop edition by simply issuing &lt;code&gt;sudo ./db2setup&lt;/code&gt;. This will open up a launchpad and you&amp;#8217;ll be able to install the product through a wizard. But what about setting up DB2 Express-C 9.7 on Ubuntu 9.04 Server edition? When you are ssh-ing into your VPS or dedicated sever, there are no GUIs to help you out.&lt;/p&gt;
&lt;p&gt;IBM provides all the information on how to proceed through &lt;a href="http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/index.jsp?topic=/com.ibm.db2.luw.qb.server.doc/doc/t0007067.html"&gt;a series of detailed documents&lt;/a&gt;, which explain why each command is required and what your options are. But if you are looking for a single document that is slightly more concise in nature, you can read this &lt;a href="http://bitsofinfo.wordpress.com/2009/09/09/installing-db2-9-express-c-on-a-headless-ubuntu-box-i-e-from-the-command-line/"&gt;excellent step by step guide&lt;/a&gt; that was published today on the blog bits.of.info.&lt;/p&gt;
&lt;!-- Social Bookmarks BEGIN --&gt;
&lt;div class="social_bookmark"&gt;
&lt;a&gt;&lt;strong&gt;&lt;em&gt;Bookmark and share:&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;div class="d"&gt;
&lt;br /&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://buzz.yahoo.com/submit?submitUrl=http://antoniocangiano.com/2009/09/10/installing-and-configuring-db2-express-c-9-7-on-ubuntu-9-04-server/&amp;amp;submitHeadline=Installing+and+configuring+DB2+Express-C+9.7+on+Ubuntu+9.04+Server&amp;amp;submitSummary=" rel="nofollow" title="Add to&amp;nbsp;Buzz"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/buzz.png" title="Add to&amp;nbsp;Buzz" alt="Add to&amp;nbsp;Buzz" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://antoniocangiano.com/2009/09/10/installing-and-configuring-db2-express-c-9-7-on-ubuntu-9-04-server/&amp;amp;title=Installing+and+configuring+DB2+Express-C+9.7+on+Ubuntu+9.04+Server" rel="nofollow" title="Add to&amp;nbsp;Del.icio.us"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&amp;nbsp;Del.icio.us" alt="Add to&amp;nbsp;Del.icio.us" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;amp;url=http://antoniocangiano.com/2009/09/10/installing-and-configuring-db2-express-c-9-7-on-ubuntu-9-04-server/&amp;amp;title=Installing+and+configuring+DB2+Express-C+9.7+on+Ubuntu+9.04+Server" rel="nofollow" title="Add to&amp;nbsp;digg"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&amp;nbsp;digg" alt="Add to&amp;nbsp;digg" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dotnetkicks.com/kick/?url=http://antoniocangiano.com/2009/09/10/installing-and-configuring-db2-express-c-9-7-on-ubuntu-9-04-server/&amp;amp;title=Installing+and+configuring+DB2+Express-C+9.7+on+Ubuntu+9.04+Server" rel="nofollow" title="Add to&amp;nbsp;DotNetKicks"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/dotnetkicks.png" title="Add to&amp;nbsp;DotNetKicks" alt="Add to&amp;nbsp;DotNetKicks" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dzone.com/links/add.html?description=Installing+and+configuring+DB2+Express-C+9.7+on+Ubuntu+9.04+Server&amp;amp;url=http://antoniocangiano.com/2009/09/10/installing-and-configuring-db2-express-c-9-7-on-ubuntu-9-04-server/&amp;amp;title=Installing+and+configuring+DB2+Express-C+9.7+on+Ubuntu+9.04+Server" rel="nofollow" title="Add to&amp;nbsp;DZone"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/dzone.png" title="Add to&amp;nbsp;DZone" alt="Add to&amp;nbsp;DZone" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http://antoniocangiano.com/2009/09/10/installing-and-configuring-db2-express-c-9-7-on-ubuntu-9-04-server/" rel="nofollow" title="Add to&amp;nbsp;Facebook"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&amp;nbsp;Facebook" alt="Add to&amp;nbsp;Facebook" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;amp;output=popup&amp;amp;bkmk=http://antoniocangiano.com/2009/09/10/installing-and-configuring-db2-express-c-9-7-on-ubuntu-9-04-server/&amp;amp;title=Installing+and+configuring+DB2+Express-C+9.7+on+Ubuntu+9.04+Server" rel="nofollow" title="Add to&amp;nbsp;Google Bookmarks"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&amp;nbsp;Google Bookmarks" alt="Add to&amp;nbsp;Google Bookmarks" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.newsvine.com/_wine/save?u=http://antoniocangiano.com/2009/09/10/installing-and-configuring-db2-express-c-9-7-on-ubuntu-9-04-server/&amp;amp;h=Installing+and+configuring+DB2+Express-C+9.7+on+Ubuntu+9.04+Server" rel="nofollow" title="Add to&amp;nbsp;Newsvine"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/newsvine.png" title="Add to&amp;nbsp;Newsvine" alt="Add to&amp;nbsp;Newsvine" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://antoniocangiano.com/2009/09/10/installing-and-configuring-db2-express-c-9-7-on-ubuntu-9-04-server/&amp;amp;title=Installing+and+configuring+DB2+Express-C+9.7+on+Ubuntu+9.04+Server" rel="nofollow" title="Add to&amp;nbsp;reddit"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&amp;nbsp;reddit" alt="Add to&amp;nbsp;reddit" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://slashdot.org/bookmark.pl?url=http://antoniocangiano.com/2009/09/10/installing-and-configuring-db2-express-c-9-7-on-ubuntu-9-04-server/&amp;amp;title=Installing+and+configuring+DB2+Express-C+9.7+on+Ubuntu+9.04+Server" rel="nofollow" title="Add to&amp;nbsp;Slashdot"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/slashdot.png" title="Add to&amp;nbsp;Slashdot" alt="Add to&amp;nbsp;Slashdot" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://antoniocangiano.com/2009/09/10/installing-and-configuring-db2-express-c-9-7-on-ubuntu-9-04-server/&amp;amp;title=Installing+and+configuring+DB2+Express-C+9.7+on+Ubuntu+9.04+Server" rel="nofollow" title="Add to&amp;nbsp;Stumble Upon"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&amp;nbsp;Stumble Upon" alt="Add to&amp;nbsp;Stumble Upon" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.squidoo.com/lensmaster/bookmark?http://antoniocangiano.com/2009/09/10/installing-and-configuring-db2-express-c-9-7-on-ubuntu-9-04-server/" rel="nofollow" title="Add to&amp;nbsp;Squidoo"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/squidoo.png" title="Add to&amp;nbsp;Squidoo" alt="Add to&amp;nbsp;Squidoo" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.sphere.com/sphereit/http://antoniocangiano.com/2009/09/10/installing-and-configuring-db2-express-c-9-7-on-ubuntu-9-04-server/" rel="nofollow" title="Add to&amp;nbsp;SphereIt"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/sphereit.png" title="Add to&amp;nbsp;SphereIt" alt="Add to&amp;nbsp;SphereIt" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://antoniocangiano.com/2009/09/10/installing-and-configuring-db2-express-c-9-7-on-ubuntu-9-04-server/" rel="nofollow" title="Add to&amp;nbsp;Technorati"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&amp;nbsp;Technorati" alt="Add to&amp;nbsp;Technorati" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+Installing+and+configuring+DB2+Express-C+9.7+on+Ubuntu+9.04+Server+@+http://antoniocangiano.com/2009/09/10/installing-and-configuring-db2-express-c-9-7-on-ubuntu-9-04-server/" rel="nofollow" title="Add to&amp;nbsp;Twitter"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&amp;nbsp;Twitter" alt="Add to&amp;nbsp;Twitter" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://antoniocangiano.com/2009/09/10/installing-and-configuring-db2-express-c-9-7-on-ubuntu-9-04-server/&amp;amp;t=Installing+and+configuring+DB2+Express-C+9.7+on+Ubuntu+9.04+Server" rel="nofollow" title="Add to&amp;nbsp;Yahoo My Web"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&amp;nbsp;Yahoo My Web" alt="Add to&amp;nbsp;Yahoo My Web" /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;!-- Social Bookmarks END --&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=Ze04I-ERyk8:FGxLrazGJGY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=Ze04I-ERyk8:FGxLrazGJGY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?i=Ze04I-ERyk8:FGxLrazGJGY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=Ze04I-ERyk8:FGxLrazGJGY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?i=Ze04I-ERyk8:FGxLrazGJGY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=Ze04I-ERyk8:FGxLrazGJGY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=Ze04I-ERyk8:FGxLrazGJGY:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=Ze04I-ERyk8:FGxLrazGJGY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?i=Ze04I-ERyk8:FGxLrazGJGY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ZenAndTheArtOfRubyProgramming/~4/Ze04I-ERyk8" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://antoniocangiano.com/2009/09/10/installing-and-configuring-db2-express-c-9-7-on-ubuntu-9-04-server/#comments" thr:count="5" />
		<link rel="replies" type="application/atom+xml" href="http://antoniocangiano.com/2009/09/10/installing-and-configuring-db2-express-c-9-7-on-ubuntu-9-04-server/feed/atom/" thr:count="5" />
		<thr:total>5</thr:total>
	<feedburner:origLink>http://antoniocangiano.com/2009/09/10/installing-and-configuring-db2-express-c-9-7-on-ubuntu-9-04-server/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Antonio Cangiano</name>
						<uri>http://antoniocangiano.com</uri>
					</author>
		<title type="html"><![CDATA[Improve the speed and security of your SQL queries]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ZenAndTheArtOfRubyProgramming/~3/tB9WXGzx0w0/" />
		<id>http://antoniocangiano.com/?p=1101</id>
		<updated>2009-09-09T13:48:10Z</updated>
		<published>2009-09-09T05:15:38Z</published>
		<category scheme="http://antoniocangiano.com" term="DB2" /><category scheme="http://antoniocangiano.com" term="Python" /><category scheme="http://antoniocangiano.com" term="Ruby" />		<summary type="html"><![CDATA[An easy way to improve the performance and security of SQL queries is to replace literals with parameters. By replacing literal values with parameters, advanced relational databases will be able to compile your queries and have their execution plans cached. This saves time and precious resources when the same query (minus the actual values) is executed [...]]]></summary>
		<content type="html" xml:base="http://antoniocangiano.com/2009/09/09/improve-the-speed-and-security-of-your-sql-queries/">&lt;p&gt;An easy way to improve the performance and security of SQL queries is to replace literals with parameters. By replacing literal values with parameters, advanced relational databases will be able to compile your queries and have their execution plans cached. This saves time and precious resources when the same query (minus the actual values) is executed over and over.&lt;/p&gt;
&lt;p&gt;Consider the following series of queries:&lt;/p&gt;
&lt;div class="highlight"&gt;
&lt;pre&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;karma&lt;/span&gt; &lt;span class="k"&gt;BETWEEN&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt; &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="mi"&gt;499&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;karma&lt;/span&gt; &lt;span class="k"&gt;BETWEEN&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt; &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="mi"&gt;999&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;karma&lt;/span&gt; &lt;span class="k"&gt;BETWEEN&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt; &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="mi"&gt;1999&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;karma&lt;/span&gt; &lt;span class="k"&gt;BETWEEN&lt;/span&gt; &lt;span class="mi"&gt;2000&lt;/span&gt; &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="mi"&gt;4999&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;karma&lt;/span&gt; &lt;span class="k"&gt;BETWEEN&lt;/span&gt; &lt;span class="mi"&gt;5000&lt;/span&gt; &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="mi"&gt;9999&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;karma&lt;/span&gt; &lt;span class="k"&gt;BETWEEN&lt;/span&gt; &lt;span class="mi"&gt;10000&lt;/span&gt; &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="mi"&gt;50000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;These each represent the same query and can be transformed into a single parameterized query:&lt;/p&gt;
&lt;div class="highlight"&gt;
&lt;pre&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;karma&lt;/span&gt; &lt;span class="k"&gt;BETWEEN&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Trying to use clever tricks with quotes in order to inject arbitrary SQL code becomes futile. Parameters are considered values, and have no effect on the structure of the query itself.&lt;/p&gt;
&lt;p&gt;Parameterized queries are therefore efficient and go a long way towards preventing SQL injection attacks in your applications. They have virtually no downside.&lt;/p&gt;
&lt;p&gt;Newbie developers often ignore the existence of this feature and end up irritating seasoned DBAs who have to deal with the consequences of their incompetence. &lt;a href="http://freedb2.com/2009/09/08/the-article-every-dba-should-forward-to-sql-developers/"&gt;Leon Katsnelson argues&lt;/a&gt; that this is such an important matter, that every DBA should forward &lt;a href="http://www.computerworld.com/s/article/9137478/Opinion_No_more_excuses_for_SQL_injection_attacks"&gt;this Computerworld article&lt;/a&gt; to their developers. I tend to agree with how important of an issue that is.&lt;/p&gt;
&lt;p&gt;That article provides the following example in Java:&lt;/p&gt;
&lt;div class="highlight"&gt;
&lt;pre&gt;&lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;lastName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getParameter&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"lastName"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"select * from customers where last_name = ?"&lt;/span&gt;
&lt;span class="n"&gt;PreparedStatement&lt;/span&gt; &lt;span class="n"&gt;pstmt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;prepareStatement&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;pstmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setString&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;lastName&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="n"&gt;ResultSet&lt;/span&gt; &lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pstmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;execute&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Here I&amp;#8217;ll show you an example of how to work with parameterized queries from Ruby and Python. I&amp;#8217;ll use the Ruby and Python drivers for &lt;a href="http://www.ibm.com/software/data/db2/express/download.html?S_CMP=ECDDWW01&amp;amp;S_TACT=ACDB201"&gt;DB2&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Ruby first:&lt;/p&gt;
&lt;div class="highlight"&gt;
&lt;pre&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'ibm_db'&lt;/span&gt;

&lt;span class="n"&gt;conn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;IBM_DB&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"mydb"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"db2inst1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"mypassword"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"SELECT * FROM users WHERE karma BETWEEN ? AND ?"&lt;/span&gt;
&lt;span class="n"&gt;pstmt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;IBM_DB&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;prepare&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;values&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;999&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="no"&gt;IBM_DB&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pstmt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;values&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;row&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;IBM_DB&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fetch_array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pstmt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;We load the driver (use &lt;code&gt;mswin32/ibm_db&lt;/code&gt; on Windows, and &lt;code&gt;ibm_db.bundle&lt;/code&gt; on Mac), create a prepared statement, and then bind the two parameter values to it through the &lt;code&gt;execute&lt;/code&gt; method. We then fetch the resultset one row at a time and print the value of the first two fields for each record. For fine-tuned control we could have used the &lt;a href="http://rubyibm.rubyforge.org/docs/driver/0.9.0/rdoc/classes/IBM_DB.html#M000005"&gt;IBM_DB::bind_param&lt;/a&gt; method.&lt;/p&gt;
&lt;p&gt;The Python version is very similar:&lt;/p&gt;
&lt;div class="highlight"&gt;
&lt;pre&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;ibm_db&lt;/span&gt;

&lt;span class="n"&gt;conn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ibm_db&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"mydb"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"db2inst1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"mypassword"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"SELECT * FROM users WHERE karma BETWEEN ? AND ?"&lt;/span&gt;
&lt;span class="n"&gt;pstmt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ibm_db&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;prepare&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;values&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;999&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;ibm_db&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pstmt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;values&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nb"&gt;tuple&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ibm_db&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fetch_tuple&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pstmt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="nb"&gt;tuple&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="nb"&gt;tuple&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;":"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;tuple&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nb"&gt;tuple&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ibm_db&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fetch_tuple&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pstmt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;As you can see, working with parameterized queries is not any harder than dynamically generating SQL queries. Yet the benefits of doing so are huge.&lt;/p&gt;
&lt;p&gt;Unfortunately, despite being a very sound choice to base an Object-Relational Mapper (ORM) on, ActiveRecord does not use parameterized queries. Even when it looks like you are passing parameters to a given method, these are actually used to dynamically form an SQL query. Of course you are still free to use parameterized queries in your Rails applications by employing the driver directly. But I really think this is something ActiveRecord should be built upon.&lt;/p&gt;
&lt;p&gt;Luckily for Django developers, Django&amp;#8217;s ORM uses parameterized queries, thus improving both performance and security with a single design choice. In the Python world you couldn&amp;#8217;t get away with ignoring parameterized queries.&lt;/p&gt;
&lt;p&gt;For those of you using Rails, all is not lost. &lt;a href="http://www.ibm.com/software/data/db2/express/download.html?S_CMP=ECDDWW01&amp;amp;S_TACT=ACDB201"&gt;DB2 Express-C 9.7&lt;/a&gt; has a killer feature known as the &lt;a href="http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/index.jsp?topic=/com.ibm.db2.luw.wn.doc/doc/c0054005.html"&gt;Statement Concentrator&lt;/a&gt;, which caches similar queries allowing them to use a shared access plan. It&amp;#8217;s not as efficient as using prepared statements in your code, but it&amp;#8217;s the best you can do when, as in the case of ActiveRecord, you can&amp;#8217;t use parameterized queries directly. &lt;a href="http://freedb2.com/2009/09/08/the-article-every-dba-should-forward-to-sql-developers/"&gt;Leon&amp;#8217;s article&lt;/a&gt; explains in greater detail how this feature actually works.&lt;/p&gt;
&lt;!-- Social Bookmarks BEGIN --&gt;
&lt;div class="social_bookmark"&gt;
&lt;a&gt;&lt;strong&gt;&lt;em&gt;Bookmark and share:&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;div class="d"&gt;
&lt;br /&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://buzz.yahoo.com/submit?submitUrl=http://antoniocangiano.com/2009/09/09/improve-the-speed-and-security-of-your-sql-queries/&amp;amp;submitHeadline=Improve+the+speed+and+security+of+your+SQL+queries&amp;amp;submitSummary=" rel="nofollow" title="Add to&amp;nbsp;Buzz"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/buzz.png" title="Add to&amp;nbsp;Buzz" alt="Add to&amp;nbsp;Buzz" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://antoniocangiano.com/2009/09/09/improve-the-speed-and-security-of-your-sql-queries/&amp;amp;title=Improve+the+speed+and+security+of+your+SQL+queries" rel="nofollow" title="Add to&amp;nbsp;Del.icio.us"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&amp;nbsp;Del.icio.us" alt="Add to&amp;nbsp;Del.icio.us" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;amp;url=http://antoniocangiano.com/2009/09/09/improve-the-speed-and-security-of-your-sql-queries/&amp;amp;title=Improve+the+speed+and+security+of+your+SQL+queries" rel="nofollow" title="Add to&amp;nbsp;digg"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&amp;nbsp;digg" alt="Add to&amp;nbsp;digg" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dotnetkicks.com/kick/?url=http://antoniocangiano.com/2009/09/09/improve-the-speed-and-security-of-your-sql-queries/&amp;amp;title=Improve+the+speed+and+security+of+your+SQL+queries" rel="nofollow" title="Add to&amp;nbsp;DotNetKicks"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/dotnetkicks.png" title="Add to&amp;nbsp;DotNetKicks" alt="Add to&amp;nbsp;DotNetKicks" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dzone.com/links/add.html?description=Improve+the+speed+and+security+of+your+SQL+queries&amp;amp;url=http://antoniocangiano.com/2009/09/09/improve-the-speed-and-security-of-your-sql-queries/&amp;amp;title=Improve+the+speed+and+security+of+your+SQL+queries" rel="nofollow" title="Add to&amp;nbsp;DZone"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/dzone.png" title="Add to&amp;nbsp;DZone" alt="Add to&amp;nbsp;DZone" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http://antoniocangiano.com/2009/09/09/improve-the-speed-and-security-of-your-sql-queries/" rel="nofollow" title="Add to&amp;nbsp;Facebook"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&amp;nbsp;Facebook" alt="Add to&amp;nbsp;Facebook" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;amp;output=popup&amp;amp;bkmk=http://antoniocangiano.com/2009/09/09/improve-the-speed-and-security-of-your-sql-queries/&amp;amp;title=Improve+the+speed+and+security+of+your+SQL+queries" rel="nofollow" title="Add to&amp;nbsp;Google Bookmarks"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&amp;nbsp;Google Bookmarks" alt="Add to&amp;nbsp;Google Bookmarks" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.newsvine.com/_wine/save?u=http://antoniocangiano.com/2009/09/09/improve-the-speed-and-security-of-your-sql-queries/&amp;amp;h=Improve+the+speed+and+security+of+your+SQL+queries" rel="nofollow" title="Add to&amp;nbsp;Newsvine"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/newsvine.png" title="Add to&amp;nbsp;Newsvine" alt="Add to&amp;nbsp;Newsvine" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://antoniocangiano.com/2009/09/09/improve-the-speed-and-security-of-your-sql-queries/&amp;amp;title=Improve+the+speed+and+security+of+your+SQL+queries" rel="nofollow" title="Add to&amp;nbsp;reddit"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&amp;nbsp;reddit" alt="Add to&amp;nbsp;reddit" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://slashdot.org/bookmark.pl?url=http://antoniocangiano.com/2009/09/09/improve-the-speed-and-security-of-your-sql-queries/&amp;amp;title=Improve+the+speed+and+security+of+your+SQL+queries" rel="nofollow" title="Add to&amp;nbsp;Slashdot"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/slashdot.png" title="Add to&amp;nbsp;Slashdot" alt="Add to&amp;nbsp;Slashdot" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://antoniocangiano.com/2009/09/09/improve-the-speed-and-security-of-your-sql-queries/&amp;amp;title=Improve+the+speed+and+security+of+your+SQL+queries" rel="nofollow" title="Add to&amp;nbsp;Stumble Upon"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&amp;nbsp;Stumble Upon" alt="Add to&amp;nbsp;Stumble Upon" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.squidoo.com/lensmaster/bookmark?http://antoniocangiano.com/2009/09/09/improve-the-speed-and-security-of-your-sql-queries/" rel="nofollow" title="Add to&amp;nbsp;Squidoo"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/squidoo.png" title="Add to&amp;nbsp;Squidoo" alt="Add to&amp;nbsp;Squidoo" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.sphere.com/sphereit/http://antoniocangiano.com/2009/09/09/improve-the-speed-and-security-of-your-sql-queries/" rel="nofollow" title="Add to&amp;nbsp;SphereIt"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/sphereit.png" title="Add to&amp;nbsp;SphereIt" alt="Add to&amp;nbsp;SphereIt" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://antoniocangiano.com/2009/09/09/improve-the-speed-and-security-of-your-sql-queries/" rel="nofollow" title="Add to&amp;nbsp;Technorati"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&amp;nbsp;Technorati" alt="Add to&amp;nbsp;Technorati" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+Improve+the+speed+and+security+of+your+SQL+queries+@+http://antoniocangiano.com/2009/09/09/improve-the-speed-and-security-of-your-sql-queries/" rel="nofollow" title="Add to&amp;nbsp;Twitter"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&amp;nbsp;Twitter" alt="Add to&amp;nbsp;Twitter" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://antoniocangiano.com/2009/09/09/improve-the-speed-and-security-of-your-sql-queries/&amp;amp;t=Improve+the+speed+and+security+of+your+SQL+queries" rel="nofollow" title="Add to&amp;nbsp;Yahoo My Web"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&amp;nbsp;Yahoo My Web" alt="Add to&amp;nbsp;Yahoo My Web" /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;!-- Social Bookmarks END --&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=tB9WXGzx0w0:rYkqV0MA8LA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=tB9WXGzx0w0:rYkqV0MA8LA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?i=tB9WXGzx0w0:rYkqV0MA8LA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=tB9WXGzx0w0:rYkqV0MA8LA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?i=tB9WXGzx0w0:rYkqV0MA8LA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=tB9WXGzx0w0:rYkqV0MA8LA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=tB9WXGzx0w0:rYkqV0MA8LA:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=tB9WXGzx0w0:rYkqV0MA8LA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?i=tB9WXGzx0w0:rYkqV0MA8LA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ZenAndTheArtOfRubyProgramming/~4/tB9WXGzx0w0" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://antoniocangiano.com/2009/09/09/improve-the-speed-and-security-of-your-sql-queries/#comments" thr:count="5" />
		<link rel="replies" type="application/atom+xml" href="http://antoniocangiano.com/2009/09/09/improve-the-speed-and-security-of-your-sql-queries/feed/atom/" thr:count="5" />
		<thr:total>5</thr:total>
	<feedburner:origLink>http://antoniocangiano.com/2009/09/09/improve-the-speed-and-security-of-your-sql-queries/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Antonio Cangiano</name>
						<uri>http://antoniocangiano.com</uri>
					</author>
		<title type="html"><![CDATA[Enabling support for DB2 and Python/Django/SQLAlchemy on Mac OS X Snow Leopard]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ZenAndTheArtOfRubyProgramming/~3/gZJGr-ahaQc/" />
		<id>http://antoniocangiano.com/?p=1099</id>
		<updated>2009-09-08T23:39:34Z</updated>
		<published>2009-09-08T23:39:34Z</published>
		<category scheme="http://antoniocangiano.com" term="DB2" /><category scheme="http://antoniocangiano.com" term="Django" /><category scheme="http://antoniocangiano.com" term="Python" />		<summary type="html"><![CDATA[This is the Python version of a post I made about Ruby a few days ago.
Now that Mac OS X 10.6 is out, it’s time to leave the world of 32 bit computing behind. The pre-installed Python interpreter will run in 64 bit mode by default, so you may need to pay attention when installing [...]]]></summary>
		<content type="html" xml:base="http://antoniocangiano.com/2009/09/08/enabling-support-for-db2-and-pythondjangosqlalchemy-on-mac-os-x-snow-leopard/">&lt;p&gt;&lt;em&gt;This is the Python version of &lt;/em&gt;&lt;a href="http://antoniocangiano.com/2009/09/03/installing-the-ruby-driver-for-db2-on-mac-os-x-snow-leopard/"&gt;&lt;em&gt;a post I made about Ruby&lt;/em&gt;&lt;/a&gt;&lt;em&gt; a few days ago.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Now that Mac OS X 10.6 is out, it’s time to leave the world of 32 bit computing behind. The pre-installed Python interpreter will run in 64 bit mode by default, so you may need to pay attention when installing some C-based eggs.&lt;/p&gt;
&lt;p&gt;Assuming you have &lt;a href="http://www.ibm.com/software/data/db2/express/download.html?S_CMP=ECDDWW01&amp;amp;S_TACT=ACDB201"&gt;DB2 Express-C&lt;/a&gt; installed already, the ibm_db Python egg for DB2 can easily be installed by following these simple steps:&lt;/p&gt;
&lt;div class="highlight"&gt;
&lt;pre&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;sudo -s
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;IBM_DB_LIB&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/Users/&amp;lt;username&amp;gt;/sqllib/lib64
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;IBM_DB_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/Users/&amp;lt;username&amp;gt;/sqllib
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ARCHFLAGS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"-arch x86_64"&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;easy_install ibm_db&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;This will install the ibm_db C driver, and the ibm_db_dbi Python module that complies to the DB-API 2.0 specification.&lt;/p&gt;
&lt;p&gt;You can verify that the installation was successful my running the following:&lt;/p&gt;
&lt;div class="highlight"&gt;
&lt;pre&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;python
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;ibm_db&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Now, for the Django adapter, install Django first (if you haven&amp;#8217;t done so already):&lt;/p&gt;
&lt;div class="highlight"&gt;
&lt;pre&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;sudo easy_install django&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;The Django adapter can then be installed as follows:&lt;/p&gt;
&lt;div class="highlight"&gt;
&lt;pre&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;sudo easy_install ibm_db_django&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Finally, if have installed SQLAlchemy and wish to install the DB2 adapter for it, run:&lt;/p&gt;
&lt;div class="highlight"&gt;
&lt;pre&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;sudo easy_install ibm_db_sa&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Please let me know if you encounter any issues, I’d be glad to help you.&lt;/p&gt;
&lt;!-- Social Bookmarks BEGIN --&gt;
&lt;div class="social_bookmark"&gt;
&lt;a&gt;&lt;strong&gt;&lt;em&gt;Bookmark and share:&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;div class="d"&gt;
&lt;br /&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://buzz.yahoo.com/submit?submitUrl=http://antoniocangiano.com/2009/09/08/enabling-support-for-db2-and-pythondjangosqlalchemy-on-mac-os-x-snow-leopard/&amp;amp;submitHeadline=Enabling+support+for+DB2+and+Python%2FDjango%2FSQLAlchemy+on+Mac+OS+X+Snow+Leopard&amp;amp;submitSummary=" rel="nofollow" title="Add to&amp;nbsp;Buzz"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/buzz.png" title="Add to&amp;nbsp;Buzz" alt="Add to&amp;nbsp;Buzz" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://antoniocangiano.com/2009/09/08/enabling-support-for-db2-and-pythondjangosqlalchemy-on-mac-os-x-snow-leopard/&amp;amp;title=Enabling+support+for+DB2+and+Python%2FDjango%2FSQLAlchemy+on+Mac+OS+X+Snow+Leopard" rel="nofollow" title="Add to&amp;nbsp;Del.icio.us"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&amp;nbsp;Del.icio.us" alt="Add to&amp;nbsp;Del.icio.us" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;amp;url=http://antoniocangiano.com/2009/09/08/enabling-support-for-db2-and-pythondjangosqlalchemy-on-mac-os-x-snow-leopard/&amp;amp;title=Enabling+support+for+DB2+and+Python%2FDjango%2FSQLAlchemy+on+Mac+OS+X+Snow+Leopard" rel="nofollow" title="Add to&amp;nbsp;digg"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&amp;nbsp;digg" alt="Add to&amp;nbsp;digg" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dotnetkicks.com/kick/?url=http://antoniocangiano.com/2009/09/08/enabling-support-for-db2-and-pythondjangosqlalchemy-on-mac-os-x-snow-leopard/&amp;amp;title=Enabling+support+for+DB2+and+Python%2FDjango%2FSQLAlchemy+on+Mac+OS+X+Snow+Leopard" rel="nofollow" title="Add to&amp;nbsp;DotNetKicks"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/dotnetkicks.png" title="Add to&amp;nbsp;DotNetKicks" alt="Add to&amp;nbsp;DotNetKicks" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dzone.com/links/add.html?description=Enabling+support+for+DB2+and+Python%2FDjango%2FSQLAlchemy+on+Mac+OS+X+Snow+Leopard&amp;amp;url=http://antoniocangiano.com/2009/09/08/enabling-support-for-db2-and-pythondjangosqlalchemy-on-mac-os-x-snow-leopard/&amp;amp;title=Enabling+support+for+DB2+and+Python%2FDjango%2FSQLAlchemy+on+Mac+OS+X+Snow+Leopard" rel="nofollow" title="Add to&amp;nbsp;DZone"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/dzone.png" title="Add to&amp;nbsp;DZone" alt="Add to&amp;nbsp;DZone" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http://antoniocangiano.com/2009/09/08/enabling-support-for-db2-and-pythondjangosqlalchemy-on-mac-os-x-snow-leopard/" rel="nofollow" title="Add to&amp;nbsp;Facebook"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&amp;nbsp;Facebook" alt="Add to&amp;nbsp;Facebook" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;amp;output=popup&amp;amp;bkmk=http://antoniocangiano.com/2009/09/08/enabling-support-for-db2-and-pythondjangosqlalchemy-on-mac-os-x-snow-leopard/&amp;amp;title=Enabling+support+for+DB2+and+Python%2FDjango%2FSQLAlchemy+on+Mac+OS+X+Snow+Leopard" rel="nofollow" title="Add to&amp;nbsp;Google Bookmarks"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&amp;nbsp;Google Bookmarks" alt="Add to&amp;nbsp;Google Bookmarks" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.newsvine.com/_wine/save?u=http://antoniocangiano.com/2009/09/08/enabling-support-for-db2-and-pythondjangosqlalchemy-on-mac-os-x-snow-leopard/&amp;amp;h=Enabling+support+for+DB2+and+Python%2FDjango%2FSQLAlchemy+on+Mac+OS+X+Snow+Leopard" rel="nofollow" title="Add to&amp;nbsp;Newsvine"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/newsvine.png" title="Add to&amp;nbsp;Newsvine" alt="Add to&amp;nbsp;Newsvine" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://antoniocangiano.com/2009/09/08/enabling-support-for-db2-and-pythondjangosqlalchemy-on-mac-os-x-snow-leopard/&amp;amp;title=Enabling+support+for+DB2+and+Python%2FDjango%2FSQLAlchemy+on+Mac+OS+X+Snow+Leopard" rel="nofollow" title="Add to&amp;nbsp;reddit"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&amp;nbsp;reddit" alt="Add to&amp;nbsp;reddit" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://slashdot.org/bookmark.pl?url=http://antoniocangiano.com/2009/09/08/enabling-support-for-db2-and-pythondjangosqlalchemy-on-mac-os-x-snow-leopard/&amp;amp;title=Enabling+support+for+DB2+and+Python%2FDjango%2FSQLAlchemy+on+Mac+OS+X+Snow+Leopard" rel="nofollow" title="Add to&amp;nbsp;Slashdot"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/slashdot.png" title="Add to&amp;nbsp;Slashdot" alt="Add to&amp;nbsp;Slashdot" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://antoniocangiano.com/2009/09/08/enabling-support-for-db2-and-pythondjangosqlalchemy-on-mac-os-x-snow-leopard/&amp;amp;title=Enabling+support+for+DB2+and+Python%2FDjango%2FSQLAlchemy+on+Mac+OS+X+Snow+Leopard" rel="nofollow" title="Add to&amp;nbsp;Stumble Upon"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&amp;nbsp;Stumble Upon" alt="Add to&amp;nbsp;Stumble Upon" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.squidoo.com/lensmaster/bookmark?http://antoniocangiano.com/2009/09/08/enabling-support-for-db2-and-pythondjangosqlalchemy-on-mac-os-x-snow-leopard/" rel="nofollow" title="Add to&amp;nbsp;Squidoo"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/squidoo.png" title="Add to&amp;nbsp;Squidoo" alt="Add to&amp;nbsp;Squidoo" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.sphere.com/sphereit/http://antoniocangiano.com/2009/09/08/enabling-support-for-db2-and-pythondjangosqlalchemy-on-mac-os-x-snow-leopard/" rel="nofollow" title="Add to&amp;nbsp;SphereIt"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/sphereit.png" title="Add to&amp;nbsp;SphereIt" alt="Add to&amp;nbsp;SphereIt" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://antoniocangiano.com/2009/09/08/enabling-support-for-db2-and-pythondjangosqlalchemy-on-mac-os-x-snow-leopard/" rel="nofollow" title="Add to&amp;nbsp;Technorati"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&amp;nbsp;Technorati" alt="Add to&amp;nbsp;Technorati" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+Enabling+support+for+DB2+and+Python%2FDjango%2FSQLAlchemy+on+Mac+OS+X+Snow+Leopard+@+http://antoniocangiano.com/2009/09/08/enabling-support-for-db2-and-pythondjangosqlalchemy-on-mac-os-x-snow-leopard/" rel="nofollow" title="Add to&amp;nbsp;Twitter"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&amp;nbsp;Twitter" alt="Add to&amp;nbsp;Twitter" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://antoniocangiano.com/2009/09/08/enabling-support-for-db2-and-pythondjangosqlalchemy-on-mac-os-x-snow-leopard/&amp;amp;t=Enabling+support+for+DB2+and+Python%2FDjango%2FSQLAlchemy+on+Mac+OS+X+Snow+Leopard" rel="nofollow" title="Add to&amp;nbsp;Yahoo My Web"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&amp;nbsp;Yahoo My Web" alt="Add to&amp;nbsp;Yahoo My Web" /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;!-- Social Bookmarks END --&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=gZJGr-ahaQc:iub-LgoX8PQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=gZJGr-ahaQc:iub-LgoX8PQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?i=gZJGr-ahaQc:iub-LgoX8PQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=gZJGr-ahaQc:iub-LgoX8PQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?i=gZJGr-ahaQc:iub-LgoX8PQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=gZJGr-ahaQc:iub-LgoX8PQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=gZJGr-ahaQc:iub-LgoX8PQ:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=gZJGr-ahaQc:iub-LgoX8PQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?i=gZJGr-ahaQc:iub-LgoX8PQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ZenAndTheArtOfRubyProgramming/~4/gZJGr-ahaQc" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://antoniocangiano.com/2009/09/08/enabling-support-for-db2-and-pythondjangosqlalchemy-on-mac-os-x-snow-leopard/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://antoniocangiano.com/2009/09/08/enabling-support-for-db2-and-pythondjangosqlalchemy-on-mac-os-x-snow-leopard/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://antoniocangiano.com/2009/09/08/enabling-support-for-db2-and-pythondjangosqlalchemy-on-mac-os-x-snow-leopard/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Antonio Cangiano</name>
						<uri>http://antoniocangiano.com</uri>
					</author>
		<title type="html"><![CDATA[Cell Phone Cost Calculator Killed In Canada. Enough Is Enough!]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ZenAndTheArtOfRubyProgramming/~3/wkdF7Ymhzog/" />
		<id>http://antoniocangiano.com/?p=1098</id>
		<updated>2009-09-06T23:15:00Z</updated>
		<published>2009-09-06T17:28:28Z</published>
		<category scheme="http://antoniocangiano.com" term="Canada" /><category scheme="http://antoniocangiano.com" term="General" /><category scheme="http://antoniocangiano.com" term="Industry News" />		<summary type="html"><![CDATA[Having been born and raised in Europe, I find the Canadian Telco sector appalling. In what is an otherwise outstanding country, the monopolistic tendencies and de facto cartels of the phone companies are screwing over Canadian residents, and there is very little being done to counteract this.
Recently Bell got its way again, and UBB (Usage [...]]]></summary>
		<content type="html" xml:base="http://antoniocangiano.com/2009/09/06/cell-phone-cost-calculator-killed-in-canada/">&lt;p&gt;Having been born and raised in Europe, I find the Canadian Telco sector appalling. In what is an otherwise outstanding country, the monopolistic tendencies and de facto cartels of the phone companies are screwing over Canadian residents, and there is very little being done to counteract this.&lt;/p&gt;
&lt;p&gt;Recently Bell got its way again, and UBB (Usage Based Billing) was introduced regardless of what thousands upon thousands of taxpayers had to say about it. &lt;a href="http://antoniocangiano.com/2009/04/14/canadians-fight-internet-usage-based-billing-ubb/"&gt;Countless complaints&lt;/a&gt; were forwarded to the CRTC (Canadian Radio-television and Telecommunications Commission), and these were promptly disregarded.&lt;/p&gt;
&lt;p&gt;On Slashdot today there&amp;#8217;s a story entitled &lt;a href="http://tech.slashdot.org/story/09/09/06/1155227/Cell-Phone-Cost-Calculator-Killed-In-Canada"&gt;Cell Phone Cost Calculator Killed In Canada&lt;/a&gt;. Upon further inspection it&amp;#8217;s revealed that cell phone carriers have successfully lobbied public officials to stop a taxpayer funded initiative that would publish an online cellphone cost calculator. (&amp;#8221;OMG competition! Think of the shareholders!&amp;#8221; As someone pointed out on Slashdot). &lt;/p&gt;
&lt;p&gt;Stopping this service is a waste of our money, but more importantly, it clearly highlights the fear of transparency and competition that is typical of companies like Bell and Rogers. It shows the power that phone companies have over the government. And it demonstrates how elected officials like Tony Clement (Industry Minister) are far more concerned with the bottom line of public companies than the interest of Canadian citizens and residents alike.&lt;/p&gt;
&lt;p&gt;This is outrageous. How can we fight back? For once, I&amp;#8217;m a believer in voting with my dollars. I do not currently own a cell phone, and I surf the web on a (factual) 3 Mbps connection from TekSavvy, having switched from Rogers&amp;#8217; 10 Mbps plan more than a year ago.&lt;/p&gt;
&lt;p&gt;The two are an impediment, because I need a cell phone and a fast Internet connection. But the lack of competition doesn&amp;#8217;t leave you with many alternative options if you want to avoid giving your hard earned money to the types of carriers mentioned above. And in the case of the calculator, my tax money ended up being wasted to protect these companies&amp;#8217; obsolete pricing models.&lt;/p&gt;
&lt;p&gt;The (always excellent) Michael Geist &lt;a href="http://thestar.com/article/688547"&gt;makes a worthwhile suggestion&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;With public dollars having funded the mothballed project, the government should now consider releasing the calculator&amp;#8217;s source code and enable other groups to pick up where the OCA (Office of Consumer Affairs) left off.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Today I registered MyPhoneBill.ca. Should they ever release the source code, I will host it and deploy it at this handy URL. After all, we&amp;#8217;ve already paid for the code.&lt;/p&gt;
&lt;p&gt;In truth, I don&amp;#8217;t see this happening. An open source solution that companies and individuals could build upon would frighten cell phone carriers even more than a closed source project deployed by the government.&lt;/p&gt;
&lt;p&gt;If they won&amp;#8217;t open source the code of the cell phone cost calculator, as I suspect the case will be, I&amp;#8217;ll take a stand. &lt;strong&gt;I&amp;#8217;ll implement and offer the service myself at MyPhoneBill.ca&lt;/strong&gt; (site not active yet).&lt;/p&gt;
&lt;p&gt;Such a site may very well have a solid business model, and I&amp;#8217;m not opposed to that idea. But that&amp;#8217;s not the main reason why I&amp;#8217;d create such a project. Canadians have the right to learn about what the most advantageous phone plan for their usage pattern is, without having to spend days on end doing research. And companies have no right whatsoever to prevent this from happening. Similar sites exist in almost every other industrialized country and cell phone companies usually collaborate with them.&lt;/p&gt;
&lt;p&gt;Enough is enough!&lt;/p&gt;
&lt;!-- Social Bookmarks BEGIN --&gt;
&lt;div class="social_bookmark"&gt;
&lt;a&gt;&lt;strong&gt;&lt;em&gt;Bookmark and share:&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;div class="d"&gt;
&lt;br /&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://buzz.yahoo.com/submit?submitUrl=http://antoniocangiano.com/2009/09/06/cell-phone-cost-calculator-killed-in-canada/&amp;amp;submitHeadline=Cell+Phone+Cost+Calculator+Killed+In+Canada.+Enough+Is+Enough%21&amp;amp;submitSummary=" rel="nofollow" title="Add to&amp;nbsp;Buzz"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/buzz.png" title="Add to&amp;nbsp;Buzz" alt="Add to&amp;nbsp;Buzz" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://antoniocangiano.com/2009/09/06/cell-phone-cost-calculator-killed-in-canada/&amp;amp;title=Cell+Phone+Cost+Calculator+Killed+In+Canada.+Enough+Is+Enough%21" rel="nofollow" title="Add to&amp;nbsp;Del.icio.us"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&amp;nbsp;Del.icio.us" alt="Add to&amp;nbsp;Del.icio.us" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;amp;url=http://antoniocangiano.com/2009/09/06/cell-phone-cost-calculator-killed-in-canada/&amp;amp;title=Cell+Phone+Cost+Calculator+Killed+In+Canada.+Enough+Is+Enough%21" rel="nofollow" title="Add to&amp;nbsp;digg"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&amp;nbsp;digg" alt="Add to&amp;nbsp;digg" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dotnetkicks.com/kick/?url=http://antoniocangiano.com/2009/09/06/cell-phone-cost-calculator-killed-in-canada/&amp;amp;title=Cell+Phone+Cost+Calculator+Killed+In+Canada.+Enough+Is+Enough%21" rel="nofollow" title="Add to&amp;nbsp;DotNetKicks"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/dotnetkicks.png" title="Add to&amp;nbsp;DotNetKicks" alt="Add to&amp;nbsp;DotNetKicks" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dzone.com/links/add.html?description=Cell+Phone+Cost+Calculator+Killed+In+Canada.+Enough+Is+Enough%21&amp;amp;url=http://antoniocangiano.com/2009/09/06/cell-phone-cost-calculator-killed-in-canada/&amp;amp;title=Cell+Phone+Cost+Calculator+Killed+In+Canada.+Enough+Is+Enough%21" rel="nofollow" title="Add to&amp;nbsp;DZone"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/dzone.png" title="Add to&amp;nbsp;DZone" alt="Add to&amp;nbsp;DZone" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http://antoniocangiano.com/2009/09/06/cell-phone-cost-calculator-killed-in-canada/" rel="nofollow" title="Add to&amp;nbsp;Facebook"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&amp;nbsp;Facebook" alt="Add to&amp;nbsp;Facebook" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;amp;output=popup&amp;amp;bkmk=http://antoniocangiano.com/2009/09/06/cell-phone-cost-calculator-killed-in-canada/&amp;amp;title=Cell+Phone+Cost+Calculator+Killed+In+Canada.+Enough+Is+Enough%21" rel="nofollow" title="Add to&amp;nbsp;Google Bookmarks"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&amp;nbsp;Google Bookmarks" alt="Add to&amp;nbsp;Google Bookmarks" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.newsvine.com/_wine/save?u=http://antoniocangiano.com/2009/09/06/cell-phone-cost-calculator-killed-in-canada/&amp;amp;h=Cell+Phone+Cost+Calculator+Killed+In+Canada.+Enough+Is+Enough%21" rel="nofollow" title="Add to&amp;nbsp;Newsvine"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/newsvine.png" title="Add to&amp;nbsp;Newsvine" alt="Add to&amp;nbsp;Newsvine" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://antoniocangiano.com/2009/09/06/cell-phone-cost-calculator-killed-in-canada/&amp;amp;title=Cell+Phone+Cost+Calculator+Killed+In+Canada.+Enough+Is+Enough%21" rel="nofollow" title="Add to&amp;nbsp;reddit"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&amp;nbsp;reddit" alt="Add to&amp;nbsp;reddit" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://slashdot.org/bookmark.pl?url=http://antoniocangiano.com/2009/09/06/cell-phone-cost-calculator-killed-in-canada/&amp;amp;title=Cell+Phone+Cost+Calculator+Killed+In+Canada.+Enough+Is+Enough%21" rel="nofollow" title="Add to&amp;nbsp;Slashdot"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/slashdot.png" title="Add to&amp;nbsp;Slashdot" alt="Add to&amp;nbsp;Slashdot" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://antoniocangiano.com/2009/09/06/cell-phone-cost-calculator-killed-in-canada/&amp;amp;title=Cell+Phone+Cost+Calculator+Killed+In+Canada.+Enough+Is+Enough%21" rel="nofollow" title="Add to&amp;nbsp;Stumble Upon"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&amp;nbsp;Stumble Upon" alt="Add to&amp;nbsp;Stumble Upon" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.squidoo.com/lensmaster/bookmark?http://antoniocangiano.com/2009/09/06/cell-phone-cost-calculator-killed-in-canada/" rel="nofollow" title="Add to&amp;nbsp;Squidoo"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/squidoo.png" title="Add to&amp;nbsp;Squidoo" alt="Add to&amp;nbsp;Squidoo" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.sphere.com/sphereit/http://antoniocangiano.com/2009/09/06/cell-phone-cost-calculator-killed-in-canada/" rel="nofollow" title="Add to&amp;nbsp;SphereIt"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/sphereit.png" title="Add to&amp;nbsp;SphereIt" alt="Add to&amp;nbsp;SphereIt" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://antoniocangiano.com/2009/09/06/cell-phone-cost-calculator-killed-in-canada/" rel="nofollow" title="Add to&amp;nbsp;Technorati"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&amp;nbsp;Technorati" alt="Add to&amp;nbsp;Technorati" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+Cell+Phone+Cost+Calculator+Killed+In+Canada.+Enough+Is+Enough%21+@+http://antoniocangiano.com/2009/09/06/cell-phone-cost-calculator-killed-in-canada/" rel="nofollow" title="Add to&amp;nbsp;Twitter"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&amp;nbsp;Twitter" alt="Add to&amp;nbsp;Twitter" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://antoniocangiano.com/2009/09/06/cell-phone-cost-calculator-killed-in-canada/&amp;amp;t=Cell+Phone+Cost+Calculator+Killed+In+Canada.+Enough+Is+Enough%21" rel="nofollow" title="Add to&amp;nbsp;Yahoo My Web"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&amp;nbsp;Yahoo My Web" alt="Add to&amp;nbsp;Yahoo My Web" /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;!-- Social Bookmarks END --&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=wkdF7Ymhzog:EMdh9ULqI64:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=wkdF7Ymhzog:EMdh9ULqI64:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?i=wkdF7Ymhzog:EMdh9ULqI64:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=wkdF7Ymhzog:EMdh9ULqI64:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?i=wkdF7Ymhzog:EMdh9ULqI64:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=wkdF7Ymhzog:EMdh9ULqI64:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=wkdF7Ymhzog:EMdh9ULqI64:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=wkdF7Ymhzog:EMdh9ULqI64:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?i=wkdF7Ymhzog:EMdh9ULqI64:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ZenAndTheArtOfRubyProgramming/~4/wkdF7Ymhzog" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://antoniocangiano.com/2009/09/06/cell-phone-cost-calculator-killed-in-canada/#comments" thr:count="13" />
		<link rel="replies" type="application/atom+xml" href="http://antoniocangiano.com/2009/09/06/cell-phone-cost-calculator-killed-in-canada/feed/atom/" thr:count="13" />
		<thr:total>13</thr:total>
	<feedburner:origLink>http://antoniocangiano.com/2009/09/06/cell-phone-cost-calculator-killed-in-canada/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Antonio Cangiano</name>
						<uri>http://antoniocangiano.com</uri>
					</author>
		<title type="html"><![CDATA[Installing the Ruby driver for DB2 on Mac OS X Snow Leopard]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ZenAndTheArtOfRubyProgramming/~3/B4UmDXMyJLo/" />
		<id>http://antoniocangiano.com/?p=1097</id>
		<updated>2009-09-03T19:23:35Z</updated>
		<published>2009-09-03T19:23:35Z</published>
		<category scheme="http://antoniocangiano.com" term="DB2" /><category scheme="http://antoniocangiano.com" term="Mac" /><category scheme="http://antoniocangiano.com" term="Ruby" /><category scheme="http://antoniocangiano.com" term="Ruby on Rails" />		<summary type="html"><![CDATA[Now that Mac OS X 10.6 is out, it&#8217;s time to leave the world of 32 bit computing behind. The pre-installed Ruby interpreter will run in 64 bit mode by default, so you may need to pay attention when installing some C-based gems. The ibm_db Ruby gem for DB2 can easily be installed or updated [...]]]></summary>
		<content type="html" xml:base="http://antoniocangiano.com/2009/09/03/installing-the-ruby-driver-for-db2-on-mac-os-x-snow-leopard/">&lt;p&gt;Now that Mac OS X 10.6 is out, it&amp;#8217;s time to leave the world of 32 bit computing behind. The pre-installed Ruby interpreter will run in 64 bit mode by default, so you may need to pay attention when installing some C-based gems. The ibm_db Ruby gem for DB2 can easily be installed or updated to the latest available version by following these simple steps:&lt;/p&gt;
&lt;div class="highlight"&gt;
&lt;pre&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;sudo -s
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;IBM_DB_LIB&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/Users/&amp;lt;username&amp;gt;/sqllib/lib64
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;IBM_DB_INCLUDE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/Users/&amp;lt;username&amp;gt;/sqllib/include
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ARCHFLAGS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;-arch x86_64&amp;quot;&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;gem install ibm_db
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;You can verify that the installation was successful my running the following:&lt;/p&gt;
&lt;div class="highlight"&gt;
&lt;pre&gt;&lt;span class="nv"&gt;$&lt;/span&gt; &lt;span class="n"&gt;irb&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;ibm_db.bundle&amp;#39;&lt;/span&gt;
&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Please let me know if you encounter any issues, I&amp;#8217;d be glad to help you.&lt;/p&gt;
&lt;!-- Social Bookmarks BEGIN --&gt;
&lt;div class="social_bookmark"&gt;
&lt;a&gt;&lt;strong&gt;&lt;em&gt;Bookmark and share:&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;div class="d"&gt;
&lt;br /&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://buzz.yahoo.com/submit?submitUrl=http://antoniocangiano.com/2009/09/03/installing-the-ruby-driver-for-db2-on-mac-os-x-snow-leopard/&amp;amp;submitHeadline=Installing+the+Ruby+driver+for+DB2+on+Mac+OS+X+Snow+Leopard&amp;amp;submitSummary=" rel="nofollow" title="Add to&amp;nbsp;Buzz"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/buzz.png" title="Add to&amp;nbsp;Buzz" alt="Add to&amp;nbsp;Buzz" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://antoniocangiano.com/2009/09/03/installing-the-ruby-driver-for-db2-on-mac-os-x-snow-leopard/&amp;amp;title=Installing+the+Ruby+driver+for+DB2+on+Mac+OS+X+Snow+Leopard" rel="nofollow" title="Add to&amp;nbsp;Del.icio.us"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&amp;nbsp;Del.icio.us" alt="Add to&amp;nbsp;Del.icio.us" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;amp;url=http://antoniocangiano.com/2009/09/03/installing-the-ruby-driver-for-db2-on-mac-os-x-snow-leopard/&amp;amp;title=Installing+the+Ruby+driver+for+DB2+on+Mac+OS+X+Snow+Leopard" rel="nofollow" title="Add to&amp;nbsp;digg"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&amp;nbsp;digg" alt="Add to&amp;nbsp;digg" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dotnetkicks.com/kick/?url=http://antoniocangiano.com/2009/09/03/installing-the-ruby-driver-for-db2-on-mac-os-x-snow-leopard/&amp;amp;title=Installing+the+Ruby+driver+for+DB2+on+Mac+OS+X+Snow+Leopard" rel="nofollow" title="Add to&amp;nbsp;DotNetKicks"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/dotnetkicks.png" title="Add to&amp;nbsp;DotNetKicks" alt="Add to&amp;nbsp;DotNetKicks" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dzone.com/links/add.html?description=Installing+the+Ruby+driver+for+DB2+on+Mac+OS+X+Snow+Leopard&amp;amp;url=http://antoniocangiano.com/2009/09/03/installing-the-ruby-driver-for-db2-on-mac-os-x-snow-leopard/&amp;amp;title=Installing+the+Ruby+driver+for+DB2+on+Mac+OS+X+Snow+Leopard" rel="nofollow" title="Add to&amp;nbsp;DZone"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/dzone.png" title="Add to&amp;nbsp;DZone" alt="Add to&amp;nbsp;DZone" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http://antoniocangiano.com/2009/09/03/installing-the-ruby-driver-for-db2-on-mac-os-x-snow-leopard/" rel="nofollow" title="Add to&amp;nbsp;Facebook"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&amp;nbsp;Facebook" alt="Add to&amp;nbsp;Facebook" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;amp;output=popup&amp;amp;bkmk=http://antoniocangiano.com/2009/09/03/installing-the-ruby-driver-for-db2-on-mac-os-x-snow-leopard/&amp;amp;title=Installing+the+Ruby+driver+for+DB2+on+Mac+OS+X+Snow+Leopard" rel="nofollow" title="Add to&amp;nbsp;Google Bookmarks"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&amp;nbsp;Google Bookmarks" alt="Add to&amp;nbsp;Google Bookmarks" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.newsvine.com/_wine/save?u=http://antoniocangiano.com/2009/09/03/installing-the-ruby-driver-for-db2-on-mac-os-x-snow-leopard/&amp;amp;h=Installing+the+Ruby+driver+for+DB2+on+Mac+OS+X+Snow+Leopard" rel="nofollow" title="Add to&amp;nbsp;Newsvine"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/newsvine.png" title="Add to&amp;nbsp;Newsvine" alt="Add to&amp;nbsp;Newsvine" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://antoniocangiano.com/2009/09/03/installing-the-ruby-driver-for-db2-on-mac-os-x-snow-leopard/&amp;amp;title=Installing+the+Ruby+driver+for+DB2+on+Mac+OS+X+Snow+Leopard" rel="nofollow" title="Add to&amp;nbsp;reddit"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&amp;nbsp;reddit" alt="Add to&amp;nbsp;reddit" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://slashdot.org/bookmark.pl?url=http://antoniocangiano.com/2009/09/03/installing-the-ruby-driver-for-db2-on-mac-os-x-snow-leopard/&amp;amp;title=Installing+the+Ruby+driver+for+DB2+on+Mac+OS+X+Snow+Leopard" rel="nofollow" title="Add to&amp;nbsp;Slashdot"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/slashdot.png" title="Add to&amp;nbsp;Slashdot" alt="Add to&amp;nbsp;Slashdot" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://antoniocangiano.com/2009/09/03/installing-the-ruby-driver-for-db2-on-mac-os-x-snow-leopard/&amp;amp;title=Installing+the+Ruby+driver+for+DB2+on+Mac+OS+X+Snow+Leopard" rel="nofollow" title="Add to&amp;nbsp;Stumble Upon"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&amp;nbsp;Stumble Upon" alt="Add to&amp;nbsp;Stumble Upon" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.squidoo.com/lensmaster/bookmark?http://antoniocangiano.com/2009/09/03/installing-the-ruby-driver-for-db2-on-mac-os-x-snow-leopard/" rel="nofollow" title="Add to&amp;nbsp;Squidoo"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/squidoo.png" title="Add to&amp;nbsp;Squidoo" alt="Add to&amp;nbsp;Squidoo" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.sphere.com/sphereit/http://antoniocangiano.com/2009/09/03/installing-the-ruby-driver-for-db2-on-mac-os-x-snow-leopard/" rel="nofollow" title="Add to&amp;nbsp;SphereIt"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/sphereit.png" title="Add to&amp;nbsp;SphereIt" alt="Add to&amp;nbsp;SphereIt" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://antoniocangiano.com/2009/09/03/installing-the-ruby-driver-for-db2-on-mac-os-x-snow-leopard/" rel="nofollow" title="Add to&amp;nbsp;Technorati"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&amp;nbsp;Technorati" alt="Add to&amp;nbsp;Technorati" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+Installing+the+Ruby+driver+for+DB2+on+Mac+OS+X+Snow+Leopard+@+http://antoniocangiano.com/2009/09/03/installing-the-ruby-driver-for-db2-on-mac-os-x-snow-leopard/" rel="nofollow" title="Add to&amp;nbsp;Twitter"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&amp;nbsp;Twitter" alt="Add to&amp;nbsp;Twitter" /&gt;&lt;/a&gt;
&lt;a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://antoniocangiano.com/2009/09/03/installing-the-ruby-driver-for-db2-on-mac-os-x-snow-leopard/&amp;amp;t=Installing+the+Ruby+driver+for+DB2+on+Mac+OS+X+Snow+Leopard" rel="nofollow" title="Add to&amp;nbsp;Yahoo My Web"&gt;&lt;img class="social_img" src="http://antoniocangiano.com/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&amp;nbsp;Yahoo My Web" alt="Add to&amp;nbsp;Yahoo My Web" /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;!-- Social Bookmarks END --&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=B4UmDXMyJLo:DwqLpZYTlAk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=B4UmDXMyJLo:DwqLpZYTlAk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?i=B4UmDXMyJLo:DwqLpZYTlAk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=B4UmDXMyJLo:DwqLpZYTlAk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?i=B4UmDXMyJLo:DwqLpZYTlAk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=B4UmDXMyJLo:DwqLpZYTlAk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=B4UmDXMyJLo:DwqLpZYTlAk:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?a=B4UmDXMyJLo:DwqLpZYTlAk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ZenAndTheArtOfRubyProgramming?i=B4UmDXMyJLo:DwqLpZYTlAk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ZenAndTheArtOfRubyProgramming/~4/B4UmDXMyJLo" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://antoniocangiano.com/2009/09/03/installing-the-ruby-driver-for-db2-on-mac-os-x-snow-leopard/#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://antoniocangiano.com/2009/09/03/installing-the-ruby-driver-for-db2-on-mac-os-x-snow-leopard/feed/atom/" thr:count="1" />
		<thr:total>1</thr:total>
	<feedburner:origLink>http://antoniocangiano.com/2009/09/03/installing-the-ruby-driver-for-db2-on-mac-os-x-snow-leopard/</feedburner:origLink></entry>
	</feed><!-- Dynamic page generated in 1.032 seconds. --><!-- Cached page generated by WP-Super-Cache on 2009-11-08 04:07:53 -->
