<?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>MaisonBisson.com &#187; programming</title>
	<atom:link href="http://maisonbisson.com/blog/post/tag/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://maisonbisson.com</link>
	<description>A bunch of stuff I would have emailed you about.</description>
	<lastBuildDate>Sat, 14 Nov 2009 20:14:03 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>The Bugs That Haunt Me</title>
		<link>http://maisonbisson.com/blog/post/11313/bugs-and-hacks/</link>
		<comments>http://maisonbisson.com/blog/post/11313/bugs-and-hacks/#comments</comments>
		<pubDate>Fri, 16 Oct 2009 16:17:56 +0000</pubDate>
		<dc:creator>Casey Bisson</dc:creator>
				<category><![CDATA[Politics & Controversy]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[bad]]></category>
		<category><![CDATA[buggy]]></category>
		<category><![CDATA[bugs]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[software development]]></category>

		<guid isPermaLink="false">http://maisonbisson.com/blog/post/11313/</guid>
		<description><![CDATA[
A few years ago I found an article pointing out how spammers had figured out how to abuse some code I wrote back in 2001 or so. I&#8217;d put it on the list to fix and even started a blog post so that I could take my lumps publicly.
Now I&#8217;ve rediscovered that draft post&#8230;and that [...]]]></description>
			<content:encoded><![CDATA[<abbr class="unapi-id" title="maisonbisson-11313"><!-- &nbsp; --></abbr>
<p>A few years ago I found an article pointing out how <a href="http://www.codeka.com/blogs/index.php/dean/2006/03/28/clever_spammers">spammers had figured out how to abuse some code</a> I wrote back in 2001 or so. I&#8217;d put it on the list to fix and even started a blog post so that I could take my lumps publicly.</p>
<p>Now I&#8217;ve rediscovered that draft post&#8230;and that I never fixed the bad code it had fingered. Worse, I&#8217;m no longer in a position to change the code. </p>
<p>Along similar lines, I&#8217;ve been told that a database driven DHCP config file generator that I wrote back in the late 1990s is still in use, and still suffers bugs due to my failure to sanitize MAC addresses that, being entered by humans, sometimes have errors.</p>
<p>I&#8217;ve written bad code since then and will write more bad code still, but as my participation in open source projects has increased, I&#8217;ve enjoyed the benefit of community examples and criticism. My work now is better for it.</p>
]]></content:encoded>
			<wfw:commentRss>http://maisonbisson.com/blog/post/11313/bugs-and-hacks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lessons Learned: Why It&#8217;s Better Not To Use Parentheses When They&#8217;re Optional</title>
		<link>http://maisonbisson.com/blog/post/13877/lessons-learned-why-its-better-not-to-use-parentheses-when-theyre-optional/</link>
		<comments>http://maisonbisson.com/blog/post/13877/lessons-learned-why-its-better-not-to-use-parentheses-when-theyre-optional/#comments</comments>
		<pubDate>Tue, 05 May 2009 17:07:53 +0000</pubDate>
		<dc:creator>Casey Bisson</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[parentheses]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[return()]]></category>

		<guid isPermaLink="false">http://maisonbisson.com/?p=13877</guid>
		<description><![CDATA[
There it is in the PHP manual for return():
Note: since return() is a language construct and not a function, the parentheses surrounding its arguments are not required. It is common to leave them out, and you actually should do so as PHP has less work to do in this case.
I knew the parentheses were optional, but I&#8217;ve [...]]]></description>
			<content:encoded><![CDATA[<abbr class="unapi-id" title="maisonbisson-13877"><!-- &nbsp; --></abbr>
<p>There it is in the <a href="http://php.net/return">PHP manual for <code>return()</code></a>:</p>
<blockquote><p>Note: since return() is a language construct and not a function, the parentheses surrounding its arguments are not required. It is common to leave them out, and you actually should do so as PHP has less work to do in this case.</p></blockquote>
<p>I knew the parentheses were optional, but I&#8217;ve been merrily using them all along. And I probably would have continued doing so until I saw the second note attached to the docs:</p>
<blockquote><p>Note: You should never use parentheses around your return variable when returning by reference, as this will not work. You can only return variables by reference, not the result of a statement. If you use return ($a); then you&#8217;re not returning a variable, but the result of the expression ($a) (which is, of course, the value of $a).</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://maisonbisson.com/blog/post/13877/lessons-learned-why-its-better-not-to-use-parentheses-when-theyre-optional/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Is My PHP Script Running Out Of Memory?</title>
		<link>http://maisonbisson.com/blog/post/12190/is-my-php-script-running-out-of-memory/</link>
		<comments>http://maisonbisson.com/blog/post/12190/is-my-php-script-running-out-of-memory/#comments</comments>
		<pubDate>Thu, 07 Aug 2008 19:12:15 +0000</pubDate>
		<dc:creator>Casey Bisson</dc:creator>
				<category><![CDATA[Dispatches]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[memory]]></category>
		<category><![CDATA[memory_get_peak_usage]]></category>
		<category><![CDATA[memory_get_usage]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://maisonbisson.com/blog/?p=12190</guid>
		<description><![CDATA[
I&#8217;ve got a PHP script that sometimes just dies with no errors to the browser and no messages in the error log. I&#8217;ve seen this in the past with scripts that consumed too much memory (yeah, it should have issued an error, but it didn&#8217;t, and increasing the memory limit fixed it), but now the [...]]]></description>
			<content:encoded><![CDATA[<abbr class="unapi-id" title="maisonbisson-12190"><!-- &nbsp; --></abbr>
<p>I&#8217;ve got a PHP script that sometimes just dies with no errors to the browser and no messages in the error log. I&#8217;ve seen this in the past with scripts that consumed too much memory (yeah, it <em>should</em> have issued an error, but it didn&#8217;t, and increasing the memory limit fixed it), but now the memory limit is set pretty high and I&#8217;m not sure I want to increase it further. I certainly don&#8217;t want to increase it without seeing where it&#8217;s going wrong, anyway.</p>
<p>To do that, <a href="http://www.ibm.com/developerworks/opensource/library/os-php-v521/" title="What's new in PHP V5.2, Part 1: Using the new memory manager">IBM developerWorks says</a> the <a href="http://php.net/memory_get_usage" title="PHP: memory_get_usage - Manual"><code>memory_get_usage()</code></a> and <a href="http://php.net/manual/en/function.memory-get-peak-usage.php"><code>memory_get_peak_usage()</code></a> functions are for me. And they offer some other interesting tips as well.</p>
]]></content:encoded>
			<wfw:commentRss>http://maisonbisson.com/blog/post/12190/is-my-php-script-running-out-of-memory/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Web Development Languages</title>
		<link>http://maisonbisson.com/blog/post/12173/web-development-languages/</link>
		<comments>http://maisonbisson.com/blog/post/12173/web-development-languages/#comments</comments>
		<pubDate>Tue, 15 Jul 2008 13:44:04 +0000</pubDate>
		<dc:creator>Casey Bisson</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[languages]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[popularity]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://maisonbisson.com/blog/?p=12173</guid>
		<description><![CDATA[
David Cloutman pointed to Craiglist&#8217;s job ads as an indicator of programming language popularity. Here&#8217;s the hit counts for “web design jobs” and “internet engineering jobs” in the Bay Area:


&#160;
PHP
Java
Ruby
Python
PERL


internet engineering jobs
167
246
85
98
109


web design jobs
110
71
22
19
31



Cloutman has a few ideas for what the numbers mean, but I&#8217;m just entertained by the data. (Note: he corrected his original [...]]]></description>
			<content:encoded><![CDATA[<abbr class="unapi-id" title="maisonbisson-12173"><!-- &nbsp; --></abbr>
<p><a href="http://lists.webjunction.org/wjlists/web4lib/2008-July/047913.html" title="[Web4lib] Web Languages">David Cloutman pointed to</a> Craiglist&#8217;s job ads as an indicator of programming language popularity. Here&#8217;s the hit counts for “web design jobs” and “internet engineering jobs” in the Bay Area:</p>
<table>
<tr>
<td>&nbsp;</td>
<td>PHP</td>
<td>Java</td>
<td>Ruby</td>
<td>Python</td>
<td>PERL</td>
</tr>
<tr>
<td>internet engineering jobs</td>
<td>167</td>
<td>246</td>
<td>85</td>
<td>98</td>
<td>109</td>
</tr>
<tr>
<td>web design jobs</td>
<td>110</td>
<td>71</td>
<td>22</td>
<td>19</td>
<td>31</td>
<td></td>
</tr>
</table>
<p>Cloutman has a few ideas for <a href="http://lists.webjunction.org/wjlists/web4lib/2008-July/047913.html">what the numbers mean</a>, but I&#8217;m just entertained by the data. (Note: he <a href="http://lists.webjunction.org/wjlists/web4lib/2008-July/047916.html">corrected his original numbers</a>.)</p>
]]></content:encoded>
			<wfw:commentRss>http://maisonbisson.com/blog/post/12173/web-development-languages/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>1975 Programming vs. Today&#8217;s Computer Architecture</title>
		<link>http://maisonbisson.com/blog/post/12124/1975-programming-vs-todays-computer-architecture/</link>
		<comments>http://maisonbisson.com/blog/post/12124/1975-programming-vs-todays-computer-architecture/#comments</comments>
		<pubDate>Thu, 26 Jun 2008 17:18:20 +0000</pubDate>
		<dc:creator>Casey Bisson</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[memory management]]></category>
		<category><![CDATA[Poul-Henning Kamp]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[thrashing]]></category>
		<category><![CDATA[virtual memory]]></category>

		<guid isPermaLink="false">http://maisonbisson.com/blog/?p=12124</guid>
		<description><![CDATA[
Poul-Henning Kamp, the guy behind the Varnish reverse proxy, talks about 1975 programming:
It used to be that you had the primary store, and it was anything from acoustic delaylines filled with mercury via small magnetic dougnuts via transistor flip-flops to dynamic RAM.
And then there were the secondary store, paper tape, magnetic tape, disk drives the [...]]]></description>
			<content:encoded><![CDATA[<abbr class="unapi-id" title="maisonbisson-12124"><!-- &nbsp; --></abbr>
<p><a href="http://people.freebsd.org/~phk/">Poul-Henning Kamp</a>, the guy behind the <a href="http://varnish.projects.linpro.no">Varnish reverse proxy</a>, <a href="http://varnish.projects.linpro.no/wiki/ArchitectNotes" title="ArchitectNotes - Varnish - Trac">talks about 1975 programming</a>:</p>
<blockquote><p>It used to be that you had the primary store, and it was anything from acoustic delaylines filled with mercury via small magnetic dougnuts via transistor flip-flops to dynamic RAM.</p>
<p>And then there were the secondary store, paper tape, magnetic tape, disk drives the size of houses, then the size of washing machines and these days so small that girls get disappointed if think they got hold of something else than the MP3 player you had in your pocket.</p>
<p>And people program this way.</p>
<p>They have variables in “memory” and move data to and from “disk”. [...]</p>
<p>Well, today computers really only have one kind of storage, and it is usually some sort of disk, the operating system and the virtual memory management hardware has converted the RAM to a cache for the disk storage.[...]</p>
<p>Virtual memory was meant to make it easier to program when data was larger than the physical memory, but people have still not caught on.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://maisonbisson.com/blog/post/12124/1975-programming-vs-todays-computer-architecture/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sweet Cheat Sheets</title>
		<link>http://maisonbisson.com/blog/post/10715/sweet-cheat-sheets/</link>
		<comments>http://maisonbisson.com/blog/post/10715/sweet-cheat-sheets/#comments</comments>
		<pubDate>Tue, 02 Aug 2005 16:25:24 +0000</pubDate>
		<dc:creator>Casey Bisson</dc:creator>
				<category><![CDATA[Blink]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[cheat sheet]]></category>
		<category><![CDATA[cheat sheets]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://www.maisonbisson.com/blog/?p=10715</guid>
		<description><![CDATA[
Colin over at Command-Tab alerted me to some great cheat sheets, including this one for JavaScript at ILoveJackDaniels.com.

tags: cheat sheet, cheat sheets, javascript, programming, web, web development

&#160;
&#160;
&#160;
]]></description>
			<content:encoded><![CDATA[<abbr class="unapi-id" title="maisonbisson-10715"><!-- &nbsp; --></abbr>
<p><a href="http://www.ilovejackdaniels.com/cheat-sheets/"><img src="http://www.ilovejackdaniels.com/images/javascript_cheat_sheet_thmb_2.png" width="147" height="199" style="float: right; border: solid 2px #000000; margin: 0px 0px 8px 8px; padding: 4px 4px 4px 4px;" /></a><a href="http://www.command-tab.com/">Colin</a> over at <a href="http://www.command-tab.com/index.php/javascript-cheat-sheet/" title="Command-Tab » JavaScript Cheat Sheet">Command-Tab</a> alerted me to some great <a href="http://www.ilovejackdaniels.com/cheat-sheets/" title="Cheat Sheets - ILoveJackDaniels.com">cheat sheets</a>, including this one for <a href="http://www.ilovejackdaniels.com/javascript/javascript-cheat-sheet/" title="JavaScript Cheat Sheet - JavaScript - ILoveJackDaniels.com">JavaScript</a> at <a href="http://www.ilovejackdaniels.com/">ILoveJackDaniels.com</a>.</p>
<p><!-- technorati tags start -->
<p style="text-align:right;font-size:10px;">tags: <a href="http://technorati.com/tag/cheat sheet" rel="tag">cheat sheet</a>, <a href="http://technorati.com/tag/cheat sheets" rel="tag">cheat sheets</a>, <a href="http://technorati.com/tag/javascript" rel="tag">javascript</a>, <a href="http://technorati.com/tag/programming" rel="tag">programming</a>, <a href="http://technorati.com/tag/web" rel="tag">web</a>, <a href="http://technorati.com/tag/web development" rel="tag">web development</a></p>
<p><!-- technorati tags end --></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://maisonbisson.com/blog/post/10715/sweet-cheat-sheets/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>