<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>swiftcoding</title>
	<atom:link href="http://swiftcoder.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://swiftcoder.wordpress.com</link>
	<description>Ramblings on code, etc.</description>
	<lastBuildDate>Tue, 17 Jan 2012 22:38:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='swiftcoder.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://0.gravatar.com/blavatar/ac73112cc87f267d1e2b2b5851c50792?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>swiftcoding</title>
		<link>http://swiftcoder.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://swiftcoder.wordpress.com/osd.xml" title="swiftcoding" />
	<atom:link rel='hub' href='http://swiftcoder.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Bidding a Freelance Contract</title>
		<link>http://swiftcoder.wordpress.com/2011/10/28/bidding-a-freelance-contract/</link>
		<comments>http://swiftcoder.wordpress.com/2011/10/28/bidding-a-freelance-contract/#comments</comments>
		<pubDate>Sat, 29 Oct 2011 00:12:16 +0000</pubDate>
		<dc:creator>Tristam MacDonald</dc:creator>
				<category><![CDATA[Freelancing]]></category>
		<category><![CDATA[bidding]]></category>
		<category><![CDATA[contract]]></category>
		<category><![CDATA[freelance]]></category>

		<guid isPermaLink="false">http://swiftcoder.wordpress.com/?p=435</guid>
		<description><![CDATA[Advice on estimating and bidding contracts as a freelancer.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=swiftcoder.wordpress.com&amp;blog=3224297&amp;post=435&amp;subd=swiftcoder&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Although I am gainfully employed at present, in the past I have made a good portion of my living in freelance work: websites, Facebook applications, database tools &#8211; even the odd carpentry project. The most essential skill involved in freelancing <em>any</em> field? Communication. But the next most important skill is the ability to accurately estimate and bid for a contract.</p>
<p>If you&#8217;re working a regular job, you are almost always paid by the hour. Freelance work is sometimes paid by the hour, but more often the client will want you to bid a fixed price for the entire project: a &#8216;contract price&#8217;. And even if it is paid by the hour, the hourly rate isn&#8217;t generally a pre-determined constant &#8211; you will have to get in there and negotiate the hourly rate you deserve.</p>
<p>So how does one estimate a fair bid for a contract? <span id="more-435"></span>Lets take a look at some of the most important factors to consider:</p>
<p><strong>Time<br />
</strong>The first factors to consider are how long the project will take to complete, and when the client wants it to be completed by. If the project is going to take a month, and the client wants results in a week, you probably don&#8217;t want to touch this. If it looks like a week&#8217;s work, and the client is expecting it to take 6 months, then you may be badly underestimating the amount of work.</p>
<p>How do you estimate how long a project will take? That comes down to practice and experience. You have worked in your field, you know roughly how long it takes you to complete each type of task &#8211; so you look at the project, break it down into its component parts, figure out how long each will take, and put it all together again. Is this difficult? Yes. Will you make mistakes? Yes. But over time you&#8217;ll learn, and we will get to dealing with mistakes in a moment.</p>
<p><strong>Expenses<br />
</strong>The next factor is direct expenses. These are the expenses incurred directly by the job: do you need to buy new tools/computer/software in order to complete the job? Will you need to buy books or training? Will you need to travel as part of the job, or commute to the client&#8217;s offices? All of this should be pretty straightforward to determine, and the prices for all of it should be easy to figure out &#8211; just add it all up.</p>
<p>After that comes living expenses, and these are a little more tricky: rent, utilities, cell phone bills, daily transport costs, food, entertainment&#8230; I am assuming you have a fairly good idea of your own cost of living, but if not, you need to figure this all out soonest. Once you have a good idea of your cost of living, multiply it by your time estimate, and add it to the rest of your expenses.</p>
<p><strong>Taxes<br />
</strong>So you have your expenses, and those form your bottom line: if you want to complete the job and keep a roof over your head, you have to make at least that much. But wait&#8230; The federal government wants a cut. And then there are state taxes. And social security. And don&#8217;t forget health insurance &#8211; unless you already have a full-time job in addition to your freelance work, you&#8217;ll need to pay for your own.</p>
<p>So you need to calculate all this up as well, and add it to your expenses. You probably already known your health insurance premiums, and there are tax and social security calculators on the internet, so this shouldn&#8217;t present much in the way of difficulties.</p>
<p><strong>Profit margin<br />
</strong>Unless you are truly desperate (and there will be times when you are desperate), you don&#8217;t want to be just barely managing to pay the bills. So we need to build some profit into this estimate. Ideally, you want to be making 30% profit or more, and obviously, the higher the better as long as the market will bear (apart from ethical concerns if you&#8217;re just ripping off the client).</p>
<p><strong>Risk management<br />
</strong>So you have your bottom line, you&#8217;ve built in a tidy little profit, but there is still the matter of risk &#8211; and there are really two issues at play here. The first is estimation error: your time estimate may not be perfect, or the project may just hit unexpected snags and expenses. And the second is part and parcel of the very nature of free lancing: this isn&#8217;t a regular job, so once the contract is over you are once again unemployed. This means that you need to account not only for living expenses during the contract, but also for living expenses while you search for your next contract. If you are lucky, you might have another contract lined up by the time you finish this one, but nothing in life is guaranteed.</p>
<p>So you have to build in a certain &#8216;buffer&#8217; to absorb these risks. A common rule of thumb is to double your estimate, others go with 1.5x, but in the end this is a judgement call, based on your evaluation of risk. And also on your evaluation of how high you can actually bid, which brings us to&#8230;</p>
<p><strong>Client expectations<br />
</strong>At this point you hopefully have a very good idea of how much money you need to make for this contract to be worthwhile to you. So we reach what is perhaps the trickiest part of the entire process: judging how much the client is willing to pay. This is largely subjective, but it involves taking a good look at the client: does the client actually have a lot of money? Are they miserly with the money they have? Have they already budgeted a small/large amount for this project?</p>
<p>And very importantly: are they soliciting bids from other freelancers on this project, with which you need to compete? If you are the only person they have asked for a quote, then it often behooves you to pitch your quote a little high &#8211; you&#8217;ll have a chance to negotiate the final price. But if you are bidding against other people, then you will rarely (if ever) have a chance to submit a later counter-bid.</p>
<p>And that&#8217;s pretty much the gist of it &#8211; get out there and start estimating. I guarantee you&#8217;ll make mistakes, maybe take a loss on a few projects, but if you develop the knack for it, it all evens out in the end.</p>
<p><strong>*A final word: subcontracting</strong><br />
If someone hires me to develop a website, I&#8217;m fine on the technical end of things, but I am no artist. So I&#8217;ll need to hire a graphic designer to work with me for at least a portion of the project. This is tricky: you need to factor in all the same considerations for the artist that you do for yourself &#8211; the only saving grace being that you are absorbing most of the risk, which makes their calculation simpler. My best advice is to find your subcontractor early, and communicate with them on the bidding process. They will have a better idea than you about their own time estimates and expenses.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/swiftcoder.wordpress.com/435/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/swiftcoder.wordpress.com/435/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/swiftcoder.wordpress.com/435/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/swiftcoder.wordpress.com/435/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/swiftcoder.wordpress.com/435/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/swiftcoder.wordpress.com/435/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/swiftcoder.wordpress.com/435/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/swiftcoder.wordpress.com/435/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/swiftcoder.wordpress.com/435/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/swiftcoder.wordpress.com/435/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/swiftcoder.wordpress.com/435/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/swiftcoder.wordpress.com/435/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/swiftcoder.wordpress.com/435/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/swiftcoder.wordpress.com/435/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=swiftcoder.wordpress.com&amp;blog=3224297&amp;post=435&amp;subd=swiftcoder&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://swiftcoder.wordpress.com/2011/10/28/bidding-a-freelance-contract/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0d34b1d6d4def4b515dec693de59f251?s=96&#38;d=identicon&#38;r=PG" medium="image">
			<media:title type="html">swiftcoder</media:title>
		</media:content>
	</item>
		<item>
		<title>Logarithmic Spiral Distance Field</title>
		<link>http://swiftcoder.wordpress.com/2010/06/21/logarithmic-spiral-distance-field/</link>
		<comments>http://swiftcoder.wordpress.com/2010/06/21/logarithmic-spiral-distance-field/#comments</comments>
		<pubDate>Mon, 21 Jun 2010 14:50:01 +0000</pubDate>
		<dc:creator>Tristam MacDonald</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Mathematics]]></category>
		<category><![CDATA[procedural generation]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://swiftcoder.wordpress.com/?p=401</guid>
		<description><![CDATA[I have been playing around with distance field rendering, inspired by some of Iñigo Quílez&#8217;s work. Along the way I needed to define analytic distance functions for a number of fairly esoteric geometric primitives, among them the logarithmic spiral: The distance function for this spiral is not particularly hard to derive, but the derivation isn&#8217;t entirely [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=swiftcoder.wordpress.com&amp;blog=3224297&amp;post=401&amp;subd=swiftcoder&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I have been playing around with distance field rendering, inspired by some of <a href="http://iquilezles.org/prods/" target="_blank">Iñigo Quílez&#8217;s work</a>. Along the way I needed to define analytic distance functions for a number of fairly esoteric geometric primitives, among them the <a href="http://en.wikipedia.org/wiki/Logarithmic_spiral" target="_blank">logarithmic spiral</a>:<br />
<img class="alignnone" src="http://upload.wikimedia.org/wikipedia/commons/thumb/4/40/Logarithmic_Spiral_Pylab.svg/260px-Logarithmic_Spiral_Pylab.svg.png" alt="" width="260" height="260" /><span id="more-401"></span><br />
The distance function for this spiral is not particularly hard to derive, but the derivation isn&#8217;t entirely straightforward, and it isn&#8217;t documented anywhere else, so I thought I would share. I am only going to deal with logarithmic spirals centered on the origin, but the code is trivial to extend for spirals under translation.</p>
<p>Spirals are considerably more tractable in polar coordinates, so we start with the polar coordinate form of the logarithmic spiral equation:</p>
<p><img src='http://s0.wp.com/latex.php?latex=r+%3D+ae%5E%7Bb%5CTheta%7D&amp;bg=ffffff&amp;fg=000&amp;s=0' alt='r = ae^{b&#92;Theta}' title='r = ae^{b&#92;Theta}' class='latex' /> (1)</p>
<p>Where (roughly) a controls the starting angle, and b controls how tightly the spiral is wound.</p>
<p>Since we are given an input point in x,y Cartesian form, we need to convert that to polar coordinates as well:</p>
<p><img src='http://s0.wp.com/latex.php?latex=r_%7Btarget%7D+%3D+%5Csqrt%7Bx%5E2+%2B+y%5E2%7D%2C%5C%3B+%5CTheta_%7Btarget%7D+%3D+atan%28y%2Fx%29&amp;bg=ffffff&amp;fg=000&amp;s=0' alt='r_{target} = &#92;sqrt{x^2 + y^2},&#92;; &#92;Theta_{target} = atan(y/x)' title='r_{target} = &#92;sqrt{x^2 + y^2},&#92;; &#92;Theta_{target} = atan(y/x)' class='latex' /></p>
<p>Now, we can observe that the closest point on the spiral to our input point must be on the line running through our input point and the origin &#8211; draw the line on the graph above if you want to check for yourself. Since the logarithmic spiral passes through the same radius line every 360°, this means than the closest point must be at an angle of:</p>
<p><img src='http://s0.wp.com/latex.php?latex=%5CTheta_%7Bfinal%7D+%3D+%5CTheta_%7Btarget%7D+%2B+n+%2A360%5E%7B%5Ccirc%7D&amp;bg=ffffff&amp;fg=000&amp;s=0' alt='&#92;Theta_{final} = &#92;Theta_{target} + n *360^{&#92;circ}' title='&#92;Theta_{final} = &#92;Theta_{target} + n *360^{&#92;circ}' class='latex' /> (2)</p>
<p>Where n is a non-negative integer. We can combine (1) and (2), to arrive at an equation for r in terms of n:</p>
<p><img src='http://s0.wp.com/latex.php?latex=r+%3D+ae%5E%7Bb%28%5CTheta_%7Btarget%7D+%2B+n%2A360%5E%7B%5Ccirc%7D%29%7D&amp;bg=ffffff&amp;fg=000&amp;s=0' alt='r = ae^{b(&#92;Theta_{target} + n*360^{&#92;circ})}' title='r = ae^{b(&#92;Theta_{target} + n*360^{&#92;circ})}' class='latex' /> (3)</p>
<p>Which means we can find r if we know n. Unfortunately we don&#8217;t know n, but we do know r<sub>target</sub>, which is an approximation for the value of r. We start by rearranging equation (3) in terms of n:</p>
<p><img src='http://s0.wp.com/latex.php?latex=n+%3D+%5Cfrac%7B%5Cfrac%7Bln%28%5Cfrac%7Br%7D%7Ba%7D%29%7D%7Bb%7D+-+%5CTheta_%7Btarget%7D%7D%7B360%5E%7B%5Ccirc%7D%7D&amp;bg=ffffff&amp;fg=000&amp;s=0' alt='n = &#92;frac{&#92;frac{ln(&#92;frac{r}{a})}{b} - &#92;Theta_{target}}{360^{&#92;circ}}' title='n = &#92;frac{&#92;frac{ln(&#92;frac{r}{a})}{b} - &#92;Theta_{target}}{360^{&#92;circ}}' class='latex' /> (4)</p>
<p>Now, feeding in the value of r<sub>target</sub> for r will give us an approximate value for n. This approximation will be a real (float, if you prefer), and we can observe from the graph above that the closest point must be at either the next larger or smaller integer value of n.</p>
<p>If we take the floor and ceil of our approximation for n, we will have both integer quantities, and can feed each value back into equation (3) to determine the two possible values of r, r<sub>1</sub> and r<sub>2</sub>. The final step involves finding which of these is the closest, and the distance thereof:</p>
<p><img src='http://s0.wp.com/latex.php?latex=min%28%7Cr_1-r%7C%2C+%7Cr_2-r%7C%29&amp;bg=ffffff&amp;fg=000&amp;s=0' alt='min(|r_1-r|, |r_2-r|)' title='min(|r_1-r|, |r_2-r|)' class='latex' /></p>
<p>And there you have it:</p>
<div id="attachment_407" class="wp-caption alignnone" style="width: 520px"><a href="http://swiftcoder.files.wordpress.com/2010/06/spiral.png"><img class="size-full wp-image-407" title="spiral" src="http://swiftcoder.files.wordpress.com/2010/06/spiral.png?w=620" alt=""   /></a><p class="wp-caption-text">Distance field for a logarithmic spiral</p></div>
<p>The python source code below produces the image shown above, as a 1000&#215;1000 pixel image PNM image written to stdout. If you aren&#8217;t familiar with the <a href="http://en.wikipedia.org/wiki/Netpbm_format#PGM_example" target="_blank">PNM format</a>, it is an exceedingly simple ascii-based analogue of a bitmap image, and can be loaded directly in <a href="http://www.gimp.org/" target="_blank">GIMP</a>.</p>
<p><pre class="brush: python;">
import math

def spiral(x, y, a=1.0, b=1.0):
  # calculate the target radius and theta
  r = math.sqrt(x*x + y*y)
  t = math.atan2(y, x)

  # early exit if the point requested is the origin itself
  # to avoid taking the logarithm of zero in the next step
  if (r == 0):
    return 0

  # calculate the floating point approximation for n
  n = (math.log(r/a)/b - t)/(2.0*math.pi)

  # find the two possible radii for the closest point
  upper_r = a * math.pow(math.e, b * (t + 2.0*math.pi*math.ceil(n)))
  lower_r = a * math.pow(math.e, b * (t + 2.0*math.pi*math.floor(n)))

  # return the minimum distance to the target point
  return min(abs(upper_r - r), abs(r - lower_r))

# produce a PNM image of the result
if __name__ == '__main__':
  print 'P2'
  print '# distance field image for spiral'
  print '1000 1000'
  print '255'
  for i in range(-500, 500):
    for j in range(-500, 500):
      print '%3d' % min( 255, int(spiral(i, j, 1.0, 0.5)) ),
    print
</pre></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/swiftcoder.wordpress.com/401/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/swiftcoder.wordpress.com/401/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/swiftcoder.wordpress.com/401/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/swiftcoder.wordpress.com/401/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/swiftcoder.wordpress.com/401/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/swiftcoder.wordpress.com/401/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/swiftcoder.wordpress.com/401/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/swiftcoder.wordpress.com/401/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/swiftcoder.wordpress.com/401/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/swiftcoder.wordpress.com/401/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/swiftcoder.wordpress.com/401/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/swiftcoder.wordpress.com/401/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/swiftcoder.wordpress.com/401/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/swiftcoder.wordpress.com/401/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=swiftcoder.wordpress.com&amp;blog=3224297&amp;post=401&amp;subd=swiftcoder&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://swiftcoder.wordpress.com/2010/06/21/logarithmic-spiral-distance-field/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0d34b1d6d4def4b515dec693de59f251?s=96&#38;d=identicon&#38;r=PG" medium="image">
			<media:title type="html">swiftcoder</media:title>
		</media:content>

		<media:content url="http://upload.wikimedia.org/wikipedia/commons/thumb/4/40/Logarithmic_Spiral_Pylab.svg/260px-Logarithmic_Spiral_Pylab.svg.png" medium="image" />

		<media:content url="http://swiftcoder.files.wordpress.com/2010/06/spiral.png" medium="image">
			<media:title type="html">spiral</media:title>
		</media:content>
	</item>
		<item>
		<title>The price of progress</title>
		<link>http://swiftcoder.wordpress.com/2010/01/21/the-price-of-progress/</link>
		<comments>http://swiftcoder.wordpress.com/2010/01/21/the-price-of-progress/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 18:34:21 +0000</pubDate>
		<dc:creator>Tristam MacDonald</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://swiftcoder.wordpress.com/?p=349</guid>
		<description><![CDATA[I recently installed the beta of Microsoft Office 2010, and the first thing that struck me is how it performs noticeably worse on my 3.0 GHz quad-core AMD gaming rig, than Office &#8217;98 performed on a now 12-year-old PowerBook G3, powered by a little 250 MHz PPC processor. You can probably guess the next stage [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=swiftcoder.wordpress.com&amp;blog=3224297&amp;post=349&amp;subd=swiftcoder&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I recently installed the beta of Microsoft Office 2010, and the first thing that struck me is how it performs noticeably worse on my 3.0 GHz quad-core AMD gaming rig, than Office &#8217;98 performed on a now 12-year-old PowerBook G3, powered by a little 250 MHz PPC processor.</p>
<p>You can probably guess the next stage of this little anecdote&#8230; Office &#8217;98 on that G3 performed ever-so-slightly worse than Office 4.0 on a truly antediluvian PowerBook 180, which sported a fantastic (for the time) 33 MHz Motorola 68030 CPU.</p>
<p>Now, I am not being entirely fair here &#8211; the spellchecker is much faster, the grammar checker didn&#8217;t even exist back then, and various other ancillary features have been added and improved. But the core issue remains, Office 2010 (or 2007, which is not in beta) running on a very decent gaming rig, takes longer to launch and is less responsive to keyboard input than Office 4.0 on an 33 MHz 68k.</p>
<p>And the problem isn&#8217;t restricted to Microsoft products alone, as many pieces of software have suffered the same sort of creep, not least among them the Mac and Windows operating systems.</p>
<p>In the open-source world and among smaller developers this phenomenon is far less common: a well configured linux or BSD installation boots in a handful of seconds, Blender (sporting most of the features of expensive software such as 3DS Max and Maya) launches immediately and always remains responsive, and Maxis&#8217; Spore takes minutes to start up and load a game while <a href="http://quelsolaar.com/love/index.html" target="_blank">Eskil&#8217;s Love</a> throws you into the game in under 10 seconds.</p>
<p>My current computer is many thousands of times faster than that PowerBook 180, so in theory at least, we should be able to do far more, and do the same old things much faster. Why then the slowdown?</p>
<p>It can&#8217;t be lack of resources &#8211; we are talking about companies such as Microsoft, Apple and Adobe, all with enormous R&amp;D and development budgets, and teams of experienced programmers and engineers. Besides, the open-source guys manage just fine, some with just a handful of programmers, and most with no budget whatsoever.</p>
<p>It has been argued that <a href="http://web.archive.org/web/20080605152435/http://hq.fsmlabs.com/~cort/papers/lazy/lazy.nohead.html" target="_blank">programmer laziness</a> (a.k.a. badly educated programmers) are to blame, but I am not sure this can be the entire story. Certainly the &#8216;dumbing down&#8217; of University-taught computer science hasn&#8217;t helped, nor has the widespread rise of languages that &#8216;protect&#8217; the programmer from the hardware, nor the rise of programming paradigms that seek to abstract away from low-level knowledge. But that is the topic of another rant, and is somewhat tangential to the topic at hand. Companies can afford to hire the best programmers, and could if they wanted to, create the demand necessary to reform education practices.</p>
<p>And that brings us to the real heart of the issue: software developers measure success in terms of sales and profit. As long as your software sells, there is no need to spend money on making the software perform better. And if you happen to have a virtual monopoly, such as Microsoft&#8217;s Office or Adobe&#8217;s Photoshop, then there is no incentive to improve the customer&#8217;s experience, beyond what is needed to sell them a new version each year.</p>
<p>However, when you lose such a monopoly, the game changes, and it generally changes for the better. When FireFox, Opera and later Safari started cutting a swathe into Microsoft&#8217;s Internet Explorer monopoly, Microsoft was forced to adapt. The latest version of Internet Explorer is fast, standards compliant, and relatively free of the virus infection risks that plagued earlier versions.</p>
<p>This outcome of the browser war has led at least a few to the conclusion that open-source is the answer, and that open-source will inevitably recreate what has been developed commercially, and either surpass that commercial product, or force it to evolve. Sadly, I don&#8217;t see this happening particularly quickly, or on a wide scale &#8211; OpenOffice is playing catch-up in its efforts to provide an out-of-the-box replacement for Microsoft Office, GIMP lags far behind Photoshop, and linux, despite widespread adoption in a few key fields (namely budget servers and embedded devices) still lags far behind Windows and Mac in many areas.</p>
<p>For many years this wasn&#8217;t a problem &#8211; every few years you would buy a new computer, typically an order of magnitude faster than the computer it replaced. If new versions of your software consumed a few million more cycles, well, there were cycles to burn, and besides, the hardware companies needed a market for faster computers, didn&#8217;t they?</p>
<p>Nowadays the pendulum is swinging in the opposite direction. Atom powered netbooks, Tegra powered tablets, ARM powered smartphones &#8211; all of these promise a full computing experience in tiny packages with minimal power consumption. Even though the iPhone in your hand is considerably more powerful than that 33 MHz PowerBook 180, it doesn&#8217;t have even a fraction of the computing power offered by your shiny new laptop or desktop. And users expect a lot more than they did in the early nineties &#8211; animated full colour user interfaces, high definition streaming video and flash applications, oh, and don&#8217;t drain the battery!</p>
<p>CPU cycles today are becoming as precious as they ever were, only now many of our programmers have no experience of squeezing every last drop of performance out of them. Has the business of software development come full circle, and once again become the territory of the elite &#8216;low-level&#8217; programmer?</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/swiftcoder.wordpress.com/349/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/swiftcoder.wordpress.com/349/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/swiftcoder.wordpress.com/349/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/swiftcoder.wordpress.com/349/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/swiftcoder.wordpress.com/349/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/swiftcoder.wordpress.com/349/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/swiftcoder.wordpress.com/349/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/swiftcoder.wordpress.com/349/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/swiftcoder.wordpress.com/349/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/swiftcoder.wordpress.com/349/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/swiftcoder.wordpress.com/349/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/swiftcoder.wordpress.com/349/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/swiftcoder.wordpress.com/349/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/swiftcoder.wordpress.com/349/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=swiftcoder.wordpress.com&amp;blog=3224297&amp;post=349&amp;subd=swiftcoder&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://swiftcoder.wordpress.com/2010/01/21/the-price-of-progress/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0d34b1d6d4def4b515dec693de59f251?s=96&#38;d=identicon&#38;r=PG" medium="image">
			<media:title type="html">swiftcoder</media:title>
		</media:content>
	</item>
		<item>
		<title>RFC 1149 implemented</title>
		<link>http://swiftcoder.wordpress.com/2009/09/12/rfc-1149-implemented/</link>
		<comments>http://swiftcoder.wordpress.com/2009/09/12/rfc-1149-implemented/#comments</comments>
		<pubDate>Sat, 12 Sep 2009 20:12:06 +0000</pubDate>
		<dc:creator>Tristam MacDonald</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[humour]]></category>

		<guid isPermaLink="false">http://swiftcoder.wordpress.com/?p=334</guid>
		<description><![CDATA[This one goes out to all the networking students in the house: Wired reports that a firm in South Africa successfully demonstrated that data transmission via flash drive equipped carrier pigeon is faster than their existing internet service (source). Of course, any networking student worth his salt should know that this approach dates back to [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=swiftcoder.wordpress.com&amp;blog=3224297&amp;post=334&amp;subd=swiftcoder&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>This one goes out to all the networking students in the house:</p>
<p>Wired reports that a firm in South Africa successfully demonstrated that data transmission via flash drive equipped carrier pigeon is faster than their existing internet service (<a href="http://www.wired.com/epicenter/2009/09/in-africa-a-pigeon-transfers-data-faster-than-the-internet/" target="_blank">source</a>).</p>
<p>Of course, any networking student worth his salt should know that this approach dates back to 1990, in the form of <a href="http://www.ietf.org/rfc/rfc1149.txt" target="_blank">RFC 1149</a>&#8230;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/swiftcoder.wordpress.com/334/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/swiftcoder.wordpress.com/334/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/swiftcoder.wordpress.com/334/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/swiftcoder.wordpress.com/334/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/swiftcoder.wordpress.com/334/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/swiftcoder.wordpress.com/334/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/swiftcoder.wordpress.com/334/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/swiftcoder.wordpress.com/334/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/swiftcoder.wordpress.com/334/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/swiftcoder.wordpress.com/334/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/swiftcoder.wordpress.com/334/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/swiftcoder.wordpress.com/334/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/swiftcoder.wordpress.com/334/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/swiftcoder.wordpress.com/334/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=swiftcoder.wordpress.com&amp;blog=3224297&amp;post=334&amp;subd=swiftcoder&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://swiftcoder.wordpress.com/2009/09/12/rfc-1149-implemented/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0d34b1d6d4def4b515dec693de59f251?s=96&#38;d=identicon&#38;r=PG" medium="image">
			<media:title type="html">swiftcoder</media:title>
		</media:content>
	</item>
		<item>
		<title>simplui 1.0.4 released</title>
		<link>http://swiftcoder.wordpress.com/2009/08/17/simplui-1-0-4-released/</link>
		<comments>http://swiftcoder.wordpress.com/2009/08/17/simplui-1-0-4-released/#comments</comments>
		<pubDate>Mon, 17 Aug 2009 21:01:05 +0000</pubDate>
		<dc:creator>Tristam MacDonald</dc:creator>
				<category><![CDATA[simplui]]></category>
		<category><![CDATA[opengl]]></category>
		<category><![CDATA[pyglet]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://swiftcoder.wordpress.com/?p=315</guid>
		<description><![CDATA[New in this version: Support for multiple windows Java-style flow layout Full batching Numerous performance enhancements and bug fixes Minor theme tweaks setuptools/easy_install support Given the speed of development, simplui has moved to its own googlecode project: http://simplui.googlecode.com You can obtain the source from Mercurial, or download the binary package there. In addition, simplui has [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=swiftcoder.wordpress.com&amp;blog=3224297&amp;post=315&amp;subd=swiftcoder&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>New in this version:</p>
<ul>
<li>Support for multiple windows</li>
<li>Java-style flow layout</li>
<li>Full batching</li>
<li>Numerous performance enhancements and bug fixes</li>
<li>Minor theme tweaks</li>
<li>setuptools/easy_install support</li>
</ul>
<p>Given the speed of development, simplui has moved to its own googlecode project:</p>
<p><a href="http://simplui.googlecode.com" target="_blank">http://simplui.googlecode.com</a></p>
<p>You can obtain the source from Mercurial, or download the binary package there.</p>
<p>In addition, simplui has been integrated with setuptools/easy_install. You can find the package listing in the PyPI directory (<a href="http://pypi.python.org/pypi/simplui/1.0.4" target="_blank">here</a>), or you can install immediately with easy_install:</p>
<p style="padding-left:30px;"><tt>easy_install simplui</tt></p>
<p>(note that easy_install will not install the demo application and themes)</p>
<p>This release does come complete with a few of caveats:</p>
<ul>
<li>simplui is only compatible with pyglet 1.1 maintenance &#8211; not the experimental version in trunk</li>
<li>There is a <a href="http://code.google.com/p/pyglet/issues/detail?id=423" target="_blank">bug in pyglet 1.1.3</a> which can cause crashes if un-patched.</li>
<li>On Mac OS X, you may need to upgrade setuptools (<tt>sudo easy_install -s /usr/bin setuptools</tt>)</li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/swiftcoder.wordpress.com/315/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/swiftcoder.wordpress.com/315/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/swiftcoder.wordpress.com/315/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/swiftcoder.wordpress.com/315/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/swiftcoder.wordpress.com/315/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/swiftcoder.wordpress.com/315/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/swiftcoder.wordpress.com/315/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/swiftcoder.wordpress.com/315/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/swiftcoder.wordpress.com/315/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/swiftcoder.wordpress.com/315/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/swiftcoder.wordpress.com/315/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/swiftcoder.wordpress.com/315/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/swiftcoder.wordpress.com/315/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/swiftcoder.wordpress.com/315/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=swiftcoder.wordpress.com&amp;blog=3224297&amp;post=315&amp;subd=swiftcoder&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://swiftcoder.wordpress.com/2009/08/17/simplui-1-0-4-released/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0d34b1d6d4def4b515dec693de59f251?s=96&#38;d=identicon&#38;r=PG" medium="image">
			<media:title type="html">swiftcoder</media:title>
		</media:content>
	</item>
		<item>
		<title>Community News</title>
		<link>http://swiftcoder.wordpress.com/2009/08/14/community-news/</link>
		<comments>http://swiftcoder.wordpress.com/2009/08/14/community-news/#comments</comments>
		<pubDate>Fri, 14 Aug 2009 23:55:26 +0000</pubDate>
		<dc:creator>Tristam MacDonald</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[simplui]]></category>
		<category><![CDATA[GDNet]]></category>
		<category><![CDATA[pyglet]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://swiftcoder.wordpress.com/?p=302</guid>
		<description><![CDATA[Various things have been snowballing recently, with the result that both development and blogging have fallen by the wayside. A few interesting things are happening however, take a look and see for yourself, after the jump&#8230; The future of pyglet Alex Holkner recently announced that he isn&#8217;t able to continue development/maintenance of pyglet anymore. If [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=swiftcoder.wordpress.com&amp;blog=3224297&amp;post=302&amp;subd=swiftcoder&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Various things have been snowballing recently, with the result that both development and blogging have fallen by the wayside. A few interesting things are happening however, take a look and see for yourself, after the jump&#8230;</p>
<p><span id="more-302"></span></p>
<h2>The future of pyglet</h2>
<p>Alex Holkner recently announced that he isn&#8217;t able to continue development/maintenance of pyglet anymore. If you work with pyglet, consider weighing in on the news group about the reorganisation of development:</p>
<p><a href="http://groups.google.com/group/pyglet-users/browse_thread/thread/cd603298938b7371" target="_blank">http://groups.google.com/group/pyglet-users/browse_thread/thread/cd603298938b7371</a></p>
<h2>simplui development</h2>
<p>With the recent profusion of GUI toolkits and the discussion thereof on the pyglet mailing list, I have decided to formalise the development of simplui a bit. To that end, I have dedicated a section of the wiki to simplui. The information there is currently very sparse, but I hope to expand it in the near future.</p>
<p style="padding-left:30px;"><a href="http://wiki.darkcoda.com/wiki/simplui" target="_blank">http://wiki.darkcoda.com/wiki/simplui</a></p>
<p>In particular, I welcome discussion of future features and enhancements, on the road map and associated discussion page:</p>
<p style="padding-left:30px;"><a href="http://wiki.darkcoda.com/wiki/simplui/roadmap" target="_blank">http://wiki.darkcoda.com/wiki/simplui/roadmap</a></p>
<h2>Happenings over @ GameDev.net</h2>
<p>A while back I entered a prize-drawing for some GDNet goodies, by helping spread the word about Intel&#8217;s Level Up 20098 contest. I was lucky enough to be picked as a winner, and the kind folks at GameDev sent me a satchel full of pens, mini GDNet frisbees, and sticky-headed darts in the shape of stick-figures &#8211; anyone know what they are intended for?</p>
<p>GameDev&#8217;s editorial staff have approved a short n&#8217; sweet article by yours truly on the subject of spatial hashing. With a little luck it will appear on the site in the next week or so.</p>
<p>I figured I would also take this opportunity to mention that after 6 years and 4,000+ forum posts, I have become a member of GameDev&#8217;s hallowed <a href="http://www.gamedev.net/community/forums/activestats.asp" target="_blank">Top 50 Rated Posters</a> (not including moderators and staff). Think that is worth a line on my resume? <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/swiftcoder.wordpress.com/302/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/swiftcoder.wordpress.com/302/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/swiftcoder.wordpress.com/302/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/swiftcoder.wordpress.com/302/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/swiftcoder.wordpress.com/302/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/swiftcoder.wordpress.com/302/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/swiftcoder.wordpress.com/302/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/swiftcoder.wordpress.com/302/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/swiftcoder.wordpress.com/302/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/swiftcoder.wordpress.com/302/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/swiftcoder.wordpress.com/302/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/swiftcoder.wordpress.com/302/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/swiftcoder.wordpress.com/302/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/swiftcoder.wordpress.com/302/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=swiftcoder.wordpress.com&amp;blog=3224297&amp;post=302&amp;subd=swiftcoder&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://swiftcoder.wordpress.com/2009/08/14/community-news/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0d34b1d6d4def4b515dec693de59f251?s=96&#38;d=identicon&#38;r=PG" medium="image">
			<media:title type="html">swiftcoder</media:title>
		</media:content>
	</item>
		<item>
		<title>simplui 1.0.3 released</title>
		<link>http://swiftcoder.wordpress.com/2009/06/06/simplui-1-0-3-released/</link>
		<comments>http://swiftcoder.wordpress.com/2009/06/06/simplui-1-0-3-released/#comments</comments>
		<pubDate>Sat, 06 Jun 2009 18:28:10 +0000</pubDate>
		<dc:creator>Tristam MacDonald</dc:creator>
				<category><![CDATA[simplui]]></category>
		<category><![CDATA[opengl]]></category>
		<category><![CDATA[pyglet]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://swiftcoder.wordpress.com/?p=291</guid>
		<description><![CDATA[No major features this time, instead a slew of small bug fixes, an update to the API, and the rendering code has been rewritten for performance (primarily though batching). I wasn&#8217;t intending to push a release out until more features were added, so consider this a maintenance release. You can download the tarball, or browse [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=swiftcoder.wordpress.com&amp;blog=3224297&amp;post=291&amp;subd=swiftcoder&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>No major features this time, instead a slew of small bug fixes, an update to the API, and the rendering code has been rewritten for performance (primarily though batching).</p>
<p>I wasn&#8217;t intending to push a release out until more features were added, so consider this a maintenance release.</p>
<p>You can download the <a href="http://darkcoda.googlecode.com/files/simului-1.0.3.tgz">tarball</a>, or <a href="http://code.google.com/p/darkcoda/source/browse/simplui/tags/release-1.0.3/" target="_blank">browse the source in SVN</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/swiftcoder.wordpress.com/291/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/swiftcoder.wordpress.com/291/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/swiftcoder.wordpress.com/291/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/swiftcoder.wordpress.com/291/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/swiftcoder.wordpress.com/291/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/swiftcoder.wordpress.com/291/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/swiftcoder.wordpress.com/291/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/swiftcoder.wordpress.com/291/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/swiftcoder.wordpress.com/291/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/swiftcoder.wordpress.com/291/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/swiftcoder.wordpress.com/291/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/swiftcoder.wordpress.com/291/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/swiftcoder.wordpress.com/291/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/swiftcoder.wordpress.com/291/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=swiftcoder.wordpress.com&amp;blog=3224297&amp;post=291&amp;subd=swiftcoder&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://swiftcoder.wordpress.com/2009/06/06/simplui-1-0-3-released/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0d34b1d6d4def4b515dec693de59f251?s=96&#38;d=identicon&#38;r=PG" medium="image">
			<media:title type="html">swiftcoder</media:title>
		</media:content>
	</item>
		<item>
		<title>Simplui 1.0.2 released &#8211; now with themes!</title>
		<link>http://swiftcoder.wordpress.com/2009/06/01/simplui-1-0-2-released-now-with-themes/</link>
		<comments>http://swiftcoder.wordpress.com/2009/06/01/simplui-1-0-2-released-now-with-themes/#comments</comments>
		<pubDate>Tue, 02 Jun 2009 01:50:19 +0000</pubDate>
		<dc:creator>Tristam MacDonald</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[simplui]]></category>
		<category><![CDATA[opengl]]></category>
		<category><![CDATA[pyglet]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://swiftcoder.wordpress.com/?p=283</guid>
		<description><![CDATA[Today brings the 1.0.2 release of simplui. This is a beta release, previewing major enhancements, and I need as much feedback as possible on the new features. As such, this release isn&#8217;t heavily optimised &#8211; that is on the wishlist for next release. The big news for this release is themes support. The GUI is [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=swiftcoder.wordpress.com&amp;blog=3224297&amp;post=283&amp;subd=swiftcoder&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="attachment_284" class="wp-caption alignright" style="width: 310px"><a rel="attachment wp-att-284" href="http://swiftcoder.wordpress.com/2009/06/01/simplui-1-0-2-released-now-with-themes/simplui-themes/"><img class="size-medium wp-image-284" title="simplui-themes" src="http://swiftcoder.files.wordpress.com/2009/06/simplui-themes.png?w=300&#038;h=245" alt="The default themes provided by simplui" width="300" height="245" /></a><p class="wp-caption-text">The default themes provided by simplui</p></div>
<p>Today brings the 1.0.2 release of simplui. This is a beta release, previewing major enhancements, and I need as much feedback as possible on the new features. As such, this release isn&#8217;t heavily optimised &#8211; that is on the wishlist for next release.</p>
<p>The big news for this release is themes support. The GUI is now fully skinned, using a variant on the ninepatch method code developed by Joe Wreschnig and Alex Holkner on the pyglet mailing list.</p>
<p>Each GUI frame can use a different theme (even in the same time!), and the theme can be changed at runtime. I have included two sample themes, one modelled on the Mac OS X &#8216;Aqua&#8217; interface, and the other on the PyWidget GUI toolkit.</p>
<p>Also included are the usual crop of bug-fixes, including the squashing (hopefully for the last time) of the persistent event clipping bug.</p>
<p>As per usual, <a href="http://darkcoda.googlecode.com/files/simplui-1.0.2.tgz">grab the tarball</a>, or <a href="http://code.google.com/p/darkcoda/source/browse/simplui/tags/release-1.0.2/" target="_blank">visit SVN</a>, and let me know if you have any comments or suggestions.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/swiftcoder.wordpress.com/283/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/swiftcoder.wordpress.com/283/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/swiftcoder.wordpress.com/283/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/swiftcoder.wordpress.com/283/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/swiftcoder.wordpress.com/283/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/swiftcoder.wordpress.com/283/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/swiftcoder.wordpress.com/283/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/swiftcoder.wordpress.com/283/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/swiftcoder.wordpress.com/283/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/swiftcoder.wordpress.com/283/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/swiftcoder.wordpress.com/283/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/swiftcoder.wordpress.com/283/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/swiftcoder.wordpress.com/283/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/swiftcoder.wordpress.com/283/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=swiftcoder.wordpress.com&amp;blog=3224297&amp;post=283&amp;subd=swiftcoder&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://swiftcoder.wordpress.com/2009/06/01/simplui-1-0-2-released-now-with-themes/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0d34b1d6d4def4b515dec693de59f251?s=96&#38;d=identicon&#38;r=PG" medium="image">
			<media:title type="html">swiftcoder</media:title>
		</media:content>

		<media:content url="http://swiftcoder.files.wordpress.com/2009/06/simplui-themes.png?w=300" medium="image">
			<media:title type="html">simplui-themes</media:title>
		</media:content>
	</item>
		<item>
		<title>Starfall: planet rendering</title>
		<link>http://swiftcoder.wordpress.com/2009/05/28/starfall-planet-rendering/</link>
		<comments>http://swiftcoder.wordpress.com/2009/05/28/starfall-planet-rendering/#comments</comments>
		<pubDate>Thu, 28 May 2009 18:50:48 +0000</pubDate>
		<dc:creator>Tristam MacDonald</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[simplui]]></category>
		<category><![CDATA[Starfall]]></category>
		<category><![CDATA[opengl]]></category>
		<category><![CDATA[planets]]></category>
		<category><![CDATA[procedural generation]]></category>
		<category><![CDATA[pyglet]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://swiftcoder.wordpress.com/?p=267</guid>
		<description><![CDATA[I just posted a quick youtube video to demonstrate the current state of the planet renderer. This is early development stuff, and the eye candy is minimal, but it should give you some idea of the scope. I will follow up with a more technical blog post in the next few days, explaining all that [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=swiftcoder.wordpress.com&amp;blog=3224297&amp;post=267&amp;subd=swiftcoder&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I just posted a quick youtube video to demonstrate the current state of the planet renderer. This is early development stuff, and the eye candy is minimal, but it should give you some idea of the scope.</p>
<span class='embed-youtube' style='text-align:center; display: block;'><iframe class='youtube-player' type='text/html' width='480' height='300' src='http://www.youtube.com/embed/8aQhCO6hpu4?version=3&amp;rel=0&amp;fs=1&amp;fmt=22&amp;showsearch=0&amp;showinfo=1&amp;iv_load_policy=1&amp;wmode=transparent' frameborder='0'></iframe></span>
<p>I will follow up with a more technical blog post in the next few days, explaining all that is going on behind the scenes, and can&#8217;t be seen in a video.</p>
<p>Part of the rationale behind this video is to stremline the whole video capture and posting process. Unfortunately, it hasn&#8217;t been entirely straightforward so far. I went through a number of video capture tools before settling on FRAPS, which works well enough (though I would have prefered a free tool).</p>
<p>I also have had a terrible time converting the video for youtube &#8211; ATI&#8217;s Avivo video converter is blazingly fast, but apparently produces an incompatibe audio codec in any of the high-quality settings. I was forced to fall back to the CPU-based Auto Gordian Knot, which both does a worse job, is very slow on my little Athalon 64 x2.</p>
<p>I am now experimenting with ffmpeg, but the command line options are confusing to say the least. If anyone has any clues/tips/tricks for getting FRAPS encoded video (and audio) into a suitable format for youtube HD, please let me know.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/swiftcoder.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/swiftcoder.wordpress.com/267/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/swiftcoder.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/swiftcoder.wordpress.com/267/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/swiftcoder.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/swiftcoder.wordpress.com/267/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/swiftcoder.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/swiftcoder.wordpress.com/267/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/swiftcoder.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/swiftcoder.wordpress.com/267/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/swiftcoder.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/swiftcoder.wordpress.com/267/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/swiftcoder.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/swiftcoder.wordpress.com/267/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=swiftcoder.wordpress.com&amp;blog=3224297&amp;post=267&amp;subd=swiftcoder&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://swiftcoder.wordpress.com/2009/05/28/starfall-planet-rendering/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0d34b1d6d4def4b515dec693de59f251?s=96&#38;d=identicon&#38;r=PG" medium="image">
			<media:title type="html">swiftcoder</media:title>
		</media:content>
	</item>
		<item>
		<title>simplui 1.0.1 released</title>
		<link>http://swiftcoder.wordpress.com/2009/05/23/simplui-1-0-1-released/</link>
		<comments>http://swiftcoder.wordpress.com/2009/05/23/simplui-1-0-1-released/#comments</comments>
		<pubDate>Sat, 23 May 2009 19:05:51 +0000</pubDate>
		<dc:creator>Tristam MacDonald</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[simplui]]></category>
		<category><![CDATA[pyglet]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://swiftcoder.wordpress.com/?p=262</guid>
		<description><![CDATA[I am going to be performing a number of small releases for simplui over the next few weeks, as features are added and bugs are patched. Today&#8217;s 1.0.1 release introduces a slider control, docstrings for all widget constructors detailing the keyword arguments, and a couple of bug fixes. You can grab the release tarball, or [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=swiftcoder.wordpress.com&amp;blog=3224297&amp;post=262&amp;subd=swiftcoder&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I am going to be performing a number of small releases for simplui over the next few weeks, as features are added and bugs are patched.</p>
<p>Today&#8217;s 1.0.1 release introduces a slider control, docstrings for all widget constructors detailing the keyword arguments, and a couple of bug fixes.</p>
<p>You can grab the <a href="http://darkcoda.googlecode.com/files/simplui-1.0.1.tgz">release tarball</a>, or check out the code directly from <a href="http://code.google.com/p/darkcoda/source/browse/simplui/tags/release-1.0.1/" target="_blank">SVN</a>.</p>
<p>If anyone feels like taking it for a spin, I could do with bug reports and feedback on the API.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/swiftcoder.wordpress.com/262/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/swiftcoder.wordpress.com/262/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/swiftcoder.wordpress.com/262/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/swiftcoder.wordpress.com/262/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/swiftcoder.wordpress.com/262/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/swiftcoder.wordpress.com/262/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/swiftcoder.wordpress.com/262/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/swiftcoder.wordpress.com/262/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/swiftcoder.wordpress.com/262/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/swiftcoder.wordpress.com/262/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/swiftcoder.wordpress.com/262/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/swiftcoder.wordpress.com/262/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/swiftcoder.wordpress.com/262/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/swiftcoder.wordpress.com/262/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=swiftcoder.wordpress.com&amp;blog=3224297&amp;post=262&amp;subd=swiftcoder&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://swiftcoder.wordpress.com/2009/05/23/simplui-1-0-1-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0d34b1d6d4def4b515dec693de59f251?s=96&#38;d=identicon&#38;r=PG" medium="image">
			<media:title type="html">swiftcoder</media:title>
		</media:content>
	</item>
	</channel>
</rss>
