<?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>The Bloj &#187; Programming</title>
	<atom:link href="http://blog.strafenet.com/category/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.strafenet.com</link>
	<description>is a GLOBAL mission focused, values based and demographics driven organization.</description>
	<lastBuildDate>Tue, 10 Aug 2010 04:27:45 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Travelling down a stack of dependency woes &#8211; How to parse HTML in Windows with Python</title>
		<link>http://blog.strafenet.com/2010/08/09/travelling-down-a-stack-of-dependency-woes-how-to-parse-html-in-windows-with-python/</link>
		<comments>http://blog.strafenet.com/2010/08/09/travelling-down-a-stack-of-dependency-woes-how-to-parse-html-in-windows-with-python/#comments</comments>
		<pubDate>Tue, 10 Aug 2010 02:40:32 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Chris]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.strafenet.com/?p=887</guid>
		<description><![CDATA[I was hoping I could parse HTML in Python in Windows. As it turned out, every step I tried ended up leading to another step.  In case you are about to lose an entire day dealing with all these steps, I wrote them here.

Problem 1: Beautiful Soup isn&#8217;t supported anymore
Beautiful Soup is the de [...]]]></description>
			<content:encoded><![CDATA[<p>I was hoping I could parse HTML in Python in Windows. As it turned out, every step I tried ended up leading to another step.  In case you are about to lose an entire day dealing with all these steps, I wrote them here.</p>
<ol>
<li><em>Problem 1: Beautiful Soup isn&#8217;t supported anymore</em><br />
Beautiful Soup is the de facto HTML parser. Beloved by Python programmers, it&#8217;s capable of dealing with broken and messy HTML. Sadly, the libraries that it used are being replaced, and the main developer <a href="http://www.crummy.com/software/BeautifulSoup/3.1-problems.html">doesn&#8217;t have time to work on it anymore</a>.<br />
Solution: This was the easiest problem to deal with. I asked the New York Python Meetup, and they all recommended lxml.</li>
<li><em>Problem 2: lxml doesn&#8217;t have a Python 2.7 build</em><br />
The easy solution &#8211; &#8220;easy_install lxml&#8221; &#8211; is supposed to get an egg file precompiled with lxml&#8217;s dependencies (at least, says the INSTALL file in the download).<br />
There were two problems:<br />
1. It doesn&#8217;t<br />
2. None of the .exes on the site are for Python 2.7.<br />
Solution: As it turns out, there&#8217;s a way around this dilemma; someone&#8217;s posted a <a href="http://codespeak.net/pipermail/lxml-dev/2010-July/005574.html">script</a> to build it online. It&#8217;s only for 32-bit though, it seems, but I gave it a short spin anyway.</li>
<li><em>Problem 3: Cython error</em><br />
Solution: <a href="http://www.lfd.uci.edu/~gohlke/pythonlibs/#cython">This fix was easy</a>.</li>
<li><em>Problem 4: &#8220;vcvarsall.bat&#8221; missing</em><br />
As it turns out, building many Python packages requires vcvarsall.bat, which is probably a compiling tool of some kind in Microsoft&#8217;s toolchain. The <a href="http://code.google.com/p/rdflib/issues/detail?id=104#c4">fix</a> that comes up in search engine results involve <a href="http://blog.eddsn.com/2010/05/unable-to-find-vcvarsall-bat/">hacking in a different compiler</a> (gcc from MinGW), which I suspected might cause other incompatibilities.<br />
Solution: After talking with a friend from Microsoft, I determined that downloading and installing the Windows SDK would be a good place to start. Though that didn&#8217;t work, I did end up installing Visual Studio C++ Express, which did include vcvarsall.bat.</li>
<li><em>Problem 5: &#8220;vcvarsall.bat&#8221; missing</em><br />
For some unknown reason, even after adding vcvarsall to the path,  the error still came up.<br />
Solution: It was at this point that I realized that the build script was for 32-bit. If I was going to go through the trouble of trying it, maybe it would be worth trying a 32-bit precompiled exe, which I ended up discovering on the <a href="http://www.lfd.uci.edu/~gohlke/pythonlibs/">same site</a> I visited earlier.</li>
<li><em>Problem 6: Installation didn&#8217;t work</em><br />
Even though the install went find and &#8220;import lxml&#8221; worked without a hitch, the lxml package was strangely empty &#8211; there was nothing in it!<br />
Solution: I went through site-packages and cleaned it out &#8211; there were two separate lxmls in there from my previous experiments. Removing one of them cleared it all up.</li>
</ol>
<p>(I recently had an experience where I couldn&#8217;t beta test some software because it was built for 32-bit, but my computer was 64-bit. As it turned out, that didn&#8217;t apply here.)</p>
<p>Possible lesson: If something is unlikely to work, but is easy and quick, try it anyway.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.strafenet.com/2010/08/09/travelling-down-a-stack-of-dependency-woes-how-to-parse-html-in-windows-with-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Which programming language and which framework should I use?</title>
		<link>http://blog.strafenet.com/2009/09/19/which-programming-language-should-i-use/</link>
		<comments>http://blog.strafenet.com/2009/09/19/which-programming-language-should-i-use/#comments</comments>
		<pubDate>Sat, 19 Sep 2009 17:31:07 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Chris]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.strafenet.com/?p=837</guid>
		<description><![CDATA[Frameworks like Ruby on Rails are great because they make it easy to write code &#8211; in a way that makes sense for the problem of websites.
Programming languages are great because they make it easy to write code &#8211; in a way that makes it easier for us to understand.
In the end though, all of [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;">Frameworks like Ruby on Rails are great because they make it easy to write code &#8211; in a way that makes sense for the problem of websites.</p>
<p style="text-align: center;">Programming languages are great because they make it easy to write code &#8211; in a way that makes it easier for us to understand.</p>
<p style="text-align: center;">In the end though, all of these abstractions were not written with <strong>your</strong> problem in mind, but a generic, off-the-shelf problem that you don&#8217;t actually have.</p>
<p style="text-align: center;">Thus, write with any language you want. But write in a way that&#8217;s appropriate to your problem, and write in a way that&#8217;s appropriate to you.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.strafenet.com/2009/09/19/which-programming-language-should-i-use/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pseudocode from a practical perspective</title>
		<link>http://blog.strafenet.com/2008/12/13/pseudocode-from-a-practical-perspective/</link>
		<comments>http://blog.strafenet.com/2008/12/13/pseudocode-from-a-practical-perspective/#comments</comments>
		<pubDate>Sun, 14 Dec 2008 00:09:31 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Chris]]></category>
		<category><![CDATA[General/Misc.]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.strafenet.com/?p=259</guid>
		<description><![CDATA[Designing programs before you write them
Preconditions:

Familiarity with writing and compiling a program in Java.
Not for people who have had a significant amount of experience in commercial programming.


So, you want to write a program in Java? Well that&#8217;s easy, I&#8217;ll write one right now:
public class MyProgram
{
public static void main(String args[])
{
System.out.println("Hello, world!");
}
}
file: MyProgram.java
That&#8217;s nice, you say, but [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Designing programs before you write them</strong></p>
<p><strong>Preconditions:</strong></p>
<ul>
<li>Familiarity with writing and compiling a program in Java.</li>
<li>Not for people who have had a significant amount of experience in commercial programming.</li>
</ul>
<p><span id="more-259"></span></p>
<p>So, you want to write a program in Java? Well that&#8217;s easy, I&#8217;ll write one right now:</p>
<pre>public class MyProgram
{
public static void main(String args[])
{
System.out.println("Hello, world!");
}
}</pre>
<p><cite>file: MyProgram.java</cite></p>
<p>That&#8217;s nice, you say, but I want my program to do more than that. I want it to be a calendar program. It&#8217;ll record appointments and let you keep track of them, as well as remind you which ones are coming up today. So how do we accomplish this?</p>
<p>Now, the easiest way to finish this job is to &#8220;just write the program.&#8221; The only problem is that we&#8217;re not doing it in English. It would, in fact, be nice if we could just write the program in English, and then have someone else translate it for us:</p>
<p>[Originally written on 10/22/2005 at 8:09 pm]</p>
<p>[12/7: I decided this isn't really worth writing yet. - C.L.]</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.strafenet.com/2008/12/13/pseudocode-from-a-practical-perspective/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Reversing bits</title>
		<link>http://blog.strafenet.com/2008/11/11/reversing-bits/</link>
		<comments>http://blog.strafenet.com/2008/11/11/reversing-bits/#comments</comments>
		<pubDate>Tue, 11 Nov 2008 23:44:38 +0000</pubDate>
		<dc:creator>Tim</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tim]]></category>

		<guid isPermaLink="false">http://blog.strafenet.com/?p=751</guid>
		<description><![CDATA[Reversing the bytes of an integer is a reasonably common operation when doing network programming, especially when dealing with possibly differing endianness. Reversing the endianness came up at work today, so I was thinking about a slightly different problem.
Given a 64-bit integer, what is the fastest way to reverse the ordering of the bits? The [...]]]></description>
			<content:encoded><![CDATA[<p>Reversing the bytes of an integer is a reasonably common operation when doing network programming, especially when dealing with possibly differing endianness. Reversing the endianness came up at work today, so I was thinking about a slightly different problem.</p>
<p>Given a 64-bit integer, what is the fastest way to reverse the ordering of the bits? The naive approach is to use a loop getting 1 bit into place each iteration. The result is something like this:</p>
<p><code>private static ulong RevBits1(ulong p)<br />
{<br />
    ulong r = 0;<br />
    for (int i = 0; i &lt; 64; i++)<br />
    {<br />
        r = r &gt;&gt; 1;<br />
        r = r | (p &#038; 0x8000000000000000);<br />
        p = p &lt;&lt; 1;<br />
    }<br />
    return r;<br />
}</code></p>
<p>If you don&#8217;t count the loop operations, this ends up with 256 operations, 4 per iteration. If you unroll this, you can make one of the terms a constant factor, bringing the operation count down to 192. We can improve on this with a divide and conquer approach:</p>
<p><code>private static ulong RevBits(ulong p)<br />
{<br />
    p = (p &lt;&lt; 32) | (p >> 32);<br />
    p = ((p &lt;&lt; 16) &#038; 0xFFFF0000FFFF0000) | ((p &gt;&gt; 16) &#038; 0x0000FFFF0000FFFF);<br />
    p = ((p &lt;&lt; 8 ) &#038; 0xFF00FF00FF00FF00) | ((p &gt;&gt; 8 ) &#038; 0x00FF00FF00FF00FF);<br />
    p = ((p &lt;&lt; 4) &#038; 0xF0F0F0F0F0F0F0F0) | ((p &gt;&gt; 4) &#038; 0x0F0F0F0F0F0F0F0F);<br />
    p = ((p &lt;&lt; 2) &#038; 0xCCCCCCCCCCCCCCCC) | ((p &gt;&gt; 2) &#038; 0x3333333333333333);<br />
    p = ((p &lt;&lt; 1) &#038; 0xAAAAAAAAAAAAAAAA) | ((p &gt;&gt; 1) &#038; 0x5555555555555555);<br />
    return p;<br />
}</code><br />
Harder to read, but this version is only 28 operations. In asm we could get this down even farther on 64 bit machines, since the first statement can be written as a 32 bit rotation, and the second statement can be written as two 16 bit rotations, bringing our operation count down to 24. Since each of our other operations is nearly equivalent to an opcode (on 64-bit processors at least) this is pretty close to the actual number of opcodes that could be generated by a good optimizing compiler.</p>
<p>It would be interesting to see if this could be optimized further <img src='http://blog.strafenet.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>-Tim</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.strafenet.com/2008/11/11/reversing-bits/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Don&#8217;t Work on the Wrong Machine</title>
		<link>http://blog.strafenet.com/2008/08/28/dont-work-on-the-wrong-machine/</link>
		<comments>http://blog.strafenet.com/2008/08/28/dont-work-on-the-wrong-machine/#comments</comments>
		<pubDate>Fri, 29 Aug 2008 03:35:27 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Business/The Software Industry]]></category>
		<category><![CDATA[Chris]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.strafenet.com/2008/08/28/dont-work-on-the-wrong-machine/</guid>
		<description><![CDATA[Fred Brooks: Build one to throw away
My version: Build every one to throw away.
Fred Brooks&#8217; classic The Mythical Man-Month made this observation developing a new piece of software &#8211; inevitably, many of the problems that will need to be solved won&#8217;t be known until you try to solve them. The first try will incorporate many [...]]]></description>
			<content:encoded><![CDATA[<p>Fred Brooks: <a href="http://en.wikipedia.org/wiki/The_Mythical_Man-Month#The_Pilot_System">Build one to throw away</a></p>
<p>My version: Build <strong>every </strong>one to throw away.</p>
<p>Fred Brooks&#8217; classic <em>The Mythical Man-Month</em> made this observation developing a new piece of software &#8211; inevitably, many of the problems that will need to be solved won&#8217;t be known until you try to solve them. The first try will incorporate many feelings of should-have and would-have that will be fixed on the second try.</p>
<p><img src="http://s.wsj.net/public/resources/images/P1-AK471A_CARTE_20080208185227.jpg" alt="Carter made a bench!" width="245" height="123" /></p>
<p>This is much like a journeyman craftsman building his or her first <a href="http://online.wsj.com/article/SB120252109283355793.html">bench</a>, or planting their first garden. The first try is a learning experience. There is no way around this, nor should there be &#8211; learning is often best by doing. <strong>The valuable asset is the experience of the builder</strong>, not the product.</p>
<p>But we don&#8217;t live in the Middle Ages, the age of guilds. We live in the post-Industrial Age. Factory owners don&#8217;t consider hoarding all the toys or cars or electronics they produce as an asset. Henry Ford&#8217;s genius was to redesign not just the golden eggs, but the machine that lays them.</p>
<p>As programmers, we are not working on a code base. <em>We are working on a machine that produces code</em>. The machine is made up of us, our experiences, the tools we build to make code (which can be made out of code themselves!). This is where results come from, and we should spend our time tuning this machine by <a href="http://www.codinghorror.com/blog/archives/001160.html">producing more</a>, not protecting what we have.</p>
<p><em>Does this mean that we should <a href="http://www.joelonsoftware.com/articles/fog0000000069.html">throw out old code</a>?</em> By no means! Old code is one of the most efficient resources we have for producing new code. But every process of manufacture in the past has been made into a more automatic and refined process. How could we consider ourselves any different?</p>
<p><em>Does this mean that we should code like crap?</em> By no means! As was once said, &#8220;If you write the first one to throw out, you will end up throwing out the second one as well.&#8221; The point is, write good code, but be willing to write new code &#8211; the point is to make not good code, but a good code factory.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.strafenet.com/2008/08/28/dont-work-on-the-wrong-machine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mulberry: Tribute to the Greatest E-mail Program of All Time</title>
		<link>http://blog.strafenet.com/2008/05/21/mulberry-tribute-to-the-greatest-e-mail-program-of-all-time/</link>
		<comments>http://blog.strafenet.com/2008/05/21/mulberry-tribute-to-the-greatest-e-mail-program-of-all-time/#comments</comments>
		<pubDate>Wed, 21 May 2008 05:19:26 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Chris]]></category>
		<category><![CDATA[General/Misc.]]></category>
		<category><![CDATA[Product Design]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[UI Design]]></category>

		<guid isPermaLink="false">http://blog.strafenet.com/2008/05/21/mulberry-tribute-to-the-greatest-e-mail-program-of-all-time/</guid>
		<description><![CDATA[For years I have used and loved Mulberry, perhaps the best e-mail client in existence. So I was greatly saddened to hear that Cyrusoft, the company behind Mulberry, declared bankruptcy a year ago.
[more (full article)]
I was just as much shocked as dismayed. Mulberry was hawked by so many colleges that I assumed its destiny was [...]]]></description>
			<content:encoded><![CDATA[<p>For years I have used and loved Mulberry, perhaps the best e-mail client in existence. So I was greatly saddened to hear that Cyrusoft, the company behind Mulberry, declared bankruptcy a year ago.</p>
<p><a href="http://www.christopherliu.net/mulberry_greatest/">[more (full article)]</a></p>
<p>I was just as much shocked as dismayed. Mulberry was hawked by <a href="http://www.cmu.edu/computing/mulberry/" title="CMU/Mulberry">s</a>o many colleges that I assumed its destiny was all but sealed. College students, as early adopters, would all be exposed to Mulberry and see how wonderful it was, and they&#8217;d take it to their jobs, promoting an almost viral spread.</p>
<p>I guess the Thunderbird/Outlook duopoly was just too strong for Cyrusoft to handle. However, all is not lost, as Mulberry is available for free now.</p>
<p><a href="http://www.christopherliu.net/mulberry_greatest/">Let&#8217;s take a look at all the wonderful features of this program! (full article)</a></p>
<p>[originally started a long time ago]</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.strafenet.com/2008/05/21/mulberry-tribute-to-the-greatest-e-mail-program-of-all-time/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Security in UI</title>
		<link>http://blog.strafenet.com/2008/03/15/security-in-ui/</link>
		<comments>http://blog.strafenet.com/2008/03/15/security-in-ui/#comments</comments>
		<pubDate>Sat, 15 Mar 2008 18:55:37 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Chris]]></category>
		<category><![CDATA[General/Misc.]]></category>
		<category><![CDATA[Product Design]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[UI Design]]></category>

		<guid isPermaLink="false">http://blog.strafenet.com/2008/03/15/security-in-ui/</guid>
		<description><![CDATA[One of the most common ways to secure a computer is by using a username/password combination. (In fact, we don&#8217;t have to look far to find an example). However, this system is clunky, primarily because it requires you to remember or write down the user name and password for every site (or alternatively use the [...]]]></description>
			<content:encoded><![CDATA[<p>One of the most common ways to secure a computer is by using a username/password combination. (In fact, we don&#8217;t have to look far to find <a href="http://blog.strafenet.com/wp-login.php" title="Example of login">an example</a>). However, this system is clunky, primarily because it requires you to remember or write down the user name and password for every site (or alternatively use the same password everywhere).</p>
<p>Security is not just about locking down a system from a list of attacks. The way you design a UI dictates how people behave, and people&#8217;s behavior is responsible for 90% of attacks. [citation needed] <em>Defaults matter</em>. No one forgets to lock an automatically locking door.</p>
<p>The fact is, while a security system must be set up to prevent hacking attacks, guesswork, and theft, it must also be designed in such a way that leads people to behave more securely. When you have a system where keys are hard to create but easy to copy, naturally, people will end up using the same keys at eBay that they do at Flickr.</p>
<p>The need to &#8220;educate users&#8221; is an indication of design failure.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.strafenet.com/2008/03/15/security-in-ui/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>~One Paragraph Blog: How scary is the rewrite?</title>
		<link>http://blog.strafenet.com/2008/02/18/one-paragraph-blog-how-scary-is-the-rewrite/</link>
		<comments>http://blog.strafenet.com/2008/02/18/one-paragraph-blog-how-scary-is-the-rewrite/#comments</comments>
		<pubDate>Mon, 18 Feb 2008 05:52:49 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Chris]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.strafenet.com/2008/02/18/one-paragraph-blog-how-scary-is-the-rewrite/</guid>
		<description><![CDATA[Do you work in software engineering? Have you ever heard a coworker say, &#8220;I&#8217;d do X, but then I&#8217;d have to rewrite everything?&#8221; Truth is, it&#8217;s easier to rewrite everything than make small changes sometimes.
How could I justify something so outlandish? Simple. The difficulty of a change (how many hiccups, how many bugs) depends not [...]]]></description>
			<content:encoded><![CDATA[<p>Do you work in software engineering? Have you ever heard a coworker say, &#8220;I&#8217;d do X, but then I&#8217;d have to rewrite everything?&#8221; Truth is, it&#8217;s <em>easier to rewrite everything than make small changes</em> sometimes.</p>
<p>How could I justify something so outlandish? Simple. The difficulty of a change (how many hiccups, how many bugs) depends not so much on its scope as it does on how well planned it is. Inevitably, we <strong>underestimate</strong> how much planning <strong>small changes</strong> take, and <strong>overestimate </strong>when we see <strong>big, scary changes</strong>. Does this mean rewrite is easy? Of course not. But it&#8217;s not impossible, or as costly as we think, and just the opposite is true for minor changes.</p>
<p>*The usual caveats: If you have a problem that can be solved with a small change, I recommend sticking to that before resorting to bigger changes. But once you start seeing so-called small changes multiply, you may have hit the <a href="http://blog.strafenet.com/2008/01/23/todays-one-paragraph-blog-the-stall-point/"><em>stall point</em></a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.strafenet.com/2008/02/18/one-paragraph-blog-how-scary-is-the-rewrite/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Today&#8217;s Almost One Paragraph Blog: The Stall Point</title>
		<link>http://blog.strafenet.com/2008/01/23/todays-one-paragraph-blog-the-stall-point/</link>
		<comments>http://blog.strafenet.com/2008/01/23/todays-one-paragraph-blog-the-stall-point/#comments</comments>
		<pubDate>Wed, 23 Jan 2008 06:34:19 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Chris]]></category>
		<category><![CDATA[Product Design]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.strafenet.com/2008/01/23/todays-one-paragraph-blog-the-stall-point/</guid>
		<description><![CDATA[How do you decide when to throw out your code/idea and sleep on it/do a rewrite?
Most people intuitively know when they&#8217;ve gotten stuck. Suddenly, after plowing through mountains of work, returns suddenly diminish dramatically. People who program late at night will recognize this phenomena; coding turns from an art to a masturbatory exercise in frustration. [...]]]></description>
			<content:encoded><![CDATA[<p>How do you decide when to throw out your code/idea and sleep on it/do a rewrite?</p>
<p>Most people <em>intuitively know</em> when they&#8217;ve gotten stuck. Suddenly, after plowing through mountains of work, returns suddenly diminish dramatically. People who program late at night will recognize this phenomena; coding turns from an art to a masturbatory exercise in frustration. (This also comes up when doing late night work as a student, interestingly.)</p>
<p>The reason people can overlook the <strong>stall point</strong> is that <em>it&#8217;s not one point</em>. If we got pitched headlong into a freezing room, we&#8217;d be far less likely to leave the thermostat alone.</p>
<p><em>Being acutely sensitive to even the smallest amounts of frustration</em> <em>is a good way to pick up on incoming stall points.</em></p>
<p><strong>Be intolerant of annoyances.</strong><em><br />
</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.strafenet.com/2008/01/23/todays-one-paragraph-blog-the-stall-point/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Evan and the case of the unexpanded variables</title>
		<link>http://blog.strafenet.com/2008/01/08/evan-and-the-case-of-the-unexpanded-variables/</link>
		<comments>http://blog.strafenet.com/2008/01/08/evan-and-the-case-of-the-unexpanded-variables/#comments</comments>
		<pubDate>Wed, 09 Jan 2008 00:58:41 +0000</pubDate>
		<dc:creator>Tim</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tim]]></category>

		<guid isPermaLink="false">http://blog.strafenet.com/2008/01/08/evan-and-the-case-of-the-unexpanded-variables/</guid>
		<description><![CDATA[I don&#8217;t think the Hardy Boys ever had to deal with a command prompt. Evan ran into some strange problems with his environment variables, and has posted an interesting write up, markruss style.
http://pages.cs.wisc.edu/~driscoll/misc/aqsis_mystery/
]]></description>
			<content:encoded><![CDATA[<p>I don&#8217;t think the Hardy Boys ever had to deal with a command prompt. Evan ran into some strange problems with his environment variables, and has posted an interesting write up, <a href="http://blogs.technet.com/markrussinovich/">markruss</a> style.</p>
<p><a href="http://pages.cs.wisc.edu/~driscoll/misc/aqsis_mystery/">http://pages.cs.wisc.edu/~driscoll/misc/aqsis_mystery/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.strafenet.com/2008/01/08/evan-and-the-case-of-the-unexpanded-variables/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.361 seconds -->
