<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.2.1" -->
<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/"
	>

<channel>
	<title>Bakin's Bits</title>
	<link>http://bakins-bits.com</link>
	<description>Programming issues explained</description>
	<pubDate>Tue, 14 Apr 2009 02:29:40 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.2.1</generator>
	<language>en</language>
			<item>
		<title>A couple of my articles on CodeProject</title>
		<link>http://bakins-bits.com/archives/13</link>
		<comments>http://bakins-bits.com/archives/13#comments</comments>
		<pubDate>Tue, 14 Apr 2009 02:29:40 +0000</pubDate>
		<dc:creator>david</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://bakins-bits.com/archives/13</guid>
		<description><![CDATA[Long time no update this blog.  I intend to fix that.  But for now, I&#8217;d like to point to two articles I posted at CodeProject:

Tracing Events Raised by Any C# Object—in which I describe a technique for tracing the events of any C# object using a very simple helper class, using .NET Reflection to get [...]]]></description>
			<content:encoded><![CDATA[<p>Long time no update this blog.  I intend to fix that.  But for now, I&#8217;d like to point to two articles I posted at <a href="http://www.codeproject.com">CodeProject</a>:</p>
<ul>
<li><a href="http://www.codeproject.com/KB/cs/eventtracingviareflection.aspx">Tracing Events Raised by Any C# Object</a>—in which I describe a technique for tracing the events of any C# object using a very simple helper class, using .NET Reflection to get the event handlers of an arbitrary object.</li>
<li><a href="http://www.codeproject.com/KB/shell/PasswordUnhider.aspx">Password Field Unhider (and some C++ utility classes)</a>—first I present a small utility that lives in the Windows notification area and stands ready at any time to <em>unhide</em> (that is, <em>unmask</em>) any password field on the screen, so you can see what you&#8217;re typing. And second, I describe some very simple yet useful C++ utility classes: a general message pump, an IPC mechanism using <code>WM_COPYDATA</code>, and a work item dispatcher.</li>
</ul>
<p>I intend to post more articles at CodeProject, the kind of useful tips, tutorial, explanation things, with source code, that are longer than the typical blog post.</p>
]]></content:encoded>
			<wfw:commentRss>http://bakins-bits.com/archives/13/feed</wfw:commentRss>
		</item>
		<item>
		<title>Typing Mathematical Formulas in Word 2007</title>
		<link>http://bakins-bits.com/archives/9</link>
		<comments>http://bakins-bits.com/archives/9#comments</comments>
		<pubDate>Mon, 12 Nov 2007 01:43:36 +0000</pubDate>
		<dc:creator>david</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://bakins-bits.com/archives/9</guid>
		<description><![CDATA[You can use Word 2007 features to generate very nice looking mathematical notation. This feature is, for all practical purposes, completely undocumented by Microsoft. However, some information has been published by Microsoft employees and others on the web. This post is meant to serve as a convenient directory of that information. (This post will be [...]]]></description>
			<content:encoded><![CDATA[<p>You can use Word 2007 features to generate very nice looking mathematical notation. This feature is, for all practical purposes, completely undocumented by Microsoft. However, some information has been published by Microsoft employees and others on the web. This post is meant to serve as a convenient directory of that information. (This post will be updated as I learn more about equations in Word 2007.)
</p>
<p> <br />
 </p>
<ul>
<li>To enter equation mode: Insert|Equation or Alt+= shortcut. Note that the Insert ribbon doesn&#8217;t have the Equation item when in Blog mode. Why not? (Question: How do I get it to appear in Blog mode?)
</li>
<li><a href="http://dataninja.wordpress.com/2007/09/28/undocumented-word-2007-equation-shortcuts/">Dataninja: Undocumented Word 2007 Equation Shortcuts</a>—John Gardner created this very nice reference card with some useful equation formatted tips.
</li>
<li><a href="http://blogs.msdn.com/microsoft_office_word/archive/2006/10/04/Equations-in-Word-2007.aspx">Word Team Blog: Equations in 2007</a>—an introductory post, with links to two screenshot-videos on how to use linear method. Unfortunately – she doesn&#8217;t explain, while she is typing, how to enter equation mode or how use the keyboard to move the cursor from one insertion field to the next. (This is currently the only post on the Word Team blog with the tag &#8220;equations&#8221;.)
</li>
<li><a href="http://bakins-bits.com/wordpress/wp-content/uploads/2007/11/word-2007-equations-and-mathematical-symbols-math-autocorrect-symbols.pdf">Word 2007 Help: Math AutoCorrect Symbols</a>—I cut&amp;pasted this from the Word 2007 Help—it is more easily used in this format.
</li>
<li><a href="http://downloads.techrepublic.com.com/abstract.aspx?docid=302126">TechRepublic: Microsoft Office Word 2007 Inside and Out sample chapter on Building Blocks</a>—TechRepublic offers this sample chapter of <em>Microsoft Office Word 2007 Inside and Out—</em>the chapter is all about Building Blocks, which is what the equations gallery is made of.  It explains a bit about Math Autocorrect mode, linear equation entry, and how to add your own equations to the gallery.  This chapter is pretty good—the book might be worth getting.
</li>
<li><a href="http://blogs.msdn.com/microsoft_office_word/archive/2006/10/20/equation-numbering.aspx">Word Team Blog: Equation Numbering</a>—a post on how to number the equations in your document. There is a video here too. (This is currently the only post on the Word Team blog with the tag &#8220;equations video&#8221;.)
</li>
<li><a href="http://blogs.msdn.com/murrays/archive/2007/05/30/using-math-italic-and-bold-in-word-2007.aspx">Murray Sargent: Math in Office: Using Math Italic and Bold in Word 2007</a>—How using the ribbon&#8217;s italic and bold formatting buttons provides the proper math italic and bold characters for variables.
</li>
<li><a href="http://www.unicode.org/notes/tn28/UTN28-PlainTextMath-v2.pdf">UTN 28: Unicode Nearly Plain-Text Encoding of Mathematics</a>—this document, an Unicode consortium Technical Note written by the Microsoft developer who implemented the feature, is a complete description of the linear entry method.
</li>
<li><a href="http://blogs.msdn.com/murrays/archive/2007/06/30/math-selection.aspx">Murray Sargent: Math Selection</a>—a brief note on how selection works inside an equation, and the related post <a href="http://blogs.msdn.com/murrays/archive/2007/09/29/using-left-right-arrow-keys-in-mathematical-text.aspx">Murray Sargent: Using Left/Right Arrow Keys in Mathematical Text</a> on how the insertion points works inside an equation.
</li>
<li><a href="http://blogs.msdn.com/murrays/archive/2007/09/01/breaking-equations-into-multiple-lines.aspx">Murray Sargent: Breaking Equations Into Multiple Lines</a>—A nice description of how to break equations onto multiple lines, and also how to align multiple equations on a specific character.
</li>
<li><a href="http://dpcarlisle.blogspot.com/2007/04/xhtml-and-mathml-from-office-20007.html">David Carlisle: XHTML and MathML from Office 2007</a>—David Carlisle provides instructions and an XSL stylesheet so you can take the HTML output of Word 2007 and run it through his process to get an XHTML document that has the math equations in MathML format (normally Word 2007 saves equations in &#8220;ECMA Math&#8221; format, OMML—apparently a Microsoft invention). Note that Word allows you to cut/paste MathML to/from the Clipboard (so you get get equations into or out of Mathematica, for example).
</li>
<li><a href="http://blogs.msdn.com/murrays/archive/2006/11/12/user-spaces-in-math-zones.aspx">Murray Sargent: User Spaces in Math Zones</a>—On typing spaces into equations: Just don&#8217;t do it!
</li>
</ul>
<p>Interesting, but not as practical:
</p>
<ul>
<li><a href="http://blogs.msdn.com/murrays/archive/2007/04/15/when-formula-autobuildup-occurs.aspx">Murray Sargent: When Formula Autobuildup Occurs</a>—Technical description of parsing for formula autobuildup
</li>
<li><a href="C:\Information\Application Configuration\Word 2007 - Equations\Math in Office - High-Quality Editing and Display of Mathematical Text in Office 2007 (Sargent).mht">Murray Sargent: High-Quality Editing and Display of Mathematical Text in Office 2007</a>—This post describes some of the technical background to the mathematical typesetting in Office 2007. It also has a description of the neat Alt-x hex-to-Unicode conversion feature (if you like memorizing the Unicode code points of various mathematical symbols). It also points to this presentation: <a href="http://research.microsoft.com/workshops/fs2006/presentations/17_Sargent_071706.ppt">Math Editing and Display in Office 2007 (Murray Sargent)</a> which summarizes the points in the post.
</li>
</ul>
<p>General places to look for information:
</p>
<ul>
<li><a href="http://blogs.msdn.com/murrays/default.aspx">Murray Sargent: Math in Office Blog</a>—Murray Sargent is the SDE who implemented math/equation mode in Office
</li>
<li><a href="http://blogs.msdn.com/microsoft_office_word">The Microsoft Office Word Team&#8217;s Blog</a>—Blog of the Microsoft Word team </li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://bakins-bits.com/archives/9/feed</wfw:commentRss>
		</item>
		<item>
		<title>Race Conditions and Debugging Multithreaded Programs: What Are Race Conditions?</title>
		<link>http://bakins-bits.com/archives/8</link>
		<comments>http://bakins-bits.com/archives/8#comments</comments>
		<pubDate>Fri, 09 Nov 2007 02:05:26 +0000</pubDate>
		<dc:creator>david</dc:creator>
		
		<category><![CDATA[Concurrency]]></category>

		<category><![CDATA[Race Conditions]]></category>

		<guid isPermaLink="false">http://bakins-bits.com/archives/8</guid>
		<description><![CDATA[In a series of posts, of which this is the first, I&#8217;m going to describe race condition detection and why it is useful to detect data races when you&#8217;re trying to debug multithreaded programs.
But before I get started, here is a useful paper that characterizes race conditions formally: What Are Race Conditions? Some Issues and [...]]]></description>
			<content:encoded><![CDATA[<p>In a series of posts, of which this is the first, I&#8217;m going to describe race condition detection and why it is useful to detect data races when you&#8217;re trying to debug multithreaded programs.</p>
<p>But before I get started, here is a useful paper that characterizes race conditions formally: <a href="http://citeseer.ist.psu.edu/33844.html">What Are Race Conditions? Some Issues and Formalizations (Robert H. B. Netzer, Barton P. Miller) [ACM Letters on Programming Languages and Systems v1n1, March 1992)</a>.</p>
<p>Netzer (who wrote his PhD thesis on this subject) classifies data races into two categories: <em>general races</em>, which pertain to programs which are meant to be deterministic, and <em>data races</em>, which pertain to programs which are non-deterministic. Then he also presents an orthogonal classification of races: <em>feasible</em> races which &#8220;capture the intuitive notions desired for debugging&#8221; but which are hard to compute completely and accurately, and <em>apparent</em> races which &#8220;capture less accurate notions&#8221; which can be detected in practice, but which are sufficiently less accurate that they tend to swamp the user with false positives.</p>
<p>So: general races cause non-deterministic execution in programs intended to be deterministic, and data races cause non-atomic execution of critical sections in non-deterministic programs. Thus both kind of races can cause failures in programs.</p>
<p>In fact, in my most recent job, I dealt with both kinds of races in the application program we were building.</p>
<p>In fact, both general races and data races are important concepts. Your typical Windows application program is non-deterministic – execution depends on the precise timing and ordering of input events (keystroke, mouse movement, and system messages) – but also contains large sections that are intended to operated deterministically (e.g., if in Photoshop you load a certain image file, and execute a specific filter with specific parameters on it, and then you save the resulting image in another file, then the result should be the same each time you do it even if the timing of your mouse movements differs from run to run.)</p>
<p>(Note that the &#8220;critical sections&#8221; that are violated by data races need not be the operating system-provided primitive, like CRITICAL_SECTION objects in Windows. It just means any bit of code that implements&mdash;or is <em>supposed </em>to implement&mdash;mutual exclusion.)</p>
<p>(By the way, I found this article somewhat difficult to understand: the differences between the <em>feasible</em>data races and <em>apparent</em> races, which are the key to Netzer&#8217;s classification, were hard to grasp. Also it wasn&#8217;t really clear what he meant by <em>feasible execution.</em> Finally, the writing was repetitive in places.)</p>
<p><!--<br />
<strong>Update:</strong></p>
<p>I reread the paper and discovered what was difficult to understand. Hopefully, I&#8217;ll find that his other papers clarify these issues.</p>
<p>First, he describes informally race conditions as <em>general races</em> and <em>data races</em> – that&#8217;s all fine (as described above).</p>
<p>Then he defines a <em>program execution</em>, <em>P</em>, as a triple <span style="font-size: 10pt; font-family: Arial Unicode MS">〈E, , 〉, where events are somewhat loosely defined</span> as either <em>synchronization events</em> or <em>computation events</em>. And, a <em>data conflict</em> is defined as something that happens between two events if one writes a shared memory location that the other reads or writes. The definition of <span style="font-size: 11pt; font-family: Calibri">is that for two events, <em>a</em> and <em>b</em>, <em>ab</em> means that <em>a</em> completes before <em>b</em> begins. The notation means that <em>a</em> and <em>b</em> actually execute concurrently.</span></p>
<p>&#8211;></p>
]]></content:encoded>
			<wfw:commentRss>http://bakins-bits.com/archives/8/feed</wfw:commentRss>
		</item>
		<item>
		<title>Do you like your machine planked, like your salmon?</title>
		<link>http://bakins-bits.com/archives/7</link>
		<comments>http://bakins-bits.com/archives/7#comments</comments>
		<pubDate>Fri, 05 Oct 2007 03:35:14 +0000</pubDate>
		<dc:creator>david</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://bakins-bits.com/archives/7</guid>
		<description><![CDATA[A bunch of items I ordered arrived today - hard disks to relieve my chronic space shortage, and USB 2.0 enclosures to put them in.  I built everything at once and commenced transferring data.  It didn&#8217;t take long before I remembered Jim Gray&#8217;s early warnings that as we moved to terabyte disks programmers would need [...]]]></description>
			<content:encoded><![CDATA[<p>A bunch of items I ordered arrived today - hard disks to relieve my chronic space shortage, and USB 2.0 enclosures to put them in.  I built everything at once and commenced transferring data.  It didn&#8217;t take long before I remembered Jim Gray&#8217;s early warnings that as we moved to terabyte disks programmers would need to think of disks as sequential devices - that is, like tapes.  (I read this in a presentation of his a long time ago, but right now I can only find later references, like in this <a target="_blank" href="http://www.acmqueue.org/modules.php?name=Content&amp;pa=showpage&amp;pid=43" title="ACM Queue - A Conversation With Jim Gray">interview</a>, and in this <a target="_blank" href="http://arxiv.org/ftp/cs/papers/0208/0208011.pdf">paper</a>.)  Consolidating 500Gb of files from multiple smaller hard drives onto one larger drive takes a <em>long</em> time.</p>
<p>But the real point of this post is this:  Can you help me figure out if I&#8217;m using one of my new USB 2.0 hard disk enclosures correctly?  I thought installing the disk into the thing was obvious—but I checked the instructions anyway, which is my usual habit.  The instructions seemed clear: place the hard disk in the USB <em>enclosuer</em>, plug in the cables, secure the metal case with four screws—all ok so far.  But here is the last paragraph:</p>
<blockquote><p><code>Is good with machine plank according to the right method conjunction the hard dish, lock the right and HDD, can immediately trust the usage.</code></p></blockquote>
<p>Say what? A finer example of <a target="_blank" href="http://en.wikipedia.org/wiki/Engrish">Engrish</a> I have never seen.  Thank you <a target="_blank" href="http://www.cptechusa.com/main.html">CP Technologies</a> for your CP-U2S-3G Platinum Series USB 2.0 to SATA hard disk case instructions!</p>
]]></content:encoded>
			<wfw:commentRss>http://bakins-bits.com/archives/7/feed</wfw:commentRss>
		</item>
		<item>
		<title>Building the Home Supercomputer</title>
		<link>http://bakins-bits.com/archives/6</link>
		<comments>http://bakins-bits.com/archives/6#comments</comments>
		<pubDate>Fri, 07 Sep 2007 23:36:51 +0000</pubDate>
		<dc:creator>david</dc:creator>
		
		<category><![CDATA[Bakin's Bits]]></category>

		<guid isPermaLink="false">http://bakins-bits.com/archives/6</guid>
		<description><![CDATA[I was configuring a new computer to be used for testing concurrent software, and was using my standard self-guidelines: second-fastest processor available (a nod to economy), as much DRAM as I can jam on a motherboard, and the latest dual-graphics card technology. Whohoo! But then I found this site on building a very economical cluster [...]]]></description>
			<content:encoded><![CDATA[<p>I was configuring a new computer to be used for testing concurrent software, and was using my standard self-guidelines: second-fastest processor available (a nod to economy), as much DRAM as I can jam on a motherboard, and the latest dual-graphics card technology. Whohoo! But then I found <a target="_blank" href="http://www.calvin.edu/~adams/research/microwulf/">this</a> site on building a <em>very</em> economical cluster system and I realized my guidelines were old-fashioned. I&#8217;m now in the mood to build my own micro-<a target="_blank" href="http://www.beowulf.org/">Beowulf</a>, so I can experiment with parallel clusters as well as multicore concurrency.</p>
<p>Check it out: The system described produces 26Gflops at a cost (August 2007) of $1256! It consists of 4 microATX motherboards, each with a dual core CPU and 2GB RAM, 4 power supplies, 1 hard disk, and 1 8-port gigabit switch. The &#8220;structure&#8221; is scrap plexiglass and threaded rods – definitely minimal! – and the whole thing is 11&#8243; x 12&#8243; x 17&#8243;! Kudos to Professor Joel Adams and his student Tim Brom for designing, building, configuring, and benchmarking this small Beowulf.</p>
<p>Here&#8217;s another such system – <a target="_blank" href="http://www.littlefe.net/mediawiki/index.php/Main_Page">LittleFe</a>.  And <a target="_blank" href="http://www.clustercompute.com">here </a>is a homebrew 10-node system from 2000, with the same idea w.r.t. minimal packaging.</p>
<p>(My main conclusion about my self-guidelines: I don&#8217;t need even the second-fastest processor anymore. Nearly any current processor is fast enough for development purposes, compiler and system bloat notwithstanding. This system uses cheap multicore processors, a reasonable amount of memory for each node, and doesn&#8217;t need anything more than the built-in motherboard graphics. I would still like a system with a hot new graphics card however, so I can experiment with <a target="_blank" href="http://en.wikipedia.org/wiki/GPGPU">GPGPU</a>.)</p>
<p><strong>Update Sept 18 2007:</strong> Lot&#8217;s of people are doing work in this area—which will make it easy to get started!  Here are some more links:</p>
<p><a href="http://pareto.uab.es/mcreel/ParallelKnoppix/">ParallelKnoppix </a>- A LiveCD that let&#8217;s you boot up an MPI cluster in 5 minutes!</p>
<p>And on the ParallelKnoppix site, some user&#8217;s have sent in pictures of their <a href="http://pareto.uab.es/mcreel/ParallelKnoppix/users_clusters/ParallelKnoppixClusters.html">clusters</a>—lot&#8217;s of different (and primitive, yet working) building techniques here!</p>
<p>And this <a href="http://157.181.66.70/wmlc/english.html">page</a> from Dec 2005 describes how some guy built a &#8220;mobile wireless linux cluster&#8221; (2 nodes) in order to have access to &#8220;big computer resources&#8221; while exploring a cave, mountain climbing, a weekend trip to the mountains, or who knows what else.</p>
]]></content:encoded>
			<wfw:commentRss>http://bakins-bits.com/archives/6/feed</wfw:commentRss>
		</item>
		<item>
		<title>Persistent Data Structures - now (possibly) practical</title>
		<link>http://bakins-bits.com/archives/4</link>
		<comments>http://bakins-bits.com/archives/4#comments</comments>
		<pubDate>Fri, 07 Sep 2007 23:21:23 +0000</pubDate>
		<dc:creator>david</dc:creator>
		
		<category><![CDATA[Book Review]]></category>

		<guid isPermaLink="false">http://bakins-bits.com/archives/4</guid>
		<description><![CDATA[The typical data structures most programmers know and use require imperative programming: they fundamentally depend on replacing the values of fields with assignment statements, especially pointer fields.  A particular data structure represents the state of something at that particular moment in time, and that moment only.  If you want to know what the state was [...]]]></description>
			<content:encoded><![CDATA[<p>The typical data structures most programmers know and use require imperative programming: they fundamentally depend on replacing the values of fields with assignment statements, especially pointer fields.  A particular data structure represents the state of something at that particular moment in time, and that moment only.  If you want to know what the state was in the past you needed to have made a copy of the entire data structure back then, and kept it around until you needed it.  (Alternatively, you could keep a log of changes made to the data structure that you could play in reverse until you get the previous state - and then play it back forwards to get back to where you are now.  Both these techniques are typically used to implement undo/redo, for example.)</p>
<p>Or you could use a <em>persistent data structure</em>. A persistent data structure allows you to access previous versions at any time without having to do any copying.  All you needed to do at the time was to save a pointer to the data structure.  If you have a persistent data structure, your undo/redo implementation is simply a stack of pointers that you push a pointer onto after you make any change to the data structure.</p>
<p>This can be quite useful—but it is typically very hard to implement a persistent data structure in an imperative language, especially if you have to worry about memory management<sup>1</sup>.   If you&#8217;re using a functional programming language—especially a language with lazy semantics like Haskell—then all your data structures are automatically persistent, and your only problem is efficiency (and of course, in your functional languages, the language system takes care of memory management).  But for practical purposes, as a hardcore C++ programmer for professional purposes, I was locked out of the world of persistent data structures.</p>
<p>Now, however, with C# and C++/CLI in use (and garbage collection coming to C++ any time now &#8230;<sup>2</sup>) I can at last contemplate the use of persistent data structures in my designs.  And that&#8217;s great, because it gave me an excuse to take one of my favorite computer science books off the shelf and give it another read.</p>
<p>The book is <a target="_blank" href="http://www.amazon.com/Purely-Functional-Structures-Chris-Okasaki/dp/0521631246/" title="Purely Functional Data Structures"><em>Purely Functional Data Structures</em></a>, by Chris Okasaki.  I find it to be a very well written and easy to understand introduction to the design and analysis of persistent data structures—or equivalently—for the design and analysis of any data structure you&#8217;d want to use in a functional language.</p>
<p>There are two key themes of the book: First, to describe the use and implementation of several persistent data structures, such as different kinds of heaps, queues, and random-access lists, and second, to describe how to create your own efficient persistent data structures.</p>
<p> <a href="http://bakins-bits.com/archives/4#more-4" class="more-link">(more&#8230;)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bakins-bits.com/archives/4/feed</wfw:commentRss>
		</item>
		<item>
		<title>Welcome to Bakin&#8217;s Bits</title>
		<link>http://bakins-bits.com/archives/1</link>
		<comments>http://bakins-bits.com/archives/1#comments</comments>
		<pubDate>Tue, 21 Aug 2007 22:22:43 +0000</pubDate>
		<dc:creator>david</dc:creator>
		
		<category><![CDATA[Bakin's Bits]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[I—David Bakin—am an experienced software developer with over 25 years experience developing system and application software.
My aim with Bakin&#8217;s Bits is to produce programming tools to help software developers write better programs, and enjoy writing them more. The initial tools I am working on will help diagnose and debug concurrency issues in multithreaded programs—much much [...]]]></description>
			<content:encoded><![CDATA[<p>I—David Bakin—am an experienced software developer with over 25 years experience developing system and application software.</p>
<p>My aim with <strong>Bakin&#8217;s Bits</strong> is to produce programming tools to help software developers write better programs, and enjoy writing them more. The initial tools I am working on will help diagnose and debug concurrency issues in multithreaded programs—much <em>much </em>better than current debugging tools. I&#8217;m launching <strong>Bakin&#8217;s Bits</strong> with the help of an angel investor (who is also providing a lot of non-financial support and encouragement).</p>
<p>I will provide programming services on a consulting basis until my products get off the ground.</p>
<p>And I will provide short articles on debugging concurrent programs, developing concurrent programs, and other programming topics that interest me, on this site.</p>
<p>My main interests are:</p>
<ul>
<li>issues in concurrency, especially correctness, debugging, and appropriate design</li>
<li>functional programming—I know it is fun, I know it is powerful, but can I construct a business case that will convince a development manager to let me put it into a product?</li>
<li>GPGPU programming and other forms of stream programming, including
<ul>
<li>massively scalable systems that fit in Google&#8217;s <em>map-reduce</em> paradigm or another similar functional pipeline</li>
</ul>
</li>
<li>fun in programming—not just <em>fun</em> as in <em>functional</em>, but also fun <a target="_blank" href="http://www.mathematica-journal.com/issue/v10i2/RippleEffect.html" title="problems">problems</a>, fun <a target="_blank" href="http://en.wikipedia.org/wiki/Dancing_Links" title="algorithms">algorithms</a>, and having a fun time while keeping my <a target="_blank" href="http://www.walterruffler.de/Mechanic.html" title="brain active">brain active</a>.</li>
</ul>
<p> Thanks for checking in!  &#8212; <em>Dave</em></p>
]]></content:encoded>
			<wfw:commentRss>http://bakins-bits.com/archives/1/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
