<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Possibility and Probability &#187; Programming</title>
	<atom:link href="http://ironboundsoftware.com/blog/category/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://ironboundsoftware.com/blog</link>
	<description>Droplets of Yes and No</description>
	<lastBuildDate>Wed, 28 Dec 2011 01:37:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="http://superfeedr.com/hubbub"/>		<item>
		<title>Today&#8217;s Django lesson</title>
		<link>http://ironboundsoftware.com/blog/2011/12/27/todays-django-lesson/</link>
		<comments>http://ironboundsoftware.com/blog/2011/12/27/todays-django-lesson/#comments</comments>
		<pubDate>Wed, 28 Dec 2011 01:37:16 +0000</pubDate>
		<dc:creator>Nick</dc:creator>
				<category><![CDATA[django]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://ironboundsoftware.com/blog/?p=400</guid>
		<description><![CDATA[Today I was working on re-doing my main website. I have built the site in Django, and then when I&#8217;m ready to publish I use the static generator module to create an html snapshot of the pages that I then upload to the server. Basically I wanted the fun of using Django, but the ease [...]]]></description>
			<content:encoded><![CDATA[<p>Today I was working on re-doing <a href="http://ironboundsoftware.com">my main website</a>. I have built the site in <a href="https://www.djangoproject.com/">Django</a>, and then when I&#8217;m ready to publish I use the static generator module to create an html snapshot of the pages that I then upload to the server. Basically I wanted the fun of using Django, but the ease of serving up static html pages.</p>
<p>The last time I did this, the version of Django was 0.9 and today&#8217;s version is 1.3.1. As a I started work on the site I discovered some things here and there that had changed in the years in-between those version. The one that bit me the hardest was this: I could view the main page (/), but any other page (including index) would give me a 404 error.</p>
<p>This was really weird because the mappings existed in the urls.py file, but a 404 error means it couldn&#8217;t be found. If it was a programmatic error you would expect a 500 error, but I never saw one.</p>
<p>Slowly but surely I tore the system apart looking to see what could cause mapped urls to disappear in Django. Eventually I discovered the root cause was how static resources are handled.</p>
<p>One of the changes in the new versions of Django was to add functionality for handling static resources. The biggest change (at least as far as my ancient code was concerned) was in introduction of the STATIC_URL variable. According the documentation this is the prefix for static resources (like css, javascript) that are referenced by the web page that is being built by Django.</p>
<p>In my laziness many years ago, I just plopped the main CSS file (and everything else) in the root of the web directory so that in the html pages didn&#8217;t have to have paths on them. So when I was adding the STATIC_URL variable to make sure my CSS file would actually load, I set the variable this way:</p>
<blockquote><p>STATIC_URL = &#8216;/&#8217;</p></blockquote>
<p>&#8230;because it wouldn&#8217;t let me put an empty string of &#8221;. Well, it turns out that this was wrong wrong wrong. Django was looking at the incoming requests as I tried to visit the pages of the site and checking the static directory to see if there was anything there (which there wasn&#8217;t, just my CSS file).</p>
<p>Once I realized this, I changed it to:</p>
<blockquote><p>STATIC_URL = &#8216;/static/&#8217;</p></blockquote>
<p>&#8230;which basically forces you to create a directory to hold your static files. Which is right right right right. Basically Django was forcing me to clean up my act and code the site in a much cleaner manner. As soon as I did that all of the 404 errors went away and I was able to hit every page in my urls.py file.</p>
]]></content:encoded>
			<wfw:commentRss>http://ironboundsoftware.com/blog/2011/12/27/todays-django-lesson/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Choices &#8211; The hidden powers of python</title>
		<link>http://ironboundsoftware.com/blog/2011/02/06/choices-the-hidden-powers-of-python/</link>
		<comments>http://ironboundsoftware.com/blog/2011/02/06/choices-the-hidden-powers-of-python/#comments</comments>
		<pubDate>Sun, 06 Feb 2011 19:40:45 +0000</pubDate>
		<dc:creator>Nick</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://ironboundsoftware.com/blog/?p=398</guid>
		<description><![CDATA[The other day I saw something about this interesting posting on Stack Overflow: What are the lesser-known but useful features of the Python programming language? As someone who loves to work in Python and is always looking for a better way to get things done, I had to read this article right away. I was [...]]]></description>
			<content:encoded><![CDATA[<p>The other day I saw something about this interesting posting on Stack Overflow: <a href="http://stackoverflow.com/questions/101268/hidden-features-of-python/102062">What are the lesser-known but useful features of the Python programming language?</a> As someone who loves to work in Python and is always looking for a better way to get things done, I had to read this article right away.</p>
<p>I was pretty pleased with myself that I knew a lot of the things listed, and I was really happy when I ran into some nuggets that I knew nothing about. For example, I did not know that you could do this in Python:</p>
<blockquote><p>1 &lt; x &lt;10</p></blockquote>
<p>To me, that is really awesome because not only is what you would write in a mathematical sense, but it also is much more concise and what you would see in a pseudo-code representation of a program. That is the power of Python, taking an idea (a computer program) and presenting it in a readable manner. Being able to use the above type of expression just takes us further down that path of readability and that is a good thing. And yes, you can write crappy code in Python, but at least you have the choice: many languages simply have one way to do things. Choices are good.</p>
<p>And speaking of choices, I thought this feature was very cool, even if I would never use it:</p>
<blockquote><p>from __future__ import braces</p></blockquote>
<p>That allows the use of {} instead of white space in a Python program. I know some people can&#8217;t stand the indention rules of the language and feel more comfortable when they are &#8220;braced&#8221; (for impact?), but the fact the language has features to be able to turn this on? That is 1 million pounds of awesome in  a 5 pound sack.</p>
<p>There is a ton of other neat tricks there, go and read up and see what you can do to make your code work more for you! Choice is a great thing. With Python, you have lots of great choices you can make. And if you decide to make no choices, you still wind up with pretty readable code which is always a good thing.</p>
]]></content:encoded>
			<wfw:commentRss>http://ironboundsoftware.com/blog/2011/02/06/choices-the-hidden-powers-of-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python in the Amazon cloud</title>
		<link>http://ironboundsoftware.com/blog/2010/12/30/python-in-the-amazon-cloud/</link>
		<comments>http://ironboundsoftware.com/blog/2010/12/30/python-in-the-amazon-cloud/#comments</comments>
		<pubDate>Thu, 30 Dec 2010 23:22:12 +0000</pubDate>
		<dc:creator>Nick</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://ironboundsoftware.com/blog/?p=393</guid>
		<description><![CDATA[I have a couple ideas rolling around in my head, and recently I decided to take advantage of Amazon&#8217;s AWS service since they are offering a &#8220;free&#8221; tier. (Basically its free if you are below certain generous limits on resource utilization.) Since python is my weapon of choice these days, I set about to figure out how [...]]]></description>
			<content:encoded><![CDATA[<p>I have a couple ideas rolling around in my head, and recently I decided to take advantage of <a href="http://aws.amazon.com">Amazon&#8217;s AWS service</a> since they are offering a &#8220;free&#8221; tier. (Basically its free if you are below certain generous limits on resource utilization.) Since python is my weapon of choice these days, I set about to figure out how to get python up and running on an EC2 instance.</p>
<p>If you are going to go down the Linux route with AWS (and honestly why wouldn&#8217;t you?), then you are in luck since python ships on most modern distributions. But, while python is &#8220;batteries included&#8221; there are some really nice projects out there that it is good to take advantage of. Installing these projects is where you start to find out there are differences in the EC2 AMI&#8217;s.</p>
<p>My first attempt was with the default Amazon AMI. It seemed like a good choice, but the more I played with it, the more I realized that it was pretty bare-bones. easy_install is included, but when running it to try and install something you run into permissions problems.</p>
<p>Because this is supposed to be a nice experiment, I only played around with it for a hour or so. My patience exhausted, I went looking for an alternative and ran right into the perfect match: <a href="http://www.activestate.com/press-releases/activestate-launches-amazon-ec2-cloud-offering-python-developers">ActiveState has an AMI specifically for python developers</a></p>
<p>This is awesome because ActiveState puts out a really nice Windows package for Python (and other lesser languages). I fired up their AMI instance and have found it to be really nice. I put my python project out there earlier this month and it ran without a problem&#8230; until the code crashed because I forgot to put a try catch block in place. <img src='http://ironboundsoftware.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Seriously though, I really like this AMI. Not only is a nice python distribution there, but they also included gcc so if you need to compile something, you don&#8217;t have to go far. The easy_install script runs like a dream, and I haven&#8217;t had any problems with it at all. In fact, my whole experiment (which seems to getting attention mostly from blog aggregators at the moment) has only cost me a total of $0.19. Yes, only 19 cents! And 1 cent of that was from the ActiveState Python AMI (the other 18 cents was from my playing around with the Amazon AMI that wasn&#8217;t that great).</p>
<p>Now to get back to my ideas, and sling some python code out into the cloud&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://ironboundsoftware.com/blog/2010/12/30/python-in-the-amazon-cloud/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Dev Twitters to follow</title>
		<link>http://ironboundsoftware.com/blog/2010/12/07/dev-twitters-to-follow/</link>
		<comments>http://ironboundsoftware.com/blog/2010/12/07/dev-twitters-to-follow/#comments</comments>
		<pubDate>Wed, 08 Dec 2010 03:48:17 +0000</pubDate>
		<dc:creator>Nick</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://ironboundsoftware.com/blog/?p=390</guid>
		<description><![CDATA[In an earlier post, I talk about how twitter is becoming the new &#8220;plan file&#8221;. Since that post, I&#8217;ve joined twitter, and I try to use it as a plan file for my own development activities. 140 characters isn&#8217;t a lot of space, so in a way I think it is more honest: you have [...]]]></description>
			<content:encoded><![CDATA[<p>In an earlier post, I talk about how <a href="http://ironboundsoftware.com/blog/2010/08/18/are-tweets-the-new-plan/">twitter is becoming the new &#8220;plan file&#8221;</a>. Since that post, <a href="http://twitter.com/nloadholtes">I&#8217;ve joined twitter</a>, and I try to use it as a plan file for my own development activities. 140 characters isn&#8217;t a lot of space, so in a way I think it is more honest: you have to get to your point pretty quickly. Which isn&#8217;t to say that you can&#8217;t goof off with it&#8230;</p>
<p>But of course, I&#8217;m not the best or most interesting developer on twitter. Here&#8217;s a lit of developers I&#8217;m follow because they post really interesting stuff:</p>
<ul>
<li><a href="http://twitter.com/#!/ID_AA_Carmack">John Carmack</a> &#8211; id Software, creator of Doom, Quake, and lots of other awesome stuff</li>
<li><a href="http://twitter.com/#!/icculus">Ryan C. Gordon (icculus)</a> &#8211; Awesome dude, ports a lot of games to linux</li>
<li><a href="http://twitter.com/#!/dozba">Ted Dziuba</a> &#8211; He&#8217;s got opinions, and he isn&#8217;t shy about sharing them</li>
<li><a href="http://twitter.com/#!/zedshaw">Zed Shaw</a> &#8211; An old-school hacker, he&#8217;s always up to something interesting</li>
</ul>
<p>There&#8217;s a ton more out there, go and check it out!</p>
]]></content:encoded>
			<wfw:commentRss>http://ironboundsoftware.com/blog/2010/12/07/dev-twitters-to-follow/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mercurial: forking from one place to another</title>
		<link>http://ironboundsoftware.com/blog/2010/11/06/mercurial-forking-from-one-place-to-another/</link>
		<comments>http://ironboundsoftware.com/blog/2010/11/06/mercurial-forking-from-one-place-to-another/#comments</comments>
		<pubDate>Sun, 07 Nov 2010 02:57:52 +0000</pubDate>
		<dc:creator>Nick</dc:creator>
				<category><![CDATA[mercurial]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://ironboundsoftware.com/blog/?p=387</guid>
		<description><![CDATA[Lets say there&#8217;s a cool project that you want to make a fork of at http://hg.example.com/coolproject and you want to store it on BitBucket. How do you do this? It is pretty easy to do! First clone the project to your local system: hg clone http://hg.example.com/coolproject You now have a local copy. Then go and [...]]]></description>
			<content:encoded><![CDATA[<p>Lets say there&#8217;s a cool project that you want to make a fork of at http://hg.example.com/coolproject and you want to store it on <a href="http://bitbucket.org">BitBucket</a>. How do you do this?</p>
<p>It is pretty easy to do! First clone the project to your local system:</p>
<blockquote><p>hg clone http://hg.example.com/coolproject</p></blockquote>
<p>You now have a local copy. Then go and log into your bitbucket account. Create a new repository, for this example lets call it coolproject-fork. To push your local copy to BitBucket you can do this:</p>
<blockquote><p>hg push http://bitbucket.org/your_username/coolproject-fork</p></blockquote>
<p>Then your local copy will be pushed out to BitBucket. But&#8230; what do you do if you want to pull from the original and push to your private fork? Doing an <strong>hg out </strong>(from your local copy) will show that it is trying to push to http://hg.example.com, not BitBucket. To fix this, you have to modify the <em>hgrc </em>in the project and tell it the out path is different than the in path.</p>
<p>Go into the .hg directory in the coolproject directory and open up the hgrc file. Make these changes:</p>
<blockquote><p>[paths]</p>
<p>default = http://hg.example.com/coolproject</p>
<p>default-push = http://bitbucket.org/your_username/coolproject-fork</p></blockquote>
<p>Now you can do <strong>hg pull</strong> to get updates from the original project (on example.com) and when you do <strong>hg push</strong> it will push your changes back to BitBucket!</p>
]]></content:encoded>
			<wfw:commentRss>http://ironboundsoftware.com/blog/2010/11/06/mercurial-forking-from-one-place-to-another/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Slow and steady wins the race</title>
		<link>http://ironboundsoftware.com/blog/2010/10/18/slow-and-steady-wins-the-race/</link>
		<comments>http://ironboundsoftware.com/blog/2010/10/18/slow-and-steady-wins-the-race/#comments</comments>
		<pubDate>Mon, 18 Oct 2010 21:30:30 +0000</pubDate>
		<dc:creator>Nick</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[version control]]></category>

		<guid isPermaLink="false">http://ironboundsoftware.com/blog/?p=382</guid>
		<description><![CDATA[Every now and then I&#8217;ll have a conversation with a developer and the topic of &#8220;Why doesn&#8217;t everyone switch to X?&#8221; comes up. For X, substitute any of the following &#8220;new&#8221; things: version control, language, database, OS, methodology, pattern. It has taken me a while, but I have learned through experience that just because something is new, [...]]]></description>
			<content:encoded><![CDATA[<p>Every now and then I&#8217;ll have a conversation with a developer and the topic of &#8220;Why doesn&#8217;t everyone switch to X?&#8221; comes up. For X, substitute any of the following &#8220;new&#8221; things: version control, language, database, OS, methodology, pattern.</p>
<p>It has taken me a while, but I have learned through experience that just because something is new, it doesn&#8217;t mean you should jump into it.</p>
<p>A lot of people don&#8217;t realize the value that an established process/technology provides, that stability can be priceless. For example, people who jumped whole-hog into JavaFX are probably starting to regret that choice.</p>
<p>Now having said that, there is a break even point, the older a project is, the more one should look at specific fixes for specific problems. Switching from Java to .NET? Not important. Switching from COBOL to Java/.NET/Ruby? Important. Changing as few variables at one time as possible? Vitally important!</p>
<p>Version Control really seems to be finally getting the attention it deserves lately and that is a great thing. Disciplined open source projects have been setting a great example for developers and businesses alike for some time. As a result, a lot of them are using &#8220;older&#8221; technologies like CVS. A few years ago there was a flood of people breaking away from CVS to use Subversion, and these days there&#8217;s a push to go to distributed version control solutions like Git or Mercurial.</p>
<p>This <a href="http://lwn.net/SubscriberLink/409635/d605f07a2dc7bf27/">great article talks about one group who made that decision</a> and the work they did to ensure their history (and build-able version of older releases) were ported over into the brave new world of Git.</p>
<p>I am very impressed with the level of maturity the project leaders showed with that conversion: They did not just drink the git-workflow kool-aide, instead they decided to change only one thing: the version control system.</p>
<blockquote><p><em>Side note</em>: One of the major turn offs for me about the Git community was their instance on adopting their workflow model when using the git tool. While I welcome new points of view and ideas, a while ago it seemed like it was &#8220;git&#8217;s way or the highway&#8221; when it came to using that system. Mercurial on the other hand seemed a little more open to the typical svn/cvs way of doing development. That is one of the reasons why I personally chose to work with Mercurial. In the time since then my personal workflow has changed a little bit to be more like the DVCS approach. In time I might become less of a svn developer and more of a DVCS developer. Having said that, I still don&#8217;t care for the Git staging area.</p></blockquote>
<p>My hat is off to them for keeping their project under their control while modernizing a significant piece of infrastructure. My hope is that Postgres will stand as an example of how to grow without starting over. Once the developers, testers, users, and other stakeholders get used to the new version control system, then they can make the next move (whatever that may be).</p>
<p>I think that down the road a few years this will be seen as an important decision by the project leadership, in the event of a bug being found, they will be able to look at the history and see when it entered the system and at the  same time be able to reap the benefits of the DVCS revolution.</p>
]]></content:encoded>
			<wfw:commentRss>http://ironboundsoftware.com/blog/2010/10/18/slow-and-steady-wins-the-race/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TDD and honesty in code</title>
		<link>http://ironboundsoftware.com/blog/2010/09/10/tdd-and-honesty-in-code/</link>
		<comments>http://ironboundsoftware.com/blog/2010/09/10/tdd-and-honesty-in-code/#comments</comments>
		<pubDate>Fri, 10 Sep 2010 16:02:48 +0000</pubDate>
		<dc:creator>Nick</dc:creator>
				<category><![CDATA[Astronomy]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://ironboundsoftware.com/blog/?p=375</guid>
		<description><![CDATA[I&#8217;m working on a little project to help keep track of satellites. Specifically, I&#8217;m taking an existing code base (the AIAA SGP4 code which is written in C/C++), wrapping it with python, and then eventually putting a web front end on it. The end goal is that astronomers will be able to use this code/website to [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m working on a little project to help keep track of satellites.</p>
<p>Specifically, I&#8217;m taking an existing code base (the <a href="http://pdf.aiaa.org/preview/CDReadyMAST06_1308/PV2006_6753.pdf">AIAA SGP4 code</a> which is written in C/C++), wrapping it with <a href="http://python.org">python</a>, and then eventually putting a web front end on it. The end goal is that astronomers will be able to use this code/website to check their observations to see if there was a satellite in their field of view when they took their measurements.</p>
<p>Since I&#8217;m using a known library in to create something new, this seemed like a really great opportunity to use some Test Driven Development (TDD) to ensure that as I build up the parts of the system, the numbers stay true and that the code stays honest.</p>
<p>This is working out really well. Combining python&#8217;s unit test module with <a href="http://somethingaboutorange.com/mrl/projects/nose">nosetests</a> allows me to quickly bang out a test to make sure that the positional numbers that the SGP4 code generates is what the documentation says it should be. By using TDD I can map out where the code needs to go a little better: As I find something that is missing I can write out a quick test that will fail. When I run nosetests, I have that failure glaring at me telling me where more code is needed.</p>
<p>For example, I have one set of test data that gives the observer&#8217;s location in standard latitude and longitude coordinates. My code isn&#8217;t quite expecting this, the <a href="http://www.minorplanetcenter.org/iau/mpc.html">MPC format </a>is a little bit different. This is a problem that is easy to fix, but I have a plethora of problems at the moment and I need to make sure this one gets taken care of properly. So I opened up the python file that tests the Observatory class and added in a failing test that called <em>testLatLongToXYZ(). </em>When I run the tests I now see that this is a failing method which gives me the mental kick in the pants to go and implement that method, even if it is just a stub.</p>
<p>Why do I say just a stub? Because putting in the stub lets  me do two things: 1) I&#8217;ve now got something there, and 2) I can now update the test to call that stub. The secret is that the test should now call the stub and expect it to pass, but the stub should always return something (None, False, -1, etc.) to indicate that it failed.</p>
<p>This acts as a pointer to an area that needs improvement in the code. This is what TDD is all about. You keep repeating this process until you converge on a &#8220;correct&#8221; answer which is a method that does just what it needs to do. In theory, and so far my practice confirms this, the resulting code should be smaller and more accurate.</p>
<p>For me this is a great thing because it encourages code that is more honest. What is honest code? To me, it is code that does what it says and nothing else. The shorter the code is, the more focused it is. The python language is very expressive and allows you to do a lot without saying a lot. This power can lead you to try and do too much in one function. Once you have a function that not only converts Lat and Long, but also converts polar coordinates and writes satellite data to the database, can you really honestly call that function <em>convertLatLongToXYZ()</em>?</p>
<p>This is especially valuable in the scientific context of this astronomy related code. The code is open source, and in the event there is a problem with it, as people dig into the code they need to have confidence that the code is relatively well written. At a high level the tests give them the numerical sense of ease that it is working when the tests run and show the proper numbers being returned. At a low level, seeing that the code is broken up into small logical sections gives the confidence that once  problem is found it can be corrected, tested, and shown that there are minimal side effects in other parts of the program.</p>
<p>As the lone developer on this project, this type of check-and-balance gives me a lot of hope that I&#8217;ll be able to produce something that is accurate and useful to the community at large. Openness and honesty help build confidence and trust. If you are interested in the project, be sure to check it out:</p>
<p><a href="https://bitbucket.org/nloadholtes/obssatid">ObsSatId: A python astronomy project to wrap the SGP4 code to check for satellites</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ironboundsoftware.com/blog/2010/09/10/tdd-and-honesty-in-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Are tweets the new .plan?</title>
		<link>http://ironboundsoftware.com/blog/2010/08/18/are-tweets-the-new-plan/</link>
		<comments>http://ironboundsoftware.com/blog/2010/08/18/are-tweets-the-new-plan/#comments</comments>
		<pubDate>Thu, 19 Aug 2010 02:29:03 +0000</pubDate>
		<dc:creator>Nick</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://ironboundsoftware.com/blog/?p=368</guid>
		<description><![CDATA[Back in the good old days, there was the .plan file. You could use the finger command to ping a server and it would return the contents of the .plan file. The awesome folks at id Software were big users of this service. It was so very cool to get a behind the scenes peek [...]]]></description>
			<content:encoded><![CDATA[<p>Back in the good old days, there was the .plan file. You could use the finger command to ping a server and it would return the contents of the .plan file. The awesome folks at <a href="http://www.idsoftware.com/">id Software</a> were big users of this service.</p>
<p>It was so very cool to get a behind the scenes peek at what was going on with a group of people making a top notch game. Other developers began doing this also, and soon there was a nice little ecosystem of plan updates flying around. This was all pre-RSS.</p>
<p>Over time the .plan file fad kinda fizzled out and died. But now with the rise of twitter, it seems like it could see a come back. True, 140 characters is not a lot of room to explain certain technical issues, but <a href="http://twitter.com/ID_AA_Carmack">John Carmack&#8217;s tweets</a> are a step in the right direction. I&#8217;m glad he&#8217;s back.</p>
]]></content:encoded>
			<wfw:commentRss>http://ironboundsoftware.com/blog/2010/08/18/are-tweets-the-new-plan/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Mercurial talks to Git (and has for a while now)</title>
		<link>http://ironboundsoftware.com/blog/2010/07/28/mercurial-talks-to-git-and-has-for-a-while-now/</link>
		<comments>http://ironboundsoftware.com/blog/2010/07/28/mercurial-talks-to-git-and-has-for-a-while-now/#comments</comments>
		<pubDate>Thu, 29 Jul 2010 02:53:08 +0000</pubDate>
		<dc:creator>Nick</dc:creator>
				<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://ironboundsoftware.com/blog/?p=363</guid>
		<description><![CDATA[This is really awesome: A mercurial plugin that allows you to interact with git repositories It has apparently been around for a while, here&#8217;s a blog post explaining how to use hg-git I see lots of stuff going on with git, there&#8217;s a lot of projects using it and github is a hotbed of activity. [...]]]></description>
			<content:encoded><![CDATA[<p>This is really awesome: <a href="http://hg-git.github.com/">A mercurial plugin that allows you to interact with git repositories</a></p>
<p>It has apparently been around for a while, here&#8217;s a blog post <a href="http://github.com/blog/439-hg-git-mercurial-plugin">explaining how to use hg-git</a></p>
<p>I see lots of stuff going on with git, there&#8217;s a lot of projects using it and github is a hotbed of activity. It has some really neat tools like gist, and all of the visualizations of the project stats and I think that is a large part of its appeal. As a mercurial user the closest site we have is bitbucket which is nice, but lacks some of those features.</p>
<p>This hg-git bridge finally pushed me to sign up for a github account. I honestly don&#8217;t know why I didn&#8217;t get one before, if nothing else it is a great thing to have because of the gist feature. I have some ideas for some small python projects, maybe I&#8217;ll give <a href="http://github.com/nloadholtes">my github account</a> a test drive with one of those.</p>
<p>I&#8217;m sure I&#8217;ll stay with <a href="http://bitbucket.org/nloadholtes">my bitbucket repositories</a> for a while, but it is nice to know that there are options out there. Especially from CVS which I have come to dread working with again. Svn really doesn&#8217;t bother me that bad, but the flexibility of DVCS systems like hg and git are beginning to spoil me&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://ironboundsoftware.com/blog/2010/07/28/mercurial-talks-to-git-and-has-for-a-while-now/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python function overloading via multimethods</title>
		<link>http://ironboundsoftware.com/blog/2010/07/21/python-function-overloading-via-multimethods/</link>
		<comments>http://ironboundsoftware.com/blog/2010/07/21/python-function-overloading-via-multimethods/#comments</comments>
		<pubDate>Thu, 22 Jul 2010 02:13:57 +0000</pubDate>
		<dc:creator>Nick</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://ironboundsoftware.com/blog/?p=361</guid>
		<description><![CDATA[One of my favorite features of OO languages like Java is the ability to overload a method, which is where you have several methods with the same name, but they take in different types in their arguments. I love the python language, but as I blogged about a while ago, not having overloaded methods in [...]]]></description>
			<content:encoded><![CDATA[<p>One of my favorite features of OO languages like Java is the ability to overload a method, which is where you have several methods with the same name, but they take in different types in their arguments.</p>
<p>I love the python language, but as I blogged about a while ago, <a href="http://ironboundsoftware.com/blog/2007/05/29/a-shortfall-of-python-no-function-overloading/">not having overloaded methods in python</a> is kind of a bummer. But do you have to trade your dynamic freedom in for static types to gain this? It turns out that with a little ingenuity, you can get that functionality using the <a href="http://en.wikipedia.org/wiki/Multiple_dispatch">generic dispatch pattern</a> and python&#8217;s decorator syntax.</p>
<p>The example on the above wiki page is nice and concise, but I think that <a href="http://alexgaynor.net/2010/jun/26/multimethods-python/">Alex Gaynor&#8217;s blog post about multimethods is the best</a> example of how to implement this useful idea. In leiu of an explanation of how it works, Alex gives us a unit test that exercises the mutimethod class and the dispatch/overloading idea that it brings to life. As long as you know what a <a href="http://www.artima.com/weblogs/viewpost.jsp?thread=240808">decorator</a> is the code does make sense.</p>
<p>There are other examples of using a <a href="http://mike.axiak.net/blog/2010/06/25/python-generic-dispatch/">dispatch</a>, but I feel that Alex&#8217;s is more clear. These are of course no substitute for having function overloading built into the python language, but having the functionality wrapped up in a nice neat class like this is a very good thing.</p>
]]></content:encoded>
			<wfw:commentRss>http://ironboundsoftware.com/blog/2010/07/21/python-function-overloading-via-multimethods/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

