<?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>Software, Technology, Business &#38; Life &#187; Software</title>
	<atom:link href="http://jc-bell.com/blog/category/software/feed/" rel="self" type="application/rss+xml" />
	<link>http://jc-bell.com/blog</link>
	<description></description>
	<lastBuildDate>Tue, 25 May 2010 22:50:57 +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>Too Simple to Fail?</title>
		<link>http://jc-bell.com/blog/2010/03/30/too-simple-to-fail/</link>
		<comments>http://jc-bell.com/blog/2010/03/30/too-simple-to-fail/#comments</comments>
		<pubDate>Tue, 30 Mar 2010 15:38:38 +0000</pubDate>
		<dc:creator>Jim Bell</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Technical]]></category>

		<guid isPermaLink="false">http://jc-bell.com/blog/?p=123</guid>
		<description><![CDATA[Ethernet's dead. The last thing I'd suspect is my simple route getting confused.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m doing some low-level Ethernet work (TCP/IP), with a device connected through two plain vanilla network switches. (I&#8217;m testing breaking the connection with neither side detecting the link-lost condition.)</p>
<p>I made a change to my software, and suddenly the Ethernet is dead. It seems to send and receive nothing.</p>
<p>I back out my change, and it still doesn&#8217;t work.</p>
<p>I back out a few more: no effect.</p>
<p>As it turns out, one of the Ethernet switches got confused and quit routing correctly (even through this simple configuration).</p>
<p>You can tell that the switch has some smarts:</p>
<ul>
<li>When you look at the traffic with WireShark, you don&#8217;t see what&#8217;s exchanged between the switch&#8217;s other nodes.</li>
<li>When you have a mix of GB devices and 10MB devices on the same switch, the gigabit devices transfer data at full speed, so you know the switch isn&#8217;t exposing every packet to every (10MB) connection.</li>
</ul>
<p>Still, I was astonished that this could happen.</p>
<p>For the record, the switches were:</p>
<ul>
<li>Netgear ProSafe 5 Port Gigabit Switch (Model GS105)</li>
<li>Netgear 4-Port 10/100 Dual Speed Hub (Model DS104)</li>
</ul>
<p>The older DS104 was the prime suspect. I simplified the route to just one switch (the GS105), which got it working. So I cycled power on the DS104, reconnected the original configuration, and everything worked again.</p>
<p><strong>Update 4/8:</strong>  They say you never learn anything from a mule&#8217;s <em>second</em> kick. I unceremoniously decommissioned the DS104 after it did the same thing again, this time with no provocation.</p>
]]></content:encoded>
			<wfw:commentRss>http://jc-bell.com/blog/2010/03/30/too-simple-to-fail/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>UDP Broadcasts Wrong Source Address</title>
		<link>http://jc-bell.com/blog/2010/02/05/udp-broadcasts-wrong-source-address/</link>
		<comments>http://jc-bell.com/blog/2010/02/05/udp-broadcasts-wrong-source-address/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 19:24:43 +0000</pubDate>
		<dc:creator>Jim Bell</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Technical]]></category>

		<guid isPermaLink="false">http://jc-bell.com/blog/?p=111</guid>
		<description><![CDATA[Symptoms: Windows machine with two network interfaces (NIC), 10.x.x.x and 192.168.x.x. I send a UDP broadcast message (to destination address 255.255.255.255), and see the same message go out on both networks. The problem is, the source address that goes out with each packet is the IP address for my first network interface, so it&#8217;s sending [...]]]></description>
			<content:encoded><![CDATA[<p><b>Symptoms:</b> Windows machine with two network interfaces (NIC), 10.x.x.x and 192.168.x.x. I send a UDP broadcast message (to destination address 255.255.255.255), and see the same message go out on both networks. The problem is, the source address that goes out with each packet is the IP address <b>for my first network interface, so it&#8217;s sending an unreachable address out my second network.</b> Responding devices start doing ARP requests to try (in vain) to find that unreachable address instead of responding. (Watch it with WireShark.)</p>
<p><b>Cause:</b> 255.255.255.255 is too general. <a href='http://tangentsoft.net/wskfaq/intermediate.html#broadcast'>TangentSoft</a> has the general solution (implemented in <a href='http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio/reference/ip__address_v4/broadcast/overload2.html'>boost</a>). I craft the broadcast address more carefully, and it works.</p>
<pre>
	10.x.x.x (subnet 255.0.0.0) => 10.255.255.255
	192.168.1.x (subnet 255.255.255.0) => 192.168.1.255
</pre>
<p>It&#8217;s not the language or library. It&#8217;s seen for <a href='http://bytes.com/topic/c-sharp/answers/736962-broadcast-udp-paket-wrong-source-ip-address'>C#</a>, <a href='http://social.msdn.microsoft.com/Forums/en-US/windowsgeneraldevelopmentissues/thread/6099ec30-bd94-4e1d-a3ed-9a7b92d1bb86/'>C</a>, and <a href='http://stackoverflow.com/questions/807651/send-udp-broadcast-255-255-255-255-from-specific-adapter-e-g-192-168-101-1-o'>C++</a>, <a href='http://social.msdn.microsoft.com/Forums/en/peertopeer/thread/f27f84a2-31dc-4532-9fc8-23d2dc9b4cdb'>etc</a>, on <a href='http://stackoverflow.com/questions/666405/udp-broadcast-on-multihomed-systems'>Windows Vista</a>, and <a href='http://www.devnewsgroups.net/dotnetframework/t16861-socket-broadcasting-with-multiple-adapters.aspx'>here</a>.</p>
<p>The broadcast address 255.255.255.255 is also known as INADDR_BROADCAST or &#8216;<broadcast>&#8216; in Python.</p>
<p>You only need one socket, which you can bind to all interfaces.</p>
<p>Enumerating your network interfaces requires some work: find it under <a href='http://msdn.microsoft.com/en-us/library/aa394217%28VS.85%29.aspx'>Win32_NetworkAdapterConfiguration</a>, fields IPAddress and IPSubnet. Those fields are arrays: you want element zero.</p>
<p>If you&#8217;re using python, you need the <a href='http://pypi.python.org/pypi/WMI/'>WMI</a> package, which is built on the <a href='http://sourceforge.net/projects/pywin32/'>PyWin32</a> package.</p>
<blockquote>
<pre>
import wmi
nicsList = wmi.WMI().Win32_NetworkAdapterConfiguration() # your network adapters
</pre>
</blockquote>
<p>If you&#8217;re getting WinSock error 10013, you need to set SO_BROADCAST.</p>
<p>Hope that starts you down the right path.</p>
<p>Also, if your devices aren&#8217;t configured for the same subnet, crafting a sub-net-specific broadcast message means you&#8217;re not going to find them. For example, if you have a 10.x.x.x device off your 192.168.x.x interface, it&#8217;s going to ignore your 192.168.255.255 broadcast. You&#8217;ll have to fall back to disabling a network interface and using 255.255.255.255 to get to it.<br />
</broadcast></p>
]]></content:encoded>
			<wfw:commentRss>http://jc-bell.com/blog/2010/02/05/udp-broadcasts-wrong-source-address/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TIOBE Index: The 2009 Programming Language Survey</title>
		<link>http://jc-bell.com/blog/2010/01/07/tiobes-programming-language-survey/</link>
		<comments>http://jc-bell.com/blog/2010/01/07/tiobes-programming-language-survey/#comments</comments>
		<pubDate>Thu, 07 Jan 2010 23:51:14 +0000</pubDate>
		<dc:creator>Jim Bell</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://jc-bell.com/blog/?p=104</guid>
		<description><![CDATA[Tiobe&#8217;s 2009 Programming Language Survey is an interesting read. I write in a variety of languages: as it turns out, seven of the top eight.
Very interesting that C seems to be such a constant. And far more constant even than its second place suggests, since six of the top eight languages use a syntax based [...]]]></description>
			<content:encoded><![CDATA[<p>Tiobe&#8217;s <a href='http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html'>2009 Programming Language Survey</a> is an interesting read. I write in a variety of languages: as it turns out, seven of the top eight.</p>
<p>Very interesting that C seems to be such a constant. And far more constant even than its second place suggests, since six of the top eight languages use a syntax based on it (Java, PHP, C++, C#, and JavaScript), not to mention Objective-C. C is the bedrock.</p>
<p>Objective-C seems to be coming on crazy strong. It has been around forever, but Apple&#8217;s interest is giving it a boost. Apple&#8217;s interest alone, though, will only get it so far.</p>
<p>Java and C# are here to stay, and for good reason. They&#8217;re strongly typed, object oriented, have great libraries and manage some of the hard stuff for you.</p>
<p>C++, my language of choice, seems to be slipping. I&#8217;m not concerned. I&#8217;m convinced that the C++ compiler is the most powerful software development tool ever. When managing complexity and maximizing performance are crucial, C++ is it.</p>
<p>I&#8217;m glad Python is doing well. It&#8217;s a great scripting language with a great set of libraries. I think it&#8217;s overcoming Perl&#8217;s passionate and loyal following. (I admit: one of my career goals is avoiding learning Perl. And I think I just might make it.)</p>
<p>JavaScript is crucial to know, too: every browser runs it. It&#8217;s as ubiquitous as the web.</p>
<p>For the record, my proficiencies, in my best-guess order: C++, C, Java, C#, Python, JavaScript, Visual Basic.</p>
<p>PS: The TIOBE Index <a href='http://blog.timbunce.org/2009/05/17/tiobe-index-is-being-gamed/'>isn&#8217;t to be taken as gospel</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://jc-bell.com/blog/2010/01/07/tiobes-programming-language-survey/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scrum</title>
		<link>http://jc-bell.com/blog/2010/01/01/scrum/</link>
		<comments>http://jc-bell.com/blog/2010/01/01/scrum/#comments</comments>
		<pubDate>Fri, 01 Jan 2010 17:15:25 +0000</pubDate>
		<dc:creator>Jim Bell</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://jc-bell.com/blog/?p=102</guid>
		<description><![CDATA[Here&#8217;s an interesting read: the Scrum development framework.
Methodology, strategy and work-flow all rolled into one rather informal process. Not specifically for software projects, either.
]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s an interesting read: the <a href='http://en.wikipedia.org/wiki/Scrum_%28development%29'>Scrum development framework</a>.</p>
<p>Methodology, strategy and work-flow all rolled into one rather informal process. Not specifically for software projects, either.</p>
]]></content:encoded>
			<wfw:commentRss>http://jc-bell.com/blog/2010/01/01/scrum/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Data-Oriented Design</title>
		<link>http://jc-bell.com/blog/2009/12/18/data-oriented-design/</link>
		<comments>http://jc-bell.com/blog/2009/12/18/data-oriented-design/#comments</comments>
		<pubDate>Fri, 18 Dec 2009 21:47:55 +0000</pubDate>
		<dc:creator>Jim Bell</dc:creator>
				<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://jc-bell.com/blog/?p=90</guid>
		<description><![CDATA[Here&#8217;s a great discussion of data-oriented design from some gamer programmers: Data-Oriented Design (Or Why You Might Be Shooting Yourself in The Foot With OOP)
I believe OOP is the very best way to manage complexity, but isn&#8217;t the end-all be-all. It must build on structured programming techniques. That&#8217;s not a given.
Further, memory organization may make [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a great discussion of data-oriented design from some gamer programmers: <a href='http://gamesfromwithin.com/data-oriented-design'>Data-Oriented Design (Or Why You Might Be Shooting Yourself in The Foot With OOP)</a></p>
<p>I believe OOP is the very best way to manage complexity, but isn&#8217;t the end-all be-all. It must build on <a href='http://www.librarything.com/work/393452'><em>structured programming</em></a> techniques. That&#8217;s not a given.</p>
<p>Further, memory organization may make a big difference as well, depending on the application. Even with modern processors and gigabytes of RAM. I recently encountered an application that needed its memory footprint to be reworked. It brought the very-powerful machine on which it ran to its knees by using memory very inefficiently.</p>
<p>Though I don&#8217;t have much desire to build games, I appreciate the game-development community. They build incredibly ambitious pieces of software: ambitious in both complexity and performance. That causes them to encounter many issues one might not consider, and think hard about everything they do.</p>
<p><b>Update:</b> Here&#8217;s a very detailed article on memory usage from the bare metal up: <a href='http://people.redhat.com/drepper/cpumemory.pdf'>What Every Programmer Should Know About Memory</a>, by Ulrich Drepper. Hat-tip <a href='http://www.linkedin.com/in/dandemaggio'>Dan DeMaggio</a>. If your performance concerns reach all the way to RAM access and CPU caches, this is one to study. It&#8217;s a whole course, and not a light read. One take-away: memory usage patterns can have very non-linear effects on performance.</p>
]]></content:encoded>
			<wfw:commentRss>http://jc-bell.com/blog/2009/12/18/data-oriented-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Building OpenSSL via MinGW</title>
		<link>http://jc-bell.com/blog/2009/04/11/building-openssl-via-mingw/</link>
		<comments>http://jc-bell.com/blog/2009/04/11/building-openssl-via-mingw/#comments</comments>
		<pubDate>Sun, 12 Apr 2009 02:56:06 +0000</pubDate>
		<dc:creator>Jim Bell</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Technical]]></category>

		<guid isPermaLink="false">http://jc-bell.com/blog/?p=79</guid>
		<description><![CDATA[OpenSSL is a particularly difficult one to build on MinGW, and it&#8217;s not clear even what approach will work. But I got it to build.
My MinGW/MSYS configuration is with the full suite of tools, including bash. (Follow these FFmpeg build instructions for setup.)
As well, I&#8217;m using GCC 4.3.3, from the TDM recent builds (http://www.tdragon.net/recentgcc/) setup.
I&#8217;m [...]]]></description>
			<content:encoded><![CDATA[<p>OpenSSL is a particularly difficult one to build on MinGW, and it&#8217;s not clear even what approach will work. But I got it to build.</p>
<p>My MinGW/MSYS configuration is with the full suite of tools, including bash. (Follow these <a href="http://ffmpeg.arrozcru.org/wiki/index.php?title=MSys_MinGW">FFmpeg build instructions</a> for setup.)</p>
<p>As well, I&#8217;m using GCC 4.3.3, from the <a href="http://www.tdragon.net/recentgcc/">TDM recent builds (http://www.tdragon.net/recentgcc/)</a> setup.</p>
<p>I&#8217;m building OpenSSL 0.9.8k.</p>
<p><b>You need <a href="http://www.activestate.com/ActivePerl">ActivePerl</a></b>. MinGW has a /bin/perl, but it&#8217;s not up to the task. See OpenSSL&#8217;s INSTALL.WIN32 file for details.</p>
<p>From a Win32 command prompt (not bash), set up the your paths:</p>
<ul>
<li>First in the path: ActivePerl&#8217;s bin directory.</li>
<li>Then MinGW&#8217;s paths (before Win32 native).</li>
</ul>
<p>Fix the file e_os2.h, per <a href="http://rt.openssl.org/Ticket/Display.html?id=1685&#038;user=guest&#038;pass=guest">BUG 1685</a>. Remove the &#8220;static&#8221; modifier in the OPENSSL_IMPLEMENT_GLOBAL macro. (Note that it&#8217;s a 3-line macro.) This gets you by the &#8220;crypto/des/set_key.c line 72&#8243; compile error.</p>
<p>Run ms\mingw32.bat. It will fail with &#8220;/bin/sh: copy: command not found&#8221;.</p>
<p>Now, <b>edit the file ms\mingw32a.mak</b>. This gets generated by every run of the ms\mingw32.bat file. Search for &#8220;exist&#8221; and you&#8217;ll see two DOSish commands:</p>
<blockquote><p>if exist $(O_CRYPTO) ] $(RM) $(O_CRYPTO)</p></blockquote>
<p>Change each to its bash equivalent:</p>
<blockquote><p>if [ -e $(O_CRYPTO) ]; then $(RM) $(O_CRYPTO); fi
</p></blockquote>
<p>Finally, run the make, and specify the MinGW copy command:</p>
<blockquote><p>
make -f ms/mingw32a.mak &#8220;CP=cp&#8221;
</p></blockquote>
<p>The output files are in the &#8216;out&#8217; subdirectory. Intermediate files are in &#8216;tmp&#8217;.</p>
<p><b>Include files are in &#8216;outinc&#8217;: the include/openssl directory has zero-byte place-holders for each file.</b></p>
<p>Make&#8217;s &#8220;clean&#8221; and &#8220;test&#8221; targets are broken. To clean, remove tmp and out. To test, run the various test programs in the &#8216;out&#8217; directory.</p>
<p>All tests pass.</p>
<p>If you get missing symbols like DeleteDC and send when linking against libcrypto, you&#8217;ll need to include some win32 libraries. This typically does it:</p>
<blockquote><p>make LIBS=&#8221;-lgdi32 -lws2_32&#8243;</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://jc-bell.com/blog/2009/04/11/building-openssl-via-mingw/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Software Testing Yogi-ism</title>
		<link>http://jc-bell.com/blog/2009/04/02/a-software-testing-yogi-ism/</link>
		<comments>http://jc-bell.com/blog/2009/04/02/a-software-testing-yogi-ism/#comments</comments>
		<pubDate>Thu, 02 Apr 2009 18:38:32 +0000</pubDate>
		<dc:creator>Jim Bell</dc:creator>
				<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://jc-bell.com/blog/?p=75</guid>
		<description><![CDATA[If Yogi Berra thought about software and testing, maybe he&#8217;d say:
Unless you know it&#8217;s right, you don&#8217;t know it&#8217;s right.
To ponder&#8230;
]]></description>
			<content:encoded><![CDATA[<p>If <a href="http://www.yogiberra.com/yogi-isms.html">Yogi Berra</a> thought about software and testing, maybe he&#8217;d say:</p>
<blockquote style='font-size=130%;'><p>Unless you know it&#8217;s right, you don&#8217;t know it&#8217;s right.</p></blockquote>
<p>To ponder&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://jc-bell.com/blog/2009/04/02/a-software-testing-yogi-ism/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Your most controversial programming opinion?</title>
		<link>http://jc-bell.com/blog/2009/03/17/your-most-controversial-programming-opinion/</link>
		<comments>http://jc-bell.com/blog/2009/03/17/your-most-controversial-programming-opinion/#comments</comments>
		<pubDate>Wed, 18 Mar 2009 03:04:13 +0000</pubDate>
		<dc:creator>Jim Bell</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://jc-bell.com/blog/?p=70</guid>
		<description><![CDATA[A very interesting question&#8211;with very interesting answers&#8211;on StackOverflow.com:
What&#8217;s your most controversial programming opinion?
(Via ]]></description>
			<content:encoded><![CDATA[<p>A very interesting question&#8211;with very interesting answers&#8211;on StackOverflow.com:</p>
<p><b><a href="http://stackoverflow.com/questions/406760?sort=votes">What&#8217;s your most controversial programming opinion?</a></b></p>
<p>(Via <a href=http://www.gadgetopia.com/post/6753">Gadgetopia</a>.)</p>
]]></content:encoded>
			<wfw:commentRss>http://jc-bell.com/blog/2009/03/17/your-most-controversial-programming-opinion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Step Away</title>
		<link>http://jc-bell.com/blog/2009/03/15/step-away/</link>
		<comments>http://jc-bell.com/blog/2009/03/15/step-away/#comments</comments>
		<pubDate>Sun, 15 Mar 2009 17:59:33 +0000</pubDate>
		<dc:creator>Jim Bell</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://jc-bell.com/blog/?p=68</guid>
		<description><![CDATA[Step away from the computer.
I get some of my best ideas when I step away from the computer for a few hours and carry on with life (letting the problem mull over in the back of my mind). Maybe you&#8217;ve experienced this, too.
If software is much more about good ideas than BFI (and I&#8217;m convinced [...]]]></description>
			<content:encoded><![CDATA[<p>Step away from the computer.</p>
<p>I get some of my best ideas when I step away from the computer for a few hours and carry on with life (letting the problem mull over in the back of my mind). Maybe you&#8217;ve experienced this, too.</p>
<p>If software is much more about good ideas than <acronym title="Brute Force and Ignorance">BFI</acronym> (and I&#8217;m convinced that it is), then stepping away from the computer is a wonderful thing all around.</p>
]]></content:encoded>
			<wfw:commentRss>http://jc-bell.com/blog/2009/03/15/step-away/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Changing the Unchangeable</title>
		<link>http://jc-bell.com/blog/2009/02/23/changing-the-unchangeable/</link>
		<comments>http://jc-bell.com/blog/2009/02/23/changing-the-unchangeable/#comments</comments>
		<pubDate>Mon, 23 Feb 2009 19:07:30 +0000</pubDate>
		<dc:creator>Jim Bell</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://jc-bell.com/blog/?p=56</guid>
		<description><![CDATA[Now that screens are wide, I find vertical space more precious. So I put my XP task bar on the left side of the screen.

It&#8217;s interesting how many programs now come up underneath it. Commercial packages with large user bases. I&#8217;m sure they mind the task bar when it&#8217;s at the bottom of the screen, [...]]]></description>
			<content:encoded><![CDATA[<p>Now that screens are wide, I find vertical space more precious. So I put my XP task bar on the left side of the screen.<br />
<img style="float:right;" src="/images/blog/TaskBarOnLeft.jpg" alt="Task Bar on the left" /></p>
<p>It&#8217;s interesting how many programs now come up underneath it. Commercial packages with large user bases. I&#8217;m sure they mind the task bar when it&#8217;s at the bottom of the screen, but not here.</p>
<p>While it&#8217;s not a big deal (to me at least&#8211;just a tiny annoyance), it shows how we make implicit assumptions about our world. Sometimes those assumptions are fine. Sometimes not.</p>
<p>I&#8217;ve made plenty myself.</p>
<p>Also, I&#8217;ve not encountered a program that refuses to run or throws itself off the top or bottom of the screen because of this. That&#8217;s a possibility. (I need to keep this in mind if I find a program behaving badly with its screen position.)</p>
]]></content:encoded>
			<wfw:commentRss>http://jc-bell.com/blog/2009/02/23/changing-the-unchangeable/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
