<?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>Sat, 31 Dec 2011 16:03:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Fantasecond response time</title>
		<link>http://jc-bell.com/blog/2011/09/21/fantasecond-response-time/</link>
		<comments>http://jc-bell.com/blog/2011/09/21/fantasecond-response-time/#comments</comments>
		<pubDate>Thu, 22 Sep 2011 03:52:39 +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=240</guid>
		<description><![CDATA[Here&#8217;s a fascinating in-depth study of one second of market data for a single stock: HFT [High Frequency Trading] Breaks Speed-of-Light Barrier, Sets Trading Speed World Record. Adds a new unit of time measurement to the lexicon: fantasecond. On September 15, 2011, beginning at 12:48:54.600, there was a time warp in the trading of Yahoo! [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a fascinating in-depth study of one second of market data for a single stock:</p>
<blockquote><p>
<b><a href='http://www.nanex.net/Research/fantaseconds/fantaseconds.html'>HFT [High Frequency Trading] Breaks Speed-of-Light Barrier, Sets Trading Speed World Record.</a></b><br />
Adds a new unit of time measurement to the lexicon: fantasecond.<br />
<br />
On September 15, 2011, beginning at 12:48:54.600, there was a time warp in the trading of Yahoo! (YHOO) stock. HFT has reached speeds faster than the speed-of-light, allowing time travel into the future. Up to 190 milliseconds into the future, or 0.19 fantaseconds is the record so far. It all happened in just over one second of trading, the evidence buried under an avalanche of about 19,000 quotes and 3,000 individual trade executions. The facts of the matter are indisputable. Based on official UQDF/UTDF exchange timestamps, there is unmistakable proof that YHOO trades were executed on quotes that didn&#8217;t exist until 190 milliseconds later!</p>
<p>Millions of traders depend on the accuracy of exchange timestamps &#8212; especially after bad timestamps were found to be a key factor in the disastrous market crash known as the flash crash of May 2010.  &#8230;
</p></blockquote>
<p>The lowly time-stamp. Not rocket science. Not crucial like price, right? What&#8217;s to get wrong? An exchange with unlimited resources couldn&#8217;t mess up like that, could it? (Assuming the analysis is correct.)</p>
<p>As a software builder, I wonder <em>how did it happen</em>?</p>
<p>It probably wasn&#8217;t buggy code: unit tests are good, but more of them probably won&#8217;t catch this one.</p>
<p>Was it sheer load? It wasn&#8217;t the highest overall traffic they experienced:</p>
<blockquote><p>
The chart below shows quote message rates for UQDF and multicast line #6 which is the line that carries YHOO quotes. &#8230; Although traffic from YHOO was a significant percentage of all traffic on UQDF, it was not high enough to indicate any problems. Note the much higher surge on the right side of the chart; there weren&#8217;t any known problems at that time in YHOO.
</p></blockquote>
<p>So the system would pass a generic stress test. Yet still allow this.</p>
<p>Maybe the system was stressed in some unexpected way. This stress&#8217; profile wasn&#8217;t predicted, characterized, mitigated.  The system design didn&#8217;t account for it.</p>
<p>A multi-tasking operating system is likely part of the picture. Maybe another task was started that tied up crucial resources, even just CPU. Maybe not even a lot of resources, or not for very long. A multi-tasking operating system is geared to never say &#8220;enough.&#8221; Another task in the CPU&#8217;s ready queue? No problem. Out of RAM? Swap some to disk: user programs can&#8217;t even tell!</p>
<p>Information hiding gets us off the &#8220;honors system&#8221; with memory usage. But in the time domain, you&#8217;re still very much on the honors system: no one can make you complete your task in a given time. In fact, any innocuous-looking call can have any amount of code hiding deep inside it.</p>
<p>You can make a user wait for a tenth of a second or more and still seem really responsive. (Think &#8220;garbage collection.&#8221;) But a real-time data feed won&#8217;t wait. It&#8217;s a different ball-game.</p>
<p>Maybe we&#8217;re just seeing a hardware limitation hit. Maybe the best machines money can buy just can&#8217;t keep up with certain kinds of volume. There&#8217;s no guarantee they can.</p>
<p>Interesting stuff.  Hat&#8217;s off to the author for such a detailed analysis.</p>
<p class=hattip>Via <a href='http://www.zerohedge.com/news/its-official-hft-breaks-speed-light-barrier-sets-trading-speed-world-record'>ZeroHedge</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://jc-bell.com/blog/2011/09/21/fantasecond-response-time/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Conserving Screen Height: Killing &#8220;Height Cruft&#8221;</title>
		<link>http://jc-bell.com/blog/2011/04/01/killing-height-cruft-conserving-screen-height/</link>
		<comments>http://jc-bell.com/blog/2011/04/01/killing-height-cruft-conserving-screen-height/#comments</comments>
		<pubDate>Fri, 01 Apr 2011 12:52:30 +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=211</guid>
		<description><![CDATA[Consider monitor "height cruft" as a developer and a user.]]></description>
			<content:encoded><![CDATA[<p>With the onset of HD, monitors are now <a href='http://en.wikipedia.org/wiki/Widescreen'>wider</a> <a href='http://reviews.cnet.com/16:9-widescreen-tv-aspect-ratio/'>than they are</a> <a href='http://en.wikipedia.org/wiki/Aspect_ratio_%28image%29'>tall</a>. Great for video, but not for computing.</p>
<p>If you&#8217;re a developer, consider screen height a limited, precious resource. Conserve it.  Trade width for height. Kill <strong><em>height cruft</em></strong>. (Can I coin that?)</p>
<p>Button bars: traditionally horizontal at the top of the app. Can you make it vertical, to the left or right?</p>
<p>Even the traditional menu bar (&#8220;File Edit View &#8230; Tools Window Help&#8221;) crowds you down by its height.</p>
<p>Case study: Amazon&#8217;s Instant Video in Internet Explorer. IE adds menu items and multiple button bars at the top. Then amazon&#8217;s web-site adds its headers across the top. The video winds up a tiny fraction of its potential size, squeezed by all the <em>height cruft</em>. Not to blame Amazon: there&#8217;s a &#8220;full screen&#8221; button, and F11 in IE takes away a bunch of stuff (if you know about it).</p>
<p>The lesson: when every layer adds its own, it compounds.</p>
<p>Software developers take heed.</p>
<p>As a user, there&#8217;s lots you can do to conserve height.</p>
<p>Did you know you can put the Windows task bar to the left or right? I put mine to the left, as narrow as possible. You lose a little of the icons&#8217; descriptions, but mousing over gives them back. It flushes out some bugs, too: some programs start in the upper left corner, winding up under the task bar. (To move the task bar, put the mouse on the middle top edge and drag it to the middle left.)</p>
<p>Most software today lets you move menu bars, and the best ones let you dock them to the left or right, making them vertical. Very nice, though they can truncate text menus. Your word processor has several: don&#8217;t live with them crowding you. It&#8217;s worth retraining your eye to work with them vertically. (Convince your complaining co-workers, too.)</p>
<p>For working with source code, height is particularly valuable. Source-code flows down, and seeing more at once is better. I have a two-monitor set-up on my desk-top, and my cheap, last-generation NVidia video card lets me turn one monitor sideways. A <a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16824994001&#038;cm_re=neo-flex-_-24-994-001-_-Product">$40 monitor stand</a> and you&#8217;re in business.  This has been an indispensable productivity boost for me. Don&#8217;t work with all horizontal monitors.</p>
<p>When looking at code, can you bump your font-size down one? You&#8217;ll see a lot more.</p>
<p><b>Update</b>. I promise I&#8217;m not making this up: <em>one day</em> after this pontification a client passes along a request to do exactly this: rearrange things to conserve screen height in a program I wrote a couple years ago. File this under <em>eerily prescient</em> or <em>physician heal thyself?</em></p>
]]></content:encoded>
			<wfw:commentRss>http://jc-bell.com/blog/2011/04/01/killing-height-cruft-conserving-screen-height/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The next make?</title>
		<link>http://jc-bell.com/blog/2011/02/22/the-next-make/</link>
		<comments>http://jc-bell.com/blog/2011/02/22/the-next-make/#comments</comments>
		<pubDate>Tue, 22 Feb 2011 16:28:18 +0000</pubDate>
		<dc:creator>Jim Bell</dc:creator>
				<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://jc-bell.com/blog/?p=208</guid>
		<description><![CDATA[Many build systems exist to help people build their projects in a cogent manner and avoid the stupefying (albeit powerful) makefile: CMake, scons, boost.build, bjam, ant, etc. Each has its following, often based on the propensity of the audience (C/C++, python, Java). Here&#8217;s another to add to the mix: Cake. And this brief intro on [...]]]></description>
			<content:encoded><![CDATA[<p>Many build systems exist to help people build their projects in a cogent manner and avoid the stupefying (albeit powerful) makefile: CMake, scons, boost.build, bjam, ant, etc.  Each has its following, often based on the propensity of the audience (C/C++, python, Java).</p>
<p>Here&#8217;s another to add to the mix: <a href='http://matthewinrandwick.github.com/Cake/'>Cake</a>.  And <a href='http://lists.boost.org/boost-interest/2011/02/0076.php'>this brief intro</a> on the Boost-interest digest makes the pitch.</p>
<p>No makefile at all. You put compiler flags right in the source code, and it walks your source, looking for special comments and using some naming conventions.</p>
<p>I like the idea of compiler flags in the source. Source-code attributes like dllimport and pragma comment(lib&#8230;) prove that&#8217;s useful.</p>
<p>You need g++ and make (behind the scenes), so that constrains its user base. Will the naming conventions be too restrictive?  It uses a global configuration (in /etc/), but I can envision wanting a project-specific common configuration file, too, being the control freak I am. Will it accommodate?</p>
<p>Put it on your watch list.</p>
]]></content:encoded>
			<wfw:commentRss>http://jc-bell.com/blog/2011/02/22/the-next-make/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GCC Warnings</title>
		<link>http://jc-bell.com/blog/2011/01/19/gcc-warnings/</link>
		<comments>http://jc-bell.com/blog/2011/01/19/gcc-warnings/#comments</comments>
		<pubDate>Wed, 19 Jan 2011 16:33:37 +0000</pubDate>
		<dc:creator>Jim Bell</dc:creator>
				<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://jc-bell.com/blog/?p=199</guid>
		<description><![CDATA[The boost folks just updated their warnings guidelines. A long read, but everything you want to know about dealing with warnings on both MSVC and GCC, all in one place.]]></description>
			<content:encoded><![CDATA[<p>The boost folks just updated their <a href="https://svn.boost.org/trac/boost/wiki/Guidelines/WarningsGuidelines">warnings guidelines</a>.  A long read, but everything you want to know about dealing with warnings on both MSVC and GCC, all in one place.</p>
]]></content:encoded>
			<wfw:commentRss>http://jc-bell.com/blog/2011/01/19/gcc-warnings/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Serial Port Monitor in 20 Lines of Code</title>
		<link>http://jc-bell.com/blog/2011/01/12/serial-port-monitor-20-loc/</link>
		<comments>http://jc-bell.com/blog/2011/01/12/serial-port-monitor-20-loc/#comments</comments>
		<pubDate>Wed, 12 Jan 2011 16:01:48 +0000</pubDate>
		<dc:creator>Jim Bell</dc:creator>
				<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://jc-bell.com/blog/?p=191</guid>
		<description><![CDATA[Here&#8217;s a serial-port monitor in 20 lines of code, thanks to PySerial. It opens the default or first serial port, and works with USB dongles, too. import serial # http://pyserial.sf.net import SerialPortScanWin32 pList = [x for x in SerialPortScanWin32.comports()] port = pList[0][0] - 1 # single/first serial port ser = serial.Serial(port, baudrate=1200, parity='E', timeout=0.2) # [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a serial-port monitor in 20 lines of code, thanks to <a href="http://pyserial.sf.net">PySerial</a>. It opens the default or first serial port, and works with USB dongles, too.</p>
<p><code>
<pre>import serial	# http://pyserial.sf.net
import SerialPortScanWin32

pList = [x for x in SerialPortScanWin32.comports()]
port = pList[0][0] - 1 # single/first serial port
ser = serial.Serial(port, baudrate=1200, parity='E', timeout=0.2) # opens, too.
print "Monitoring serial port " + ser.name
data = []
while True:
	ch = ser.read(1)
	if len(ch) == 0:
		# rec'd nothing print all
		if len(data) > 0:
			s = ''
			for x in data:
				s += ' %02X' % ord(x)
			print '%s [len = %d]' % (s, len(data))
		data = []
	else:
		data.append(ch)
</pre>
<p></code></p>
<p>Python rocks!</p>
<p>PS: No, serial comm hasn&#8217;t gone the way of the dodo, particularly for many industries.</p>
]]></content:encoded>
			<wfw:commentRss>http://jc-bell.com/blog/2011/01/12/serial-port-monitor-20-loc/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Avoiding SubInACL.msi</title>
		<link>http://jc-bell.com/blog/2010/12/28/avoiding-subinacl-msi/</link>
		<comments>http://jc-bell.com/blog/2010/12/28/avoiding-subinacl-msi/#comments</comments>
		<pubDate>Tue, 28 Dec 2010 20:23:10 +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=174</guid>
		<description><![CDATA[Problem: An app I wrote (some time ago) refuses to run on Windows 7. MFC&#8217;s CDialog::DoModal() returns immediately. The web suggests it&#8217;s using an unregistered control. Sure enough, the registration for a control fails with: The module “msflxgrd.ocx” was loaded but the call to DllRegisterServer failed with error code 0x8002801c. One person says get and [...]]]></description>
			<content:encoded><![CDATA[<p><strong><em>Problem:</em></strong> An app I wrote (some time ago) refuses to run on Windows 7. MFC&#8217;s CDialog::DoModal() returns immediately. The web <a href="http://www.eggheadcafe.com/software/aspnet/30292447/domodal-returns-1-in-64bit-executable.aspx">suggests</a> it&#8217;s using an unregistered control. Sure enough, the registration for a control fails with:</p>
<blockquote><p>The module “msflxgrd.ocx” was loaded but the call to DllRegisterServer failed with error code 0x8002801c.</p></blockquote>
<p>One person says <a href="http://www.eggheadcafe.com/software/aspnet/29997120/solved-the-module-fm20dll-was-loaded-but-the-call-to-dllregisterserver-failed-with-error-code-0x8002801c.aspx">get and run SubInACL.msi</a>, and use it to make sweeping recursive permissions changes to the registry and system directories.</p>
<p>Yikes! Really?!?!?</p>
<p>This much-less-intrusive solution worked for me:</p>
<p>Right-click on C:\WINDOWS\System32\cmd.exe, and choose &#8220;Run as Adminisstrator&#8221;.  From that command-line, run the registration:</p>
<blockquote><p>regsvr32 msflxgrd.ocx</p></blockquote>
<p>The registration now passes, and my program now comes up (not needing to be run as administrator).</p>
<p>Note that we thought the account we were running under had full Administrator privileges, but still failed to run this app as such. (It didn&#8217;t ask for the password when running cmd as administrator.)</p>
]]></content:encoded>
			<wfw:commentRss>http://jc-bell.com/blog/2010/12/28/avoiding-subinacl-msi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MSVC-8: alive and well</title>
		<link>http://jc-bell.com/blog/2010/11/28/msvc-8-alive-and-well/</link>
		<comments>http://jc-bell.com/blog/2010/11/28/msvc-8-alive-and-well/#comments</comments>
		<pubDate>Sun, 28 Nov 2010 14:48:54 +0000</pubDate>
		<dc:creator>Jim Bell</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://jc-bell.com/blog/?p=170</guid>
		<description><![CDATA[Over the weekend I installed the latest Flickr Uploadr for Win32. The install popped up the familiar &#8220;Microsoft Visual C++ 2005 Redistributable&#8221; installer as part of its installation. Microsoft Visual C++ 8 is still solid and widely used.]]></description>
			<content:encoded><![CDATA[<p>Over the weekend I installed the latest <a href='http://www.flickr.com/tools/'>Flickr Uploadr</a> for Win32.</p>
<p>The install popped up the familiar &#8220;Microsoft Visual C++ 2005 Redistributable&#8221; installer as part of its installation.</p>
<p>Microsoft Visual C++ 8 is still solid and widely used.</p>
]]></content:encoded>
			<wfw:commentRss>http://jc-bell.com/blog/2010/11/28/msvc-8-alive-and-well/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bye-bye manifests!</title>
		<link>http://jc-bell.com/blog/2010/11/06/bye-bye-manifests/</link>
		<comments>http://jc-bell.com/blog/2010/11/06/bye-bye-manifests/#comments</comments>
		<pubDate>Sat, 06 Nov 2010 22:24:24 +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=165</guid>
		<description><![CDATA[Here&#8217;s a very interesting development, brought to my attention by a fellow developer: Microsoft is doing away with the manifest scheme in Visual Studio 2010. From Deployment in Visual C++ 2010: Differences between Visual C++ 2008 and Visual C++ 2010 The most significant changes between Visual C++ 2008 and Visual C++ 2010 are: * Visual [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a very interesting development, brought to my attention by a fellow developer:</p>
<p>Microsoft is doing away with the manifest scheme in Visual Studio 2010. From <a href='http://msdn.microsoft.com/en-us/library/dd293574.aspx'>Deployment in Visual C++ 2010</a>:</p>
<blockquote><p>
<b>Differences between Visual C++ 2008 and Visual C++ 2010</b></p>
<p>The most significant changes between Visual C++ 2008 and Visual C++ 2010 are:</p>
<p>    *      Visual C++ libraries no longer depend on manifests and are no longer installed in the WinSxS folder.<br />
    *      Dependent applications and libraries no longer require manifest information.<br />
    *      Local deployment no longer requires a satellite manifest.<br />
&#8230;
</p></blockquote>
<p>To me, the manifest scheme just traded one problem for another. And the problem traded away (DLL issues) was one I never had.</p>
]]></content:encoded>
			<wfw:commentRss>http://jc-bell.com/blog/2010/11/06/bye-bye-manifests/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Developers in Short Supply</title>
		<link>http://jc-bell.com/blog/2010/10/17/developers-in-short-supply/</link>
		<comments>http://jc-bell.com/blog/2010/10/17/developers-in-short-supply/#comments</comments>
		<pubDate>Mon, 18 Oct 2010 02:23:18 +0000</pubDate>
		<dc:creator>Jim Bell</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Life]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://jc-bell.com/blog/?p=156</guid>
		<description><![CDATA[From today&#8217;s Chicago Tribune: Software engineers hard to find Shortage of trained IT talent challenges Chicago companies Good to know in these troubled times. And to keep in mind: &#8220;One good developer can do the work of three or four guys,&#8221; And this&#8230; &#8230; finding qualified job candidates is &#8220;the bane of my existence.&#8221;]]></description>
			<content:encoded><![CDATA[<p>From today&#8217;s Chicago Tribune:</p>
<blockquote><p><b><a href="http://www.chicagotribune.com/business/ct-biz-1017-out-technology-20101017,0,5887935.story">Software engineers hard to find</a></b><br />
Shortage of trained IT talent challenges Chicago companies </p></blockquote>
<p>Good to know in these troubled times.</p>
<p>And to keep in mind:</p>
<blockquote><p>&#8220;One good developer can do the work of three or four guys,&#8221;</p></blockquote>
<p>And this&#8230;</p>
<blockquote><p>&#8230; finding qualified job candidates is &#8220;the bane of my existence.&#8221;</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://jc-bell.com/blog/2010/10/17/developers-in-short-supply/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wally Gets It</title>
		<link>http://jc-bell.com/blog/2010/10/16/wally-gets-it/</link>
		<comments>http://jc-bell.com/blog/2010/10/16/wally-gets-it/#comments</comments>
		<pubDate>Sat, 16 Oct 2010 15:46:28 +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=154</guid>
		<description><![CDATA[Dilbert's Wally Gets It]]></description>
			<content:encoded><![CDATA[<p><a href="http://dilbert.com/strips/comic/2010-10-10/" title="Dilbert.com"><img src="http://dilbert.com/dyn/str_strip/000000000/00000000/0000000/100000/00000/2000/000/102053/102053.strip.sunday.gif" border="0" alt="Dilbert.com" /></a></p>
<p>Wally gets it (in his own Wally way).</p>
<blockquote><p>The art of this job is binding the rare moments of inspiration to knowledge and machines.</p></blockquote>
<p>That&#8217;s what I mean when I say, &#8220;&#8230;good ideas&#8230;&#8221;.</p>
<p>But we can&#8217;t afford the moments to be rare.</p>
]]></content:encoded>
			<wfw:commentRss>http://jc-bell.com/blog/2010/10/16/wally-gets-it/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

