<?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>keeping simple &#187; software</title>
	<atom:link href="http://www.yodaiken.com/tag/software/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.yodaiken.com</link>
	<description>Systems software technology and business</description>
	<lastBuildDate>Sun, 01 Jan 2012 18:30:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>Toyota&#8217;s problem: hardware weenies and poor accounting practices [updated]</title>
		<link>http://www.yodaiken.com/2010/02/toyotas-problem-hardware-weenies-and-poor-accounting-practices/</link>
		<comments>http://www.yodaiken.com/2010/02/toyotas-problem-hardware-weenies-and-poor-accounting-practices/#comments</comments>
		<pubDate>Sat, 06 Feb 2010 16:45:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[embedded systems]]></category>
		<category><![CDATA[software business]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[control]]></category>
		<category><![CDATA[embedded software]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[toyota]]></category>

		<guid isPermaLink="false">http://www.yodaiken.com/?p=776</guid>
		<description><![CDATA[Jamie Kitman&#8217;s look at the twisted path Toyota followed to it&#8217;s current difficulties inspired me to think about software and money &#8211; two topics I spend way too much time thinking about. As a purely disinterested observer (ahem) it has &#8230; <a href="http://www.yodaiken.com/2010/02/toyotas-problem-hardware-weenies-and-poor-accounting-practices/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Jamie Kitman&#8217;s look at the twisted path Toyota followed to it&#8217;s <a title="kitman" href="http://http://www.gq.com/blogs/the-q/2010/02/is-toyota-the-car-industrys-tiger-woods.html" onclick="pageTracker._trackPageview('/outgoing/http_//www.gq.com/blogs/the-q/2010/02/is-toyota-the-car-industrys-tiger-woods.html?referer=');">current difficulties</a> inspired me to think about software and money &#8211; two topics I spend <a href="http://www.yodaiken.com/wp-content/uploads/2010/02/kanbanjob.jpg"><img class="alignright size-thumbnail wp-image-780" title="kanbanjob" src="http://www.yodaiken.com/wp-content/uploads/2010/02/kanbanjob-150x150.jpg" alt="" width="150" height="150" /></a>way too much time thinking about. As a purely disinterested observer (ahem) it has come to my attention, repeatedly, that manufacturing companies undervalue, underinvest in, and undertest software.  On a sales visit to a manufacturer of giant size industrial air-conditioners, I was told that some software improvements had reduced operating cost 25% but that purchasing software tools or hiring advanced consulting or top line engineers internally was out of the question. The software team was a capable enough group, but it did not contain anyone who could provide architectural perspective, help with design issues, understand tradeoffs involving OS/processor/board and so on so each project was a one-off desperate attempt to patch the existing undesign. The reason for this absence was simple: top level software engineers could not be hired for $40K/year.  The team manager sadly told me that accounting was not willing to place high value on weightless, invisible code and so the usual rules for R&amp;D for inputs to the manufacturing process gave their team nearly nothing.</p>
<p>As a visitor to Japanese auto companies 10 years ago, I was blown away by the brilliance of the industrial design and the enormous investment in that, and shocked at the software development effort &#8211; one in which the software team was clearly considered to be low status. Not that my, more limited, experience with US companies was much more impressive. In fact, it was interesting that as Japanese auto companies were reaching out to at least look at advanced control software, US companies relegated that work to the outer periphery. Of course, this was some time ago, but obviously a $100M investment in top level control software development and test at Toyota a decade ago would have been a good investment &#8211; even if they had not given any of it to <a href="http://www.yodaiken.com/wp-content/uploads/2010/02/41_07_9-Wrong-Way-Road-Traffic-Sign_web.jpg"><img class="alignleft" title="41_07_9---Wrong-Way-Road-Traffic-Sign_web" src="http://www.yodaiken.com/wp-content/uploads/2010/02/41_07_9-Wrong-Way-Road-Traffic-Sign_web-150x150.jpg" alt="" width="150" height="150" /></a>me.<a href="http://www.yodaiken.com/wp-content/uploads/2010/02/ass-is-too-small.jpg"><img class="alignright" title="ass-is-too-small" src="http://www.yodaiken.com/wp-content/uploads/2010/02/ass-is-too-small-150x150.jpg" alt="" width="150" height="150" /></a></p>
<p>Once I was visiting an office products manufacturer and discussing their new project. The hardware team had chosen to use a processor for which there was no solid compiler suite, no existing strong web or network or other components etc. because it was cheap. I explained that the choice of processor was fine with us, but that our prices for providing basic RTOS support would be high due to the necessity of compensating for this environmental limitation. The team broke into a raucous argument between the software developers and the hardware engineers &#8211; with the software people basically yelling &#8220;we told you idiots!&#8221;.</p>
<p>One of the things that struck me at a Japanese auto company was how the manufacturing discipline that allowed them to make such high quality hardware was not even attempted with software. Software is still not taken seriously as a manufacturing area &#8211; and the consequences are not happy ones. See the<a title="a few billion lines of code later" href="http://cacm.acm.org/magazines/2010/2/69354-a-few-billion-lines-of-code-later/fulltext" target="_blank" onclick="pageTracker._trackPageview('/outgoing/cacm.acm.org/magazines/2010/2/69354-a-few-billion-lines-of-code-later/fulltext?referer=');"> article</a> by founders of Coverity for a great tour of the strange views tolerated within software development</p>
<blockquote><p>Do bugs matter? Companies buy bug-finding tools because they               see bugs as bad. However, not everyone agrees that bugs matter.               The following event has occurred during numerous trials. The tool               finds a clear, ugly error (memory corruption or use-after-free)               in important code, and the interaction with the customer goes               like thus:</p>
<p>&#8220;So?&#8221;</p>
<p>&#8220;Isn&#8217;t that bad? What happens if you hit it?&#8221;</p>
<p>&#8220;Oh, it&#8217;ll crash. We&#8217;ll get a call.&#8221; [Shrug.]</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.yodaiken.com/2010/02/toyotas-problem-hardware-weenies-and-poor-accounting-practices/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux semaphores</title>
		<link>http://www.yodaiken.com/2010/01/linux-semaphores/</link>
		<comments>http://www.yodaiken.com/2010/01/linux-semaphores/#comments</comments>
		<pubDate>Sat, 30 Jan 2010 02:47:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[operating systems]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://www.yodaiken.com/?p=663</guid>
		<description><![CDATA[Re: Schedule idle MOLNAR Ingo (mingo@chiara.csoma.elte.hu) Wed, 11 Nov 1998 04:09:32 +0100 (CET) [...] &#62; _please_ We can do better than this. Only semaphores (not spinlocks) need &#62; to have the priority inheritance. [...] nope there are _not_ only semaphores, &#8230; <a href="http://www.yodaiken.com/2010/01/linux-semaphores/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<blockquote style="color: #808080;"><p>Re: Schedule idle<br />
MOLNAR Ingo (mingo@chiara.csoma.elte.hu)<br />
Wed, 11 Nov 1998 04:09:32 +0100 (CET)<br />
[...]<br />
&gt; _please_ We can do better than this. Only semaphores (not spinlocks) need<br />
&gt; to have the priority inheritance. [...]<br />
nope there are _not_ only semaphores, but many other types of locks.<br />
&gt; [...] This can be done with lists off the<br />
&gt; semaphore and tasks&#8230; [...]<br />
it&#8217;s _not_ easy to extend Linux semaphores to handle priority inheritance. currently semaphore operations can be done via hw-atomic test-and-set instructions. If we do anything more complex, we cannot use simple instructions anymore. Linux semaphores are 2 instructions for an up() and 2 for a down(), and thats one of our crown jewels <img src='http://www.yodaiken.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>the whole point is not quite valid, RT and filesystem IO doesnt mix well anyway &#8230; the solution: use system calls that are guaranteed to not block, either by design, or by system policy (ie. separate filesystem on a RAMDISK) &#8230; or use a device that doesnt introduce large latencies. (RAMdisk or solid state disk)</p></blockquote>
<p>And then &#8230;.</p>
<pre>
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.yodaiken.com/2010/01/linux-semaphores/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Deterministic multithreading</title>
		<link>http://www.yodaiken.com/2009/08/deterministic-multithreading/</link>
		<comments>http://www.yodaiken.com/2009/08/deterministic-multithreading/#comments</comments>
		<pubDate>Mon, 10 Aug 2009 13:00:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[embedded systems]]></category>
		<category><![CDATA[operating systems]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[software security]]></category>
		<category><![CDATA[specification]]></category>
		<category><![CDATA[controls]]></category>
		<category><![CDATA[determinism]]></category>
		<category><![CDATA[embedded]]></category>
		<category><![CDATA[non-determinism]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://www.yodaiken.com/?p=505</guid>
		<description><![CDATA[An interesting paper appearing in ASPLOS proceedings provides a &#8220;deterministic&#8221; locking method Kendo enforces a deterministic interleaving of lock acquisitions and specially declared non-protected reads through a novel dynamically load-balanced deterministic scheduling algorithm. The algorithm tracks the progress of each &#8230; <a href="http://www.yodaiken.com/2009/08/deterministic-multithreading/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>An interesting paper appearing in ASPLOS proceedings provides a &#8220;deterministic&#8221; locking method</p>
<blockquote><p>Kendo enforces a deterministic interleaving of lock acquisitions and specially declared non-protected reads through a novel dynamically load-balanced deterministic scheduling algorithm. The algorithm tracks the progress of each thread using performance counters to construct a deterministic logical time that is used to compute an interleaving of shared data accesses that is both deterministic and provides good load balancing. Kendo can run on today&#8217;s commodity hardware while incurring only a modest performance cost ( <a href="http://www.gigascale.org/pubs/1883/asplos073-olszewski.pdf" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.gigascale.org/pubs/1883/asplos073-olszewski.pdf?referer=');">http://www.gigascale.org/pubs/1883/asplos073-olszewski.pdf</a>)</p></blockquote>
<p>There is similarly motivated work on Java going on at UIC: <a href="http://dpj.cs.uiuc.edu/DPJ/Home.html" target="_blank" onclick="pageTracker._trackPageview('/outgoing/dpj.cs.uiuc.edu/DPJ/Home.html?referer=');">http://dpj.cs.uiuc.edu/DPJ/Home.html</a></p>
<p>Both works refer to Lee&#8217;s paperwhich I discussed <a href="http://www.yodaiken.com/2009/02/are-threads-evil/" target="_self">earlier</a>. Nondeterministic threading is a  historical accident in computer engineering. Operating systems introduced time-sharing methods so single thread programs could be run in parallel during I/O delays and then so that multiple users could reasonably fairly share a processor and then so the OS and service programs could provide multiple services to a user at the price of slowing down user applications.  Exposing this system to users has been a mixed blessing. Certainly in the controls world, non-determinism is a dangerous fault.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yodaiken.com/2009/08/deterministic-multithreading/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Patent trolling and guilty knowledge</title>
		<link>http://www.yodaiken.com/2008/09/patent-trolling-and-guilty-knowledge/</link>
		<comments>http://www.yodaiken.com/2008/09/patent-trolling-and-guilty-knowledge/#comments</comments>
		<pubDate>Wed, 17 Sep 2008 20:37:54 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[intellectual property]]></category>
		<category><![CDATA[software business]]></category>
		<category><![CDATA[ip]]></category>
		<category><![CDATA[myhrvold]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[software patents]]></category>

		<guid isPermaLink="false">http://www.yodaiken.com/?p=163</guid>
		<description><![CDATA[Mr. Myhrvold: All of this fear is from people who have guilty knowledge of their own actions. There are lots of major tech companies that grew from zero to gigantically successful in a very short period of time without investing &#8230; <a href="http://www.yodaiken.com/2008/09/patent-trolling-and-guilty-knowledge/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<blockquote><p><strong>Mr. Myhrvold:</strong> All of this fear is from people who have guilty knowledge of their own actions. There are lots of major tech companies that grew from zero to gigantically successful in a very short period of time without investing in their own inventions. They got there by using other people&#8217;s inventions.</p>
<p>[<a title="wsj interview" href="http://online.wsj.com/article/SB122142717791833671.html" target="_blank" onclick="pageTracker._trackPageview('/outgoing/online.wsj.com/article/SB122142717791833671.html?referer=');">cite</a>]</p></blockquote>
<p>No kidding.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yodaiken.com/2008/09/patent-trolling-and-guilty-knowledge/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Meaning of concurrent programs and IP</title>
		<link>http://www.yodaiken.com/2008/07/meaning-of-concurrent-programs-and-ip/</link>
		<comments>http://www.yodaiken.com/2008/07/meaning-of-concurrent-programs-and-ip/#comments</comments>
		<pubDate>Thu, 17 Jul 2008 20:48:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[intellectual property]]></category>
		<category><![CDATA[software business]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[Add new tag]]></category>
		<category><![CDATA[axiomatic]]></category>
		<category><![CDATA[formal methods]]></category>
		<category><![CDATA[ip]]></category>
		<category><![CDATA[patents]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://www.yodaiken.com/?p=156</guid>
		<description><![CDATA[Most of the new draft of the Concurrent Programs paper has to do with trying to specify problems and solutions in synchronization via an atomicÂ  &#8220;compare and swap&#8221; operation. Even these operations are surprisingly complicated once put under the microscope &#8230; <a href="http://www.yodaiken.com/2008/07/meaning-of-concurrent-programs-and-ip/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Most of the<a title="draft 2" href="http://www.yodaiken.com/papers/code2.pdf" target="_blank"> new draft of the Concurrent Programs paper </a>has to do with trying to specify problems and solutions in synchronization via an atomicÂ  &#8220;compare and swap&#8221; operation. Even these operations are surprisingly complicated once put under the microscope &#8211; or not so surprisingly complicated if you think about the details of using or implementing them. But at the end of the paper, I start to describe the fundamental difference in approach between this work and &#8220;formal methods&#8221;Â  in terms of how we can view a program. Dijkstra seems to me to have made an error by insisting that we should think of a program as a mathematical object and a programmer as a mathematician of sorts. A program is more of a manufactured object.</p>
<p>Even though it has no weight and is invisible, a program is device of sorts.Â  If we think of a program as a mathematical object, the methods of formal logic &#8211; of meta-mathematics &#8211; are the natural methods to use. If we think of a program as a device, like a piano or a bathtub or an automobile, then what mathematicians call &#8220;foundational questions&#8221; are far away.  People are very resistant to the idea of a program as a &#8220;thing&#8221; for the obvious reasons, but mathematical objects don&#8217;t have the weird properties and defects of manufactured objects (or physical objects for that matter). A ball bearing is not a sphere and an implementation of a stack is not an ordered sequence. Recursion in programs is different from recursion in mathematical functions: f(0):=1, f(x+1):= (x+1)*f(x) isÂ  a complete definition of a mathematical object but only an approximation of some of the properties of the program written the same way. Any programmer will know that f(10000) almost certainly fails &#8211; and that&#8217;s an important part of the specification of the program.</p>
<p>The confusion between programs and mathematical objects is a pervasive obstacle in fields as apparently unrelated as program verification, software pricing, and patent law. In program verification we bog down in foundational methods of formal logic because that is the obvious tool to study mathematical objects, but it&#8217;s certainly not the obvious tool for <span style="text-decoration: underline;">doing mathematics</span> or describing manufactured objects. Â  In software pricing, the resistance of manufacturers to let mere software figure in to costs in terms of how complex it is and how much it adds to value rather than by weight repeatedly leads to product development schedules that invest too little time and/or money in the most important components. In patent law, confusion between unpatentable mathematical methods and technology for programs is used to deny software innovators the same rights that are uncontroversially granted to innovators who design cardboard boxes</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yodaiken.com/2008/07/meaning-of-concurrent-programs-and-ip/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

