<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" version="2.0">

<channel>
	<title>Endlessly Curious</title>
	
	<link>http://www.endlesslycurious.com</link>
	<description>by Daniel Brown</description>
	<lastBuildDate>Thu, 03 Jun 2010 16:53:04 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/EndlesslyCurious" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="endlesslycurious" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>The Evils of Global State and Singletons</title>
		<link>http://www.endlesslycurious.com/2010/06/03/the-evils-of-global-state-and-singletons/</link>
		<comments>http://www.endlesslycurious.com/2010/06/03/the-evils-of-global-state-and-singletons/#comments</comments>
		<pubDate>Thu, 03 Jun 2010 16:53:04 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://www.endlesslycurious.com/?p=1377</guid>
		<description><![CDATA[In this Google Clean Code talk, Miško Hevery presents the evils of global state, how this relates to Singletons, testing and what to do about it.

Questions starting at 31:20 are pretty interesting.
]]></description>
			<content:encoded><![CDATA[<p>In this Google Clean Code talk, Miško Hevery presents the evils of global state, how this relates to Singletons, testing and what to do about it.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://www.youtube.com/v/-FRm3VPhseI&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en_US&amp;feature=player_embedded&amp;fs=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/-FRm3VPhseI&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en_US&amp;feature=player_embedded&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Questions starting at 31:20 are pretty interesting.</p>
<img src="http://feeds.feedburner.com/~r/EndlesslyCurious/~4/7qTO9T1HaJ8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.endlesslycurious.com/2010/06/03/the-evils-of-global-state-and-singletons/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Email Minimalism</title>
		<link>http://www.endlesslycurious.com/2010/06/01/email-minimalism/</link>
		<comments>http://www.endlesslycurious.com/2010/06/01/email-minimalism/#comments</comments>
		<pubDate>Tue, 01 Jun 2010 09:00:07 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Organisation]]></category>
		<category><![CDATA[Email]]></category>

		<guid isPermaLink="false">http://www.endlesslycurious.com/?p=1477</guid>
		<description><![CDATA[For years I have struggled with organising my email in an effective manner.  Most of my attempts until recently involved lots of email folders and mail filters and still I&#8217;d have difficulty telling the wood from the trees in terms of importance and feel swamped by the quantity of email.
My most recent system which I [...]]]></description>
			<content:encoded><![CDATA[<p>For years I have struggled with organising my email in an effective manner.  Most of my attempts until recently involved lots of email folders and mail filters and still I&#8217;d have difficulty telling the wood from the trees in terms of importance and feel swamped by the quantity of email.</p>
<p>My most recent system which I am very pleased with so far consists of only the following four folders:</p>
<ul>
<li><strong>Inbox</strong> &#8211; Only emails with me in the &#8216;To&#8217; field, kept for three months.</li>
<li><strong>CCed</strong> &#8211; Only emails with me in the &#8216;CC&#8217; field, kept for one month.</li>
<li><strong>Lists</strong> &#8211; Any emails that don&#8217;t have me in either the &#8216;To&#8217; or &#8216;CC&#8217; fields, kept for two weeks.</li>
<li><strong>Archive</strong> &#8211; No filters put email in this folder, it is 100% manual, kept forever.</li>
</ul>
<p>This system has made it easy to filter out the important emails (sent directly to me) from less important emails (which I am typically CCed on) or mailing lists (which seldom require any action).  I use the auto archiving (deletion) feature of my email client which allows me to automatically dispose of emails after a preset period based on the folder they are stored in.</p>
<p>I hope to phase out the archive folder sometime as I use <a title="Evernote" href="http://www.evernote.com/">Evernote</a> to store any information I want to be able to find easily at a later date: as a purpose designed note/idea management application it is highly superior for the storing, organising and searching of data.</p>
<img src="http://feeds.feedburner.com/~r/EndlesslyCurious/~4/xUQCbDzPbws" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.endlesslycurious.com/2010/06/01/email-minimalism/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>But I can write that in…</title>
		<link>http://www.endlesslycurious.com/2010/05/28/but-i-can-write-that-in/</link>
		<comments>http://www.endlesslycurious.com/2010/05/28/but-i-can-write-that-in/#comments</comments>
		<pubDate>Fri, 28 May 2010 09:00:18 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Reuse]]></category>

		<guid isPermaLink="false">http://www.endlesslycurious.com/?p=1335</guid>
		<description><![CDATA[I have lost count of the times I have heard a developer exclaim &#8216;but I could write that in X days&#8217; when discussing adopting an existing piece of technology developed somewhere else.   This is usually given as a reason not to adopt an existing external solution but to instead write a custom solution with [...]]]></description>
			<content:encoded><![CDATA[<p>I have lost count of the times I have heard a developer exclaim &#8216;but I could write that in X days&#8217; when discussing adopting an existing piece of technology developed somewhere else.   This is usually given as a reason not to adopt an existing external solution but to instead write a custom solution with some minor improvement or feature.  There are two big flaws in this line of reasoning.</p>
<p>The first is the assumption that you could create something with the same quality level as the existing solution in the stated number of days; most likely you will be lucky to have a functional prototype with minimal functionality.  It is highly unlikely that you will have produced something that is as well tested, optimised and documented as the existing solution.</p>
<p>Secondly, as developers writing software which we intend to sell to users to pay the bills, we should be focused on the core features that define our product.  It is these core features we should be pouring our energy and time into designing, building and testing.  Developing alternatives to existing technology that is not in our core feature set is a waste of valuable time and energy and will not differentiate our product from that of our competitors.</p>
<p>We should instead be looking to leverage as many established technologies or components as possible when developing new systems as this lets us spend most of our time where it matters most on our core differentiating features.</p>
<img src="http://feeds.feedburner.com/~r/EndlesslyCurious/~4/vDwh71oNhI4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.endlesslycurious.com/2010/05/28/but-i-can-write-that-in/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Journaling @ Work</title>
		<link>http://www.endlesslycurious.com/2010/05/25/journaling-at-work/</link>
		<comments>http://www.endlesslycurious.com/2010/05/25/journaling-at-work/#comments</comments>
		<pubDate>Tue, 25 May 2010 09:00:21 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Misc]]></category>
		<category><![CDATA[Journaling]]></category>
		<category><![CDATA[Organisation]]></category>
		<category><![CDATA[Tasks]]></category>

		<guid isPermaLink="false">http://www.endlesslycurious.com/?p=1395</guid>
		<description><![CDATA[Over the years at work I have tried various solutions to task management: the mental to-do list, the simple paper notebook, the electronic PDA or Smartphone, to-do software or combinations of the above.  I have until recently not found a solution that lets me list my tasks and record what I actually do each day.
My solution [...]]]></description>
			<content:encoded><![CDATA[<p>Over the years at work I have tried various solutions to task management: the mental to-do list, the simple paper notebook, the electronic PDA or Smartphone, to-do software or combinations of the above.  I have until recently not found a solution that lets me list my tasks and record what I actually do each day.</p>
<p>My solution is the humble <a title="MoleSkine" href="http://www.moleskine.com/catalogue/diariesplanners/12_month_weekly_notebook/">Moleskine Weekly Notebook</a> (below).  As the name suggests the weekly notebook is a cunning combination of weekly diary (on the left page) and notebook (on the right page).  This allows me to write my to-do list for the week on the notebook page and record what I do each day on the appropriate section of the diary page.</p>
<p style="text-align: left;"><a href="http://www.endlesslycurious.com/wp-content/uploads/2010/05/MoleskineWeeklyNotebook.jpg"><img class="size-medium wp-image-1447 aligncenter" title="Moleskine Weekly Notebook" src="http://www.endlesslycurious.com/wp-content/uploads/2010/05/MoleskineWeeklyNotebook-300x275.jpg" alt="" width="300" height="275" /></a>Having my work log and to-do list in the same physical entity has been a real break-through for me as it means I can track my progress towards my objectives and be able to account for where my time is spent each day.  This has allowed me to analyse my working patterns and evaluate what is taking up time that could be better spent working on the tasks in my to-do list.  Being able to record unexpected events that have taken up time e.g. build breaks or sickness has also proven very useful.</p>
<p style="text-align: left;">What I don&#8217;t use this notebook for is an actual appointment diary or strategic to-do list as I have found through experimentation that there is seldom sufficient space for such things.  I have <a title="Microsoft" href="http://office.microsoft.com/en-us/outlook/">Microsoft Outlook</a> which does appointment and calendar management and <a title="EverNote" href="http://www.evernote.com/">Evernote</a> which does high level strategic tasks lists and note gathering.</p>
<img src="http://feeds.feedburner.com/~r/EndlesslyCurious/~4/C8_GdaTSbfI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.endlesslycurious.com/2010/05/25/journaling-at-work/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>80-20 Rule Wallpaper</title>
		<link>http://www.endlesslycurious.com/2010/05/21/80-20-rule-wallpaper/</link>
		<comments>http://www.endlesslycurious.com/2010/05/21/80-20-rule-wallpaper/#comments</comments>
		<pubDate>Fri, 21 May 2010 09:00:34 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[Visualisations]]></category>
		<category><![CDATA[80-20 Rule]]></category>

		<guid isPermaLink="false">http://www.endlesslycurious.com/?p=1433</guid>
		<description><![CDATA[I created the wallpaper below to remind myself about the implications of the Pareto Principle known commonly as the &#8216;80-20&#8242; rule.  Click the image for the original sized version.

]]></description>
			<content:encoded><![CDATA[<p>I created the wallpaper below to remind myself about the implications of the <a title="Wikipedia" href="http://en.wikipedia.org/wiki/Pareto_principle">Pareto Principle</a> known commonly as the &#8216;80-20&#8242; rule.  Click the image for the original sized version.</p>
<p style="text-align: center;"><a href="http://www.endlesslycurious.com/wp-content/uploads/2010/05/20Rule.png"><img class="size-medium wp-image-1434 aligncenter" title="80-20 Rule" src="http://www.endlesslycurious.com/wp-content/uploads/2010/05/20Rule-300x300.png" alt="" width="300" height="300" /></a></p>
<img src="http://feeds.feedburner.com/~r/EndlesslyCurious/~4/fxUQ_nEdH1w" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.endlesslycurious.com/2010/05/21/80-20-rule-wallpaper/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The perfect is the enemy of the good.</title>
		<link>http://www.endlesslycurious.com/2010/05/18/the-perfect-is-the-enemy-of-the-good/</link>
		<comments>http://www.endlesslycurious.com/2010/05/18/the-perfect-is-the-enemy-of-the-good/#comments</comments>
		<pubDate>Tue, 18 May 2010 09:00:01 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[80-20 Rule]]></category>

		<guid isPermaLink="false">http://www.endlesslycurious.com/?p=1414</guid>
		<description><![CDATA[Have you ever wondered why some projects develop functional prototypes almost overnight while other projects take forever to produce a working prototype?  I think one of the major deciding factors in whether a project team will rapidly assemble a working product or not is if they are aiming for something that is perfect or &#8216;merely&#8217; [...]]]></description>
			<content:encoded><![CDATA[<p>Have you ever wondered why some projects develop functional prototypes almost overnight while other projects take forever to produce a working prototype?  I think one of the major deciding factors in whether a project team will rapidly assemble a working product or not is if they are aiming for something that is perfect or &#8216;merely&#8217; good enough.</p>
<p style="text-align: center;">&#8220;<em>The perfect is the enemy of the good.</em>&#8221; &#8211; <a title="Wikipedia" href="http://en.wikipedia.org/wiki/Voltaire">Voltaire</a>.</p>
<p>The pursuit of perfection is counter to the pursuit of a working product.  To build the perfect product takes time: lots of time, more time than most companies can afford.  To produce a good enough product takes significantly less time which increases the chances of actually getting it to market, making a profit and surviving long enough as a business to make a second improved iteration of the product.</p>
<p style="text-align: center;">&#8220;<em>For many events, roughly 80% of the effects come from 20% of the causes.</em>&#8221; &#8211; <a title="Wikipedia" href="http://en.wikipedia.org/wiki/Pareto_principle">Pareto Principle</a>.</p>
<p>According to the Pareto Principle (also known as the 80-20 rule) the first eighty percent of the output (effects) comes from only twenty percent of the work (causes).  This eighty percent output is the &#8216;good enough&#8217; product, therefore to produce the perfect product takes five times as long as the merely good enough.</p>
<p>The question you should ask is &#8216;Do we need perfection?&#8217;.  I suspect unless you are programming medical, industrial or military equipment or software the answer is likely to be &#8216;No&#8217;.</p>
<img src="http://feeds.feedburner.com/~r/EndlesslyCurious/~4/BywUrLME26M" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.endlesslycurious.com/2010/05/18/the-perfect-is-the-enemy-of-the-good/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dealing with Poisonous People</title>
		<link>http://www.endlesslycurious.com/2010/04/28/dealing-with-poisonous-people/</link>
		<comments>http://www.endlesslycurious.com/2010/04/28/dealing-with-poisonous-people/#comments</comments>
		<pubDate>Wed, 28 Apr 2010 09:00:24 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[Video]]></category>

		<guid isPermaLink="false">http://www.endlesslycurious.com/?p=1415</guid>
		<description><![CDATA[Another video by the same guys that presented &#8216;The myth of the genius programmer&#8217;, this time from Google I/O 2008: talking about how to protect your open source project from poisonous or negative people.  I think their advice is equally applicable to non-open source projects as it is to open source projects.

Hat tip to [...]]]></description>
			<content:encoded><![CDATA[<p>Another video by the same guys that presented &#8216;The myth of the genius programmer&#8217;, this time from Google I/O 2008: talking about how to protect your open source project from poisonous or negative people.  I think their advice is equally applicable to non-open source projects as it is to open source projects.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="640" height="505" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/-F-3E8pyjFo&amp;hl=en_US&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/-F-3E8pyjFo&amp;hl=en_US&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Hat tip to <a href="http://cliff.hammerschmidt.ca/">Cliff</a> for pointing this video out to me.</p>
<img src="http://feeds.feedburner.com/~r/EndlesslyCurious/~4/1yS8gokylls" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.endlesslycurious.com/2010/04/28/dealing-with-poisonous-people/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RSS Feeds Moving!</title>
		<link>http://www.endlesslycurious.com/2010/01/15/rss-feeds-moving/</link>
		<comments>http://www.endlesslycurious.com/2010/01/15/rss-feeds-moving/#comments</comments>
		<pubDate>Sat, 16 Jan 2010 01:23:12 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false">http://www.endlesslycurious.com/?p=1411</guid>
		<description><![CDATA[I am going to be moving this sites RSS feeds away from FeedBurner this weekend.  Mostly because I want per topic feeds and I have not yet found a FeedBurner plug-in for WordPress that supports that.
Consider yourself warned if you are using an RSS reader!
Update: I didn&#8217;t move the RSS feeds in the end.
]]></description>
			<content:encoded><![CDATA[<p>I am going to be moving this sites RSS feeds away from FeedBurner this weekend.  Mostly because I want per topic feeds and I have not yet found a FeedBurner plug-in for WordPress that supports that.</p>
<p>Consider yourself warned if you are using an RSS reader!</p>
<p><strong>Update</strong>: I didn&#8217;t move the RSS feeds in the end.</p>
<img src="http://feeds.feedburner.com/~r/EndlesslyCurious/~4/LXtdRRNPSWg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.endlesslycurious.com/2010/01/15/rss-feeds-moving/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Myth of the Genius Programmer</title>
		<link>http://www.endlesslycurious.com/2009/12/10/myth-of-the-genius-programmer/</link>
		<comments>http://www.endlesslycurious.com/2009/12/10/myth-of-the-genius-programmer/#comments</comments>
		<pubDate>Thu, 10 Dec 2009 09:00:09 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Misc]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[Video]]></category>

		<guid isPermaLink="false">http://www.endlesslycurious.com/?p=1373</guid>
		<description><![CDATA[From the Google I/O 2009 conference:
&#8220;A pervasive elitism hovers in the background of collaborative software development: everyone secretly wants to be seen as a genius. In this talk, we discuss how to avoid this trap and gracefully exchange personal ego for personal growth and super-charged collaboration. We&#8217;ll also examine how software tools affect social behaviors, and [...]]]></description>
			<content:encoded><![CDATA[<p>From the <a href="http://code.google.com/events/io/">Google I/O</a> 2009 conference:<br />
&#8220;<em>A pervasive elitism hovers in the background of collaborative software development: everyone secretly wants to be seen as a genius. In this talk, we discuss how to avoid this trap and gracefully exchange personal ego for personal growth and super-charged collaboration. We&#8217;ll also examine how software tools affect social behaviors, and how to successfully manage the growth of new ideas.</em>&#8221;</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/0SARbwvhupQ&amp;hl=en_US&amp;fs=1&amp;rel=0" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/0SARbwvhupQ&amp;hl=en_US&amp;fs=1&amp;rel=0" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Despite being almost an hour long this is a very insightful video that I&#8217;d recommend any Software Engineer watches.  I find it fascinating that so many programmers want to erase their perceived (or actual) mistakes in source control systems.  I guess everyone secretly wants to be the perfect super programmer.  However I typically learn more from my failures than my successes: perhaps it is natural to be more introspective about failure than success?</p>
<p>If you find the title or video too pretentious then the question and answers session (around 42:40) is still quite interesting as the presenters get grilled by the audience.</p>
<img src="http://feeds.feedburner.com/~r/EndlesslyCurious/~4/jyLgnu_uslo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.endlesslycurious.com/2009/12/10/myth-of-the-genius-programmer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installing MatPlotLib on Snow Leopard with MacPorts</title>
		<link>http://www.endlesslycurious.com/2009/12/08/installing-matplotlib-on-snow-leopard-with-macports/</link>
		<comments>http://www.endlesslycurious.com/2009/12/08/installing-matplotlib-on-snow-leopard-with-macports/#comments</comments>
		<pubDate>Tue, 08 Dec 2009 09:00:13 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[How To]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[HowTo]]></category>

		<guid isPermaLink="false">http://www.endlesslycurious.com/?p=1357</guid>
		<description><![CDATA[I have been trying to install the excellent MatPlotLib graphing module for the Python programming language on my iMac for a while now. Unlike most python module installations I&#8217;ve done the excellent python SetupTools (a.k.a easy_install) has not been up to the task.  So I ended up using MacPorts (version 1.8.1) to get MatPlotLib (version 0.99.1.1) installed on Snow [...]]]></description>
			<content:encoded><![CDATA[<p>I have been trying to install the excellent <a href="http://matplotlib.sourceforge.net/index.html">MatPlotLib</a> graphing module for the <a href="http://www.python.org/">Python</a> programming language on my iMac for a while now. Unlike most python module installations I&#8217;ve done the excellent python <a href="http://pypi.python.org/pypi/setuptools">SetupTools</a> (a.k.a easy_install) has not been up to the task.  So I ended up using <a href="http://www.macports.org/">MacPorts</a> (version 1.8.1) to get MatPlotLib (version 0.99.1.1) installed on <a title="Apple.com" href="http://www.apple.com/macosx/">Snow Leopard</a> (OS X 10.6.2) with X-Code (3.2.1 &#8211; 1613).</p>
<p>So here is a brief description of how to do it:</p>
<ol>
<li>Install the <a href="http://developer.apple.com/tools/xcode/">X-Code</a> developer tools (for GCC, make and other build tools) from your Snow Leopard installation DvD.</li>
<li>Install the <a href="http://en.wikipedia.org/wiki/X_Window_System">X11</a> Window System from your Snow Leopard installation DvD.</li>
<li>Run &#8216;<a href="http://www.apple.com/softwareupdate/">Software Update</a>&#8216; from the apple menu on your Mac to get the latest X-Code updates.</li>
<li>Download the latest MacPorts installer (.dmg file extension) for Snow Leopard from here: <a title="Mac Ports" href="http://distfiles.macports.org/MacPorts/">http://distfiles.macports.org/MacPorts/</a>.</li>
<li>Mount the installer image file (.dmg) and run the contained MacPorts installer (.pkg).</li>
<li>Once installation is complete open a terminal window from Applications-&gt;Utilities-&gt;Terminal.</li>
<li>Type &#8216;<span style="color: #008000;">port</span>&#8216; at the terminal then press enter to run MacPorts.  You should see output like the following if it installed correctly:<br />
<span style="color: #808000;">MacPorts 1.8.1<br />
Entering interactive mode&#8230; (&#8220;help&#8221; for help, &#8220;quit&#8221; to quit)</span><br />
Then type &#8216;<span style="color: #008000;">quit</span>&#8216; then press enter to exit port&#8217;s interactive mode.</li>
<li>Type &#8216;<span style="color: #008000;">sudo port selfupdate</span>&#8216; and press enter to update MacPorts to the latest version.  You will be asked to enter the administrators password before continuing.  Depending on how new the version you downloaded is, MacPorts may do some upgrading.</li>
<li>Once the update is finished type &#8216;<span style="color: #008000;">sudo port install py26-matplotlib</span>&#8216; and press enter.  This will attempt to install the latest version of matplotlib for Python version 2.6.*.   You may be asked to enter the administrators password before continuing.  MacPorts will now download, configure, build and stage the dependencies needed to build the latest matplotlib for Python 2.6.  This took at least thirty minutes on my iMac and involved lots and lots of scrolling text output from the build process.</li>
<li>Next we need to switch our environment to use version 2.6.* of Python that MacPorts just built and installed with matplotlib.  To do this run the following two commands, note you may be asked to enter the administrators password before continuing:
<ol>
<li>&#8216;<span style="color: #008000;">sudo port install python_select</span>&#8216; and hit enter.</li>
<li>&#8216;<span style="color: #008000;">sudo python_select python26</span>&#8216; and hit enter.</li>
</ol>
</li>
<li>To test this all worked type the following: &#8216;python -V&#8217; and hit enter.  You should see output like &#8216;<span style="color: #808000;">Python 2.6.4</span>&#8216; which should match the version of python MacPorts built and installed.</li>
<li>Finally to test if matplotlib was installed correctly do the following:
<ol>
<li>Type &#8216;<span style="color: #008000;">python</span>&#8216; and hit enter to enter the python interactive shell.</li>
<li>Type &#8216;<span style="color: #008000;">import matplotlib</span>&#8216; and hit enter, this will import the matplotlib module.  There should be no output if this works.</li>
<li>Type &#8216;<span style="color: #008000;">print matplotlib.__version__</span>&#8216; and hit enter. This will print the version of matplotlib that is installed, you should see output like &#8216;<span style="color: #808000;">0.99.1.1</span>&#8216;.</li>
<li>Type &#8216;<span style="color: #008000;">exit()</span>&#8216; to quit the python interactive shell.</li>
</ol>
</li>
</ol>
<img src="http://feeds.feedburner.com/~r/EndlesslyCurious/~4/AWdIaa8BTHI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.endlesslycurious.com/2009/12/08/installing-matplotlib-on-snow-leopard-with-macports/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss><!-- Dynamic page generated in 0.471 seconds. --><!-- Cached page generated by WP-Super-Cache on 2010-07-20 10:21:49 -->
