<?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>Jeff Mather&#039;s Dispatches &#187; Software Engineering</title>
	<atom:link href="http://jeffmatherphotography.com/dispatches/category/software-engineering/feed/" rel="self" type="application/rss+xml" />
	<link>http://jeffmatherphotography.com/dispatches</link>
	<description>The Post-9-to-5 Life of an International Playboy</description>
	<lastBuildDate>Mon, 06 Feb 2012 19:01:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.1</generator>
		<item>
		<title>Welcome to Herb Sutter&#8217;s Jungle</title>
		<link>http://jeffmatherphotography.com/dispatches/2012/01/welcome-to-herb-sutters-jungle/</link>
		<comments>http://jeffmatherphotography.com/dispatches/2012/01/welcome-to-herb-sutters-jungle/#comments</comments>
		<pubDate>Mon, 30 Jan 2012 15:41:03 +0000</pubDate>
		<dc:creator>Jeff Mather</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[Fodder for Techno-weenies]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://jeffmatherphotography.com/dispatches/?p=4341</guid>
		<description><![CDATA[In an effort to keep posting something here until I&#8217;m in the right place mentally to write about things that probably interest you, my dear friends, family, and online diabetes peeps, here&#8217;s another computing performance excerpt and link. (Working on &#8230; <a href="http://jeffmatherphotography.com/dispatches/2012/01/welcome-to-herb-sutters-jungle/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In an effort to keep posting something here until I&#8217;m in the right place mentally to write about things that probably interest you, my dear friends, family, and online diabetes peeps, here&#8217;s another computing performance excerpt and link. (Working on this stuff is the 9-5 part of your favorite international playboy&#8217;s life.)</p>
<p><br clear="all" />A half-decade after Herb Sutter wrote that <a href="http://drdobbs.com/architecture-and-design/184405990">the &#8220;free lunch&#8221; of Moore&#8217;s Law is over</a>, he&#8217;s back with his prophet&#8217;s wisdom about where we&#8217;re going in his January Dr. Dobbs article, <a href="http://drdobbs.com/parallel/232400273">&#8220;Welcome to the Jungle&#8221;</a>. I&#8217;ll give you a moment to decide whether to get the Guns N&#8217; Roses song out of your head or use it as a backdrop for this juicy quotation:</p>
<blockquote><p>If hardware designers merely use Moore&#8217;s Law to deliver more big fat cores, on-device hardware parallelism will stay in double digits for the next decade, which is very roughly when Moore&#8217;s Law is due to sputter, give or take about a half decade. If hardware follows Niagara&#8217;s and MIC&#8217;s lead to go back to simpler cores, we&#8217;ll see a one-time jump and then stay in triple digits. If we all learn to leverage GPUs, we already have 1,500-way parallelism in modern graphics cards (I&#8217;ll say &#8220;cores&#8221; for convenience, though that word means something a little different on GPUs) and likely reach five digits in the decade timeframe.</p>
<p>But all of that is eclipsed by the scalability of the cloud, whose growth line is already steeper than Moore&#8217;s Law because we&#8217;re better at quickly deploying and using cost-effective networked machines than we&#8217;ve been at quickly jam-packing and harnessing cost-effective transistors. It&#8217;s hard to get data on the current largest cloud deployments because many projects are private, but the largest documented public cloud apps (which don&#8217;t use GPUs) are already harnessing over 30,000 cores for a single computation. I wouldn&#8217;t be surprised if some projects are exceeding 100,000 cores today. And that&#8217;s general-purpose cores; if you add GPU-capable nodes to the mix, add two more zeroes.</p>
</blockquote>
<p><a href="http://jeffmatherphotography.com/dispatches/2012/01/welcome-to-herb-sutters-jungle/herb13/" rel="attachment wp-att-4343"><img src="http://jeffmatherphotography.com/dispatches_wp/wp-content/uploads/2012/01/herb13-800x450.gif" alt="" title="Scalability of different architectures" width="640" height="360" class="alignleft size-large wp-image-4343" /></a></p>
<p>The big takeaway for software engineers like me is that we&#8217;d best be learning how to develop solutions using the emerging APIs so that we can harness all of those extra orders of magnitude of scalability. That involves figuring out how to&nbsp;.&nbsp;.&nbsp;.</p>
<ul>
<li>Deal with the processor axis&#8217; lower section [of Sutter's chart] by supporting compute cores with different performance (big/fast, slow/small).</li>
<li>Deal with the processor axis&#8217; upper section by supporting language subsets, to allow for cores with different capabilities including that not all fully support mainstream language features.</li>
<li>Deal with the memory axis for computation, by providing distributed algorithms that can scale not just locally but also across a compute cloud.</li>
<li>Deal with the memory axis for data, by providing distributed data containers, which can be spread across many nodes.</li>
<li>Enable a unified programming model that can handle the entire [memory/locality/processor] chart with the same source code.</li>
</ul>
<blockquote><p>Perhaps our most difficult mental adjustment, however, will be to learn to think of the cloud as part of the mainstream machine — to view all these local and non-local cores as being equally part of the target machine that executes our application, where the network is just another bus that connects us to more cores. That is, in a few years we will write code for mainstream machines assuming that they have million-way parallelism, of which only thousand-way parallelism is guaranteed to always be available (when out of WiFi range).&nbsp;.&nbsp;.&nbsp;.</p>
<p>If you haven&#8217;t done so already, now is the time to take a hard look at the design of your applications, determine what existing features — or better still, what potential and currently unimaginable demanding new features — are CPU-sensitive now or are likely to become so soon, and identify how those places could benefit from local and distributed parallelism. Now is also the time for you and your team to grok the requirements, pitfalls, styles, and idioms of hetero-parallel (e.g., GPGPU) and cloud programming (e.g., Amazon Web Services, Microsoft Azure, Google App Engine).</p>
</blockquote>
<p><br clear="all" />p.s.&nbsp;&mdash;&nbsp;I can&#8217;t believe that it&#8217;s been almost four years since I took a course with Herb out in Washington. That was some <a href="http://jeffmatherphotography.com/dispatches/2008/05/traveling-again/">hard-core learnin&#8217;</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://jeffmatherphotography.com/dispatches/2012/01/welcome-to-herb-sutters-jungle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>We Need a New Mindset</title>
		<link>http://jeffmatherphotography.com/dispatches/2012/01/we-need-a-new-mindset/</link>
		<comments>http://jeffmatherphotography.com/dispatches/2012/01/we-need-a-new-mindset/#comments</comments>
		<pubDate>Fri, 27 Jan 2012 18:53:19 +0000</pubDate>
		<dc:creator>Jeff Mather</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[Fodder for Techno-weenies]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://jeffmatherphotography.com/dispatches/?p=4331</guid>
		<description><![CDATA[Guy Steele drops a truth bomb. (From How to Think about Parallel Programming: Not!)]]></description>
			<content:encoded><![CDATA[<p>Guy Steele drops a truth bomb.</p>
<p><a href="http://jeffmatherphotography.com/dispatches/2012/01/we-need-a-new-mindset/steele/" rel="attachment wp-att-4332"><img src="http://jeffmatherphotography.com/dispatches_wp/wp-content/uploads/2012/01/steele-660x500.png" alt="" title="Guy Steele - We Need a New Mindset" width="640" height="484" class="alignleft size-large wp-image-4332" /></a></p>
<p>(From <a href="http://www.infoq.com/presentations/Thinking-Parallel-Programming">How to Think about Parallel Programming: Not!</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://jeffmatherphotography.com/dispatches/2012/01/we-need-a-new-mindset/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Thinking Differently about Software Optimization</title>
		<link>http://jeffmatherphotography.com/dispatches/2012/01/thinking-differently-about-software-optimization/</link>
		<comments>http://jeffmatherphotography.com/dispatches/2012/01/thinking-differently-about-software-optimization/#comments</comments>
		<pubDate>Thu, 26 Jan 2012 21:11:22 +0000</pubDate>
		<dc:creator>Jeff Mather</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[Fodder for Techno-weenies]]></category>
		<category><![CDATA[From the Yellow Notepad]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://jeffmatherphotography.com/dispatches/?p=4302</guid>
		<description><![CDATA[Yesterday morning while eating my &#8220;Free Wednesday Breakfast&#8221; chocolate croissant and fresh fruit with yoghurt, I watched an interview with John Nolan entitled &#8220;The State of Hardware Acceleration with GPUs/FPGAs, Parallel Algorithm Design.&#8221; In the spirit of giving back, I&#8217;m &#8230; <a href="http://jeffmatherphotography.com/dispatches/2012/01/thinking-differently-about-software-optimization/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Yesterday morning while eating my &#8220;Free Wednesday Breakfast&#8221; chocolate croissant and fresh fruit with yoghurt, I watched an interview with John Nolan entitled &#8220;<a href="http://www.infoq.com/interviews/nolan-hardware-acceleration">The State of Hardware Acceleration with GPUs/FPGAs, Parallel Algorithm Design</a>.&#8221; In the spirit of giving back, I&#8217;m posting a few notes.</p>
<ul>
<li>When optimizing code for GPU, FPGA, or CPU, definitely focus on pipelining and overall throughput, not just local optimizations.</li>
<li>There&#8217;s a trade-off between &#8220;faster&#8221; and &#8220;sooner.&#8221; It&#8217;s not always worth saving a few seconds (or even a few minutes) if the kernels take hours or days to compile. (Then again, sometimes it is.)</li>
<li>Try to reduce dependence on the language/compiler &#8220;stack&#8221; that removes inefficiencies. The optimizer does good work, but you can do things to help it. Think about the hardware or architecture format. It&#8217;s not a sin to reduce the amount of abstraction in the service of performance. Pay attention to things that affect processor pipelining and cache movement.</li>
<li>BTW, some languages and technologies exist to provide higher level programming that&#8217;s close to the hardware, but they&#8217;re proprietary, secret, or still in R&#038;D.</li>
<li>Use algorithmic optimization techniques. Step back and find the shortest-time computation.</li>
<li>Avoid using <tt>if</tt> statements. The <tt>goto</tt> construct is considered harmful, but <tt>if</tt> is basically the same thing. Instead think about state machines and polymorphism. There&#8217;s no branch-prediction penalty to pay, since the system &#8220;just is&#8221; in the state it&#8217;s supposed to be in. The logic is clearer, because there are no switches, making it easier to test, too.</li>
<li>Don&#8217;t always assume that floating-point values are necessary. Integers can often be creatively used and are far faster for math than double-precision numbers.</li>
<li>Of course, there&#8217;s a compromise between speedy/efficient and readable/maintainable.</li>
<li>Aim to structure programs as &#8220;symbolic intent.&#8221; Mathematical descriptions are bad ways of expressing programs. Think about functional programming models instead of procedural.</li>
</ul>
<p>If you want to know more, you should definitely watch the half-hour interview. And if your reaction was more along the lines of <i>&#8220;Yes, yes; that&#8217;s all true, and it&#8217;s how I design my image processing code,&#8221;</i> then I definitely hope you&#8217;ll consider <a href="http://jeffmatherphotography.com/dispatches/2012/01/now-hiring-image-processing-software-engineers/">applying for the GPU/multicore</a> engineering position we have open.</p>
]]></content:encoded>
			<wfw:commentRss>http://jeffmatherphotography.com/dispatches/2012/01/thinking-differently-about-software-optimization/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Now Hiring Image Processing Software Engineers</title>
		<link>http://jeffmatherphotography.com/dispatches/2012/01/now-hiring-image-processing-software-engineers/</link>
		<comments>http://jeffmatherphotography.com/dispatches/2012/01/now-hiring-image-processing-software-engineers/#comments</comments>
		<pubDate>Thu, 26 Jan 2012 20:26:54 +0000</pubDate>
		<dc:creator>Jeff Mather</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://jeffmatherphotography.com/dispatches/?p=4314</guid>
		<description><![CDATA[My group at work&#8212;the Image Processing and Geospatial Computing Group at MathWorks&#8212;is hiring a couple of software engineers. One of them could be you. We need someone with GPU and multicore programming skills. We&#8217;re looking for experience with CUDA, OpenCL, &#8230; <a href="http://jeffmatherphotography.com/dispatches/2012/01/now-hiring-image-processing-software-engineers/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>My group at work&mdash;the Image Processing and Geospatial Computing Group at MathWorks&mdash;is hiring a couple of software engineers. One of them could be you.</p>
<p>We need someone with <a href="http://www.mathworks.com/company/jobs/opportunities/image-processing-toolbox-gpu-and-multicore-cpu-9206">GPU and multicore programming skills</a>. We&#8217;re looking for experience with CUDA, OpenCL, OpenMP, Intel&#8217;s Threading Building Blocks, or similar technologies. If you&#8217;re into making algorithms run wicked fast, you should definitely apply.</p>
<p>The other position focuses on <a href="http://www.mathworks.com/company/jobs/opportunities/software-engineer-image-processing-and-code-generation-9207">image processing and code generation</a>. If you like implementing image processing algorithms and converting MATLAB code to C code, then this is the job for you.</p>
<p>I&#8217;ve been at <a href="http://www.mathworks.com/">The MathWorks</a> for almost fourteen years now, and it&#8217;s a really great company with an excellent corporate culture, competitive compensation, fantastic benefits, and lots of perks. Because everyone uses MATLAB and because we&#8217;ve made some very sensible business decisions over the last 28 years, it&#8217;s a very stable company to work for. (Did I mention that <a href="http://jeffmatherphotography.com/dispatches/2011/11/the-writing-is-in-the-wall/">we&#8217;re putting up our fourth building</a> in our Natick campus? And I think I also mentioned that the entire worldwide staff <a href="http://jeffmatherphotography.com/dispatches/2009/02/recent-holga-photos/">went on a cruise</a> a few years ago.)</p>
<p>If image processing isn&#8217;t your thing, we have <a href="http://www.mathworks.com/company/jobs/opportunities/search?posting_page=1&#038;">dozens of other positions open</a>. Everything from web development to legal department work. Human resources to customer service. Technical writing to application engineering and consulting. Marketing to program management. QE, sales, usability, and more software development positions than you can shake a stick at.</p>
<p>Come, help us accelerate the pace of engineering and science worldwide. And if you do apply, tell them I sent you.</p>
]]></content:encoded>
			<wfw:commentRss>http://jeffmatherphotography.com/dispatches/2012/01/now-hiring-image-processing-software-engineers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>QCon SF 2011 Software Engineering Conference Notes</title>
		<link>http://jeffmatherphotography.com/dispatches/2011/12/qcon-sf-2011-software-engineering-conference-notes/</link>
		<comments>http://jeffmatherphotography.com/dispatches/2011/12/qcon-sf-2011-software-engineering-conference-notes/#comments</comments>
		<pubDate>Thu, 29 Dec 2011 14:21:32 +0000</pubDate>
		<dc:creator>Jeff Mather</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[Fodder for Techno-weenies]]></category>
		<category><![CDATA[From the Yellow Notepad]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://jeffmatherphotography.com/dispatches/?p=4235</guid>
		<description><![CDATA[It&#8217;s sometimes possible to forget when reading all of the posts here about travel, diabetes, triathlon, and photography that they&#8217;re just a small part of my life. I have a job to which I devote a whole lot more time. &#8230; <a href="http://jeffmatherphotography.com/dispatches/2011/12/qcon-sf-2011-software-engineering-conference-notes/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s sometimes possible to forget when reading all of the posts here about <a href="http://jeffmatherphotography.com/dispatches/category/travel/">travel</a>, <a href="http://jeffmatherphotography.com/dispatches/category/diabetes/">diabetes</a>, <a href="http://jeffmatherphotography.com/dispatches/category/reluctant-triathlete/">triathlon</a>, and <a href="http://jeffmatherphotography.com/dispatches/category/photography/">photography</a> that they&#8217;re just a small part of my life. I have a job to which I devote a whole lot more time. I don&#8217;t talk about it much because (a) discussing what I&#8217;m working on putting into the <a href="http://www.mathworks.com/products/image/">Image Processing Toolbox</a> isn&#8217;t appropriate or allowed, and even if it were (b) talking shop probably isn&#8217;t that interesting to most of the people here. But&mdash;believe it or not&mdash;the majority of traffic to my site lands on the pages that are technical, so I don&#8217;t feel so bad about posting the random <a href="http://jeffmatherphotography.com/dispatches/category/fodder-for-techno-weenies/">&#8220;fodder for techno-weenies&#8221;</a> post. (It&#8217;s a term of endearment, I promise! :^)</p>
<p>This is another one of those posts. Every year between Christmas and New Years Day, I try to use the quiet week to get stuff done and tie up loose ends. Last year, <a href="http://jeffmatherphotography.com/dispatches/2010/12/requirements-again/">I cleared out a bunch of notes</a>. This year, I&#8217;m looking at presentations and slides from the <a href="http://qconsf.com/sf2011/">QCon SF 2011 conference</a> (<a href="http://www.infoq.com/articles/QCon-San-Francisco-2011">wrap-up</a>). Its focus on software architecture and project management is about 75% of my job, so many of the presentations seemed tailor-made for me. Here&#8217;s some of what I learned.</p>
<p><br clear="all" /><a href="http://qconsf.com/dl/qcon-sanfran-2011/slides/ErikDoernenburg_SoftwareQualityYouKnowItWhenYouSeeIt.pdf">Erik Doernenburg. &#8220;Software Quality: You Know It When You See It&#8221;</a> has a really good slide deck that got me thinking about some projects I might want to set up. It&#8217;s full of practical, usable suggestions:</p>
<ul>
<li>View the code at the <a href="http://97things.oreilly.com/wiki/index.php/Get_the_1000ft_view">1,000 view</a>, rather than ground-level or 30,000 feet.</li>
<li>Look at the test-to-code ratio, not just code coverage.</li>
<li>Graph the change of metrics between versions and revisions, compare across different parts of the code, and look at them relative to industry standards.</li>
<li><a href="http://erik.doernenburg.com/2008/11/how-toxic-is-your-code/">Measure the &#8220;toxicity&#8221; of code</a> by rolling up various quality metrics about a bunch of modules into stacked bar charts.</li>
</ul>
<p>We should pose these questions during design and code reviews:</p>
<ul>
<li>Is the software/change of value to its users?</li>
<li>How appropriate is the design?</li>
<li>How easy is the code/design to understand and extend?</li>
<li>How maintainable is the software?</li>
</ul>
<p>It was full of some really great links to things like <a href="http://erik.doernenburg.com/2010/05/metrics-tree-maps/">Metrics tree maps</a> (a.k.a., pretty heatmaps for source code) as well as a few tools: <a href="http://www.campwoodsw.com/sourcemonitor.html">SourceMonitor</a>, <a href="http://loose.upt.ro/reengineering/research/iplasma">iPlasma</a>, and <a href="http://erik.doernenburg.com/2009/07/moose-mse-for-java-and-cs/">using Moose to visualize quality</a>.</p>
<p><br clear="all" /><a href="http://qconsf.com/dl/qcon-sanfran-2011/slides/JoshuaKerievsky_RefactoringToPatterns.pdf">Joshua Kerievsky. &#8220;Refactoring to Patterns&#8221;</a> &mdash; some notes:</p>
<ul>
<li>Refactoring is like algebra&#8217;s equivalence-preserving manipulations. &#8220;Design patterns are the word problems of the programming world; refactoring is its algebra.&#8221;</li>
<li>Understanding the refactoring thought process is more important than remembering individual techniques or tool support.</li>
<li>Code smells have multiple refactoring options and often benefit from composite refactorings.</li>
<li>Look for automatable refactorings first. Consider changing the client of smelly code before the smelly code itself.</li>
</ul>
<p><br clear="all" /><a href="http://qconsf.com/dl/qcon-sanfran-2011/slides/GuilhermeSilveira_HowToStopWritingNextYearsUnsustainablePieceOfCode.pdf">Guilherme Silveira. &#8220;How To Stop Writing Next Year&#8217;s Unsustainable Piece Of Code&#8221;</a> was pithy and thought-provoking.</p>
<ul>
<li>There is no value for architecture or design without implementation. That&#8217;s just interpretation of the software.</li>
<li>&#8220;New language. New mindset. new idiomatic usage. Same mistakes.&#8221;</li>
<li>Complexity and composition are natural and good, but if they&#8217;re invisible, they&#8217;re evil.</li>
<li>Start with a mess and refactor right away. Starting &#8220;right&#8221; is hard (and <a href="http://jeffmatherphotography.com/dispatches/2008/09/all-good-writing-is-rewriting/">misguided thinking</a>). Refactor for <i>better</i>, not just prettier.</li>
<li>Make complexity easier to understand and see.</li>
<li>Hiding complexity in concision hurts testability, since no one knows the complexity is there. Furthermore, if it&#8217;s hard to test, it&#8217;s also hard to use correctly.</li>
<li>&#8220;Model rules. Do not model models.&#8221;</li>
</ul>
<p><br clear="all" /><a href="http://qconsf.com/dl/qcon-sanfran-2011/slides/MichaelFeathers_SoftwareNaturalismEmbracingTheRealBehindTheIdeal.pdf">Michael Feathers. &#8220;Software Naturalism: Embracing The Real Behind The Ideal&#8221;</a> is a presentation that I would like to see/hear, since the slides seemed full of information but weren&#8217;t self-explanatory. Here are two things I could glean: 80% of software defects in large projects were in 20% of the files. In general, the more churn in a file, the more complex it tends to be.</p>
<p><br clear="all" /><a href="http://www.infoq.com/presentations/Panel-Objects-On-Trial">Panel: &#8220;Objects on Trial&#8221;</a> was perhaps the most unusual presentation, since it was a mock-trial. I use objects all the time&nbsp;.&nbsp;.&nbsp;. some of them are good&nbsp;.&nbsp;.&nbsp;. some <a href="http://jeffmatherphotography.com/dispatches/2008/11/surveying-quality-in-object-oriented-design/">demonstrably so</a>. Even so, I never latched onto the idea of object-oriented (OO) design versus objects as types. The four panelists, in one way or another, basically said, &#8220;That&#8217;s the problem.&#8221;</p>
<p>One of the panelists drew an extended analogy between the space program and OO. The space shuttle (which we all love) was fixated on reuse but basically was a waste of heavy lifting; people don&#8217;t reuse the right stuff. In software, object reuse is largely accomplished by cut-and-paste copying of boilerplate code that does close to what you want. Of course, the panelist acknowledged that we do reuse the ideas in OO via design patterns, and no one seems to have much of a problem with that. Ironically, having a rich pattern language means that software engineers are in a better place than ever before to use objects correctly.</p>
<p>A key problem with our approach to objects is that we&#8217;ve failed (generally in software engineering) to handle complexity well, which was supposed to be the point of OO design. A conflation of beauty and OO design makes things worse. Internally, software is ugly, and beauty shouldn&#8217;t be a goal. Making a fetish of beauty makes code inflexible because people don&#8217;t want to extend the beautiful thing that works.</p>
<p>For other panelists, objects weren&#8217;t the problem at all. For them it&#8217;s static typing in &#8220;OO languages,&#8221; such as C++, Java, and C#. We&#8217;re at a place now where all of the good things about OO have been lost in an attempt to make OO languages as fast as C. This runs counter to the goal of having &#8220;ordinary,&#8221; understandable code. Generic programming using strongly typed (possibly template heavy) languages just makes everything complicated.</p>
<p>For me, it&#8217;s moot. C++ is what I use, and I don&#8217;t have a large proprietary object system that I can tap into for reuse. I&#8217;m in the camp that uses C++ objects to generate new types for data hiding and aggregation, as well as (to a lesser extent) reuse. But some of these types are generic, template classes that are hard to understand. I plead &#8220;no contest.&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://jeffmatherphotography.com/dispatches/2011/12/qcon-sf-2011-software-engineering-conference-notes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Things You Should Be Reading &#8211; August Edition</title>
		<link>http://jeffmatherphotography.com/dispatches/2011/09/things-you-should-be-reading-august-edition/</link>
		<comments>http://jeffmatherphotography.com/dispatches/2011/09/things-you-should-be-reading-august-edition/#comments</comments>
		<pubDate>Tue, 06 Sep 2011 15:14:46 +0000</pubDate>
		<dc:creator>Jeff Mather</dc:creator>
				<category><![CDATA[Diabetes]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Health Care]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[Worthy Feeds]]></category>

		<guid isPermaLink="false">http://jeffmatherphotography.com/dispatches/?p=2577</guid>
		<description><![CDATA[Hey everybody, I&#8217;m about a week late with the August edition of &#8220;Things You Should Be Reading.&#8221; There&#8217;s a little bit of something for everybody here. Brilliantly smart-ass responses to completely well-meaning signs (via John Nack) It’s been a very &#8230; <a href="http://jeffmatherphotography.com/dispatches/2011/09/things-you-should-be-reading-august-edition/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Hey everybody, I&#8217;m about a week late with the August edition of &#8220;Things You Should Be Reading.&#8221;  There&#8217;s a little bit of something for everybody here.</p>
<ul>
<li><a href="http://www.happyplace.com/4286/brilliantly-sarcastic-responses-to-completely-well-meaning-signs">Brilliantly smart-ass responses to completely well-meaning signs</a> (via <a href="http://blogs.adobe.com/jnack/2011/09/typeillustration-ridiculous-sign-pranks.html">John Nack</a>)</li>
<li><a href="http://thebloggess.com/2011/08/its-been-a-very-long-two-weeks-get-prepared/">It’s been a very long two weeks. Get prepared.</a> &mdash; A hilarious gem from the Bloggess that includes (what&#8217;s this?) Nathan Fillion and twine.</li>
<li><a href="http://egmnblog.wordpress.com/2011/08/12/what-fuels-the-athlete-with-type-1-diabetes/">What Fuels the Athlete With Type 1 Diabetes?</a> &mdash; A really great article from medical journalist Miriam Tucker.  Buy me a Diet Coke and I&#8217;ll tell you my own story.</li>
<li><a href="http://blogs.fasterskier.com/krisfreeman/2011/08/15/new-zealand/">New Zealand</a> &mdash; Kris Freeman is still taking names and kicking ass.</li>
<li><a href="http://tobesugarfree.com/2011/08/18/an-absense-of-advocacy/">An Absence of Advocacy</a> &mdash; Chris thinks he&#8217;s not a good diabetes advocate. Sometimes being present is enough, man.  Oh, and having a kick-ass podcast certainly bolsters one&#8217;s D cred.</li>
<li><a href="http://fuckyeahdiabeticcat.tumblr.com/">Fuck Yeah Diabetic Cat</a> &mdash; .&nbsp;.&nbsp;.&nbsp;I mean even <i>this</i> is advocacy, Chris.</li>
<li><a href="http://computinged.wordpress.com/2011/08/17/eric-mazurs-keynote-at-icer-2011-observing-demos-hurts-learning-and-confusion-is-a-sign-of-understanding/">Observing demos hurts learning, and confusion is a sign of understanding</a> &mdash; Let this article blow your mind. (via <a href="http://software-carpentry.org/2011/08/demos-reinforce-errors-and-confusion-is-good/">Software Carpentry</a>)</li>
<li><a href="http://blog.joshherigon.com/post/9038748130/jama-the-hazards-of-evidence-based-medicine-assessing">JAMA: The Hazards of Evidence Based Medicine</a> &mdash; As with everything it&#8217;s about what and how you measure.</li>
<li> <a href="http://www.fastcompany.com/1772484/want-to-keep-your-best-employees-its-not-about-the-money">Want To Keep (And Motivate) Your Best Employees? It&#8217;s Not About The Money </a> &mdash; Relationship-driven leadership.</li>
<li><a href="http://www.diagnosticimaging.com/radblog/display/article/113619/1930251">Radiology Wife: How To Read A Chest Radiograph</a> &mdash; This is pretty much the approach I take when looking at DICOM files our customers send us.</li>
<li><a href="http://www.construx.com/Page.aspx?cid=3229">Nine Deadly Sins of Project Planning</a> &mdash; The worst? &#8220;Not Learning from Past Planning Sins&#8221;</li>
<li><a href="http://blogs.adobe.com/jnack/2011/08/rt-scientific-photography-escher-in-water-eggs-exploding-more.html">Scientific photography: Escher in water, eggs exploding, &amp; more</a> &mdash; Oooh! <a href="http://www.urbandictionary.com/define.php?term=shiny">Shiny</a>!</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://jeffmatherphotography.com/dispatches/2011/09/things-you-should-be-reading-august-edition/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Things You Should Be Reading</title>
		<link>http://jeffmatherphotography.com/dispatches/2011/08/things-you-should-be-reading/</link>
		<comments>http://jeffmatherphotography.com/dispatches/2011/08/things-you-should-be-reading/#comments</comments>
		<pubDate>Fri, 12 Aug 2011 14:21:17 +0000</pubDate>
		<dc:creator>Jeff Mather</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[Cycling]]></category>
		<category><![CDATA[Data-betes]]></category>
		<category><![CDATA[Diabetes]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[Worthy Feeds]]></category>

		<guid isPermaLink="false">http://jeffmatherphotography.com/dispatches/?p=2478</guid>
		<description><![CDATA[Hey, everybody. It&#8217;s that time again. The time to clean out a bunch of links that I&#8217;ve read and share them with you because I think you might find them interesting. Ultramarathon &#8212; The always hilarious author of The Oatmeal &#8230; <a href="http://jeffmatherphotography.com/dispatches/2011/08/things-you-should-be-reading/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Hey, everybody.  It&#8217;s that time again.  The time to clean out a bunch of links that I&#8217;ve read and share them with you because I think <i>you</i> might find them interesting.</p>
<ul>
<li><a href="http://theoatmeal.com/blog/ultramarathon" target="_blank">Ultramarathon</a> &mdash; The always hilarious author of The Oatmeal describes his long-ass run.</li>
<li><a href="http://techcrunch.com/2011/08/02/inbox-10000/" target="_blank">Inbox 10,000</a> &mdash; E-mail sucks&nbsp;.&nbsp;.&nbsp;. and is mostly worthless.  Am I right?</li>
<li><a href="http://fuckyeahcycling.tumblr.com/post/8812432952" target="_blank">The Joy of Cycling</a> &mdash; A poster.</li>
<li><a href="http://www.newyorker.com/reporting/2011/08/08/110808fa_fact_schmidle?currentPage=all" target="_blank">Getting Bin Laden</a> &mdash; What happened that night in Abbottabad</li>
<li><a href="http://www.scottberkun.com/blog/2011/the-unavoidable-power-of-compromise/" target="_blank">The unavoidable power of compromise</a> &mdash; The issue of raising the debt ceiling may no longer be a hot topic, but Scott Berkun&#8217;s take on the value of compromise is evergreen.</li>
<li><a href="http://ignorethecode.net/blog/2011/08/09/the_growing_user_and_the_perennial_beginner/" target="_blank">The Growing User and the Perennial Beginner</a> &mdash; A mental model for anyone who creates software interfaces for people of different competency levels.</li>
<li><a href="http://www.irunoninsulin.com/?p=3349" target="_blank">Yeah. We know.</a> &mdash; You hate needles.  We do, too.</li>
<li>A pair of articles from Victoria Cumbow.  In &#8220;<a href="http://victoriacumbow.com/2011/08/03/its-political-and-its-personal/" target="_blank">It&#8217;s Political, and It&#8217;s Personal</a>&#8221; she hopes you&#8217;ll encourage President Obama to attend the UN summit on noncommunicable diseases; and &#8220;<a href="http://victoriacumbow.com/2011/08/08/a-gentle-reminder/" target="_blank">A Gentle Reminder</a>&#8221; reminds us why we need to advocate for better education and attitudes for health care professionals.  (This kind of experience is why I stopped answering the phone when my insurance company&#8217;s nurses called.  Bad me.)</li>
<li><a href="http://www.idf.org/O_is_for_OUTRAGE" target="_blank">O Is For Outrage</a> &mdash; Go sign the petition to President Obama, please.</li>
<li>Kelly Kunik says, &#8220;<a href="http://diabetesaliciousness.blogspot.com/2011/08/im-not-afraid-of-my-pump-being-hacked.html" target="_blank">I&#8217;m Not Afraid Of My Pump Being Hacked</a>, Because Like You, I Am The Only User On My Personal Pump Network.&#8221;</li>
<li><a href="http://www.fastcompany.com/1771495/five-ways-to-solve-the-diabetes-crisis-with-data-driven-design" target="_blank">Five Ways To Solve The Diabetes Crisis With Data-Driven Design</a> &mdash; Just FYI, <i>Fast Company</i>, &#8220;Solve&#8221; might be over-promising just a wee bit.</li>
<li><a href="http://www.imedicalapps.com/2011/08/sanofiaventis-data-design-diabetes-challenge-announces-semifinalists/" target="_blank">Semifinalists in &#8220;Data Design Diabetes Challenge&#8221; tackle a major health issue in ingenious ways</a> &mdash; The iMedicalApps people have the tone a little better.</li>
<li><a href="http://ignorethecode.net/blog/2011/08/11/its_broken/" target="_blank">It&#8217;s Broken</a> &mdash; By &#8220;It&#8221; many of us mean &#8220;the entire system around software patents.&#8221;</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://jeffmatherphotography.com/dispatches/2011/08/things-you-should-be-reading/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>App Update</title>
		<link>http://jeffmatherphotography.com/dispatches/2011/04/app-update/</link>
		<comments>http://jeffmatherphotography.com/dispatches/2011/04/app-update/#comments</comments>
		<pubDate>Sat, 02 Apr 2011 03:41:22 +0000</pubDate>
		<dc:creator>Jeff Mather</dc:creator>
				<category><![CDATA[CGM]]></category>
		<category><![CDATA[Data-betes]]></category>
		<category><![CDATA[Diabetes]]></category>
		<category><![CDATA[Fodder for Techno-weenies]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://jeffmatherphotography.com/dispatches/?p=1842</guid>
		<description><![CDATA[Today a bunch of my online peeps were in California visiting Medtronic. I wish I&#8217;d been invited to go to, but that was not the case. Had I been there, I would have squealed like a little schoolgirl at the &#8230; <a href="http://jeffmatherphotography.com/dispatches/2011/04/app-update/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Today a bunch of my online peeps were in California visiting Medtronic.  I wish I&#8217;d been invited to go to, but that was not the case.  Had I been there, I would have squealed like a little schoolgirl at the pre-announcement that they&#8217;re rolling out support for uploading and using CareLink on a Mac next week.</p>
<p>Not only is that great for me when working with my own data, it will make developing my app easier.  People may still need to take the extra step of downloading a CSV file containing their data, but at least they&#8217;ll be able to do it on their platform.  Not perfect, but better.</p>
<p>In an ideal world &mdash; the one that I would have advocated for at pump/CGM HQ &mdash; third-party app developers (like me) would be able to ask the online CareLink database for a person&#8217;s diabetes data via an application programming interface (API).  Mobile app developers could then hold on to that data for offline or mobile use without ever needing to talk directly to the medical devices themselves.  Frankly, writing code to connect directly to a life-preserving medical device is quite risky and something I would like to avoid; it&#8217;s also the kind of thing that requires rigorous, time-consuming, expensive FDA approval.  Not very appealing when all I want to be is a data consumer.</p>
<p>I&#8217;m hoping that Medtronic provides a mechanism to open up this data soon, because I&#8217;m getting close to being able to benefit from it.  And when I say &#8220;this data,&#8221; I mean &#8220;our data&#8221; because it really <i>is</i> ours.  We&#8217;re the ones who generated the data through our self-managment decisions, and we&#8217;re the ones who will benefit the most from using that data to make decisions.  All I&#8217;m really asking for is a way to log in to CareLink without using a web browser and to retrieve data securely.</p>
<p>I&#8217;ve been working on my pump+CGM data visualizer a lot recently &mdash; most evenings in fact.  On my Mac, I can extract events from a comma-separated value (CSV) file generated on the CareLink website, and I can pick out &#8220;interesting&#8221; events that are relevant for self-management.  Now I&#8217;m working on being able to store those interesting events in a form that I can send to my iPod.  (Then there are the tasks related to visualizing the data, but I&#8217;m starting small.)</p>
<p>It&#8217;s taking me longer than I expected to build this application.  Objective-C isn&#8217;t hard, but learning the ins and outs of any new framework library is always a bit involved.  (Turns out I&#8217;ve been using a lot more C++ than I had expected&nbsp;.&nbsp;.&nbsp;. not that there&#8217;s anything wrong with that.)  And I realized that I actually need to build two applications: one part that sits on a &#8220;traditional computer&#8221; that can talk to CareLink and the other that visualizes the data on an iPhone, iPod, iPad.</p>
<p>Here&#8217;s a little example of the raw data that I will eventually use to generate graphs and an annotatable logbook:</p>
<pre style="font-size:85%">3/30/11|16:20:00|GlucoseSensorData|AMOUNT=106, ISIG=10.2
3/30/11|16:25:00|GlucoseSensorData|AMOUNT=98, ISIG=9.71
3/30/11|16:30:00|GlucoseSensorData|AMOUNT=98, ISIG=10.59
3/30/11|16:35:00|GlucoseSensorData|AMOUNT=100, ISIG=10.66
3/30/11|16:40:00|GlucoseSensorData|AMOUNT=102, ISIG=10.94
3/30/11|16:45:00|GlucoseSensorData|AMOUNT=102, ISIG=10.6
3/30/11|16:50:00|GlucoseSensorData|AMOUNT=102, ISIG=10.56
. . .
3/30/11|18:14:01|BolusWizardBolusEstimate|BG_INPUT=195, BG_UNITS=mg dl,
  CARB_INPUT=0, CARB_UNITS=grams, CARB_RATIO=8, INSULIN_SENSITIVITY=50,
  BG_TARGET_LOW=110, BG_TARGET_HIGH=110, BOLUS_ESTIMATE=1.7,
  CORRECTION_ESTIMATE=1.7, FOOD_ESTIMATE=0, UNABSORBED_INSULIN_TOTAL=0,
  UNABSORBED_INSULIN_COUNT=2, ACTION_REQUESTOR=pump
3/30/11|18:14:01|BolusNormal|AMOUNT=1.7, CONCENTRATION=null,
  PROGRAMMED_AMOUNT=1.7</pre>
]]></content:encoded>
			<wfw:commentRss>http://jeffmatherphotography.com/dispatches/2011/04/app-update/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Seriously Now. Let&#8217;s Start Coding.</title>
		<link>http://jeffmatherphotography.com/dispatches/2011/03/seriously-now-lets-start-coding/</link>
		<comments>http://jeffmatherphotography.com/dispatches/2011/03/seriously-now-lets-start-coding/#comments</comments>
		<pubDate>Thu, 03 Mar 2011 01:57:06 +0000</pubDate>
		<dc:creator>Jeff Mather</dc:creator>
				<category><![CDATA[Data-betes]]></category>
		<category><![CDATA[Life Lessons]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://jeffmatherphotography.com/dispatches/?p=1775</guid>
		<description><![CDATA[Okay, I&#8217;ve picked up a smattering of Objective-C, learned about a few of the frameworks, and sketched some of the interface. I&#8217;ve contemplated the data model, and I&#8217;ve worked out a few of the interactions. Isn&#8217;t it about time to &#8230; <a href="http://jeffmatherphotography.com/dispatches/2011/03/seriously-now-lets-start-coding/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Okay, I&#8217;ve picked up a smattering of Objective-C, learned about a few of the frameworks, and sketched some of the interface.  I&#8217;ve contemplated the data model, and I&#8217;ve worked out a few of the interactions.</p>
<p>Isn&#8217;t it about time to put aside my &#8220;iPhone developer impostor&#8221; feelings and just start coding?  Yes it is.  I&#8217;m not going to build this app unless I start writing it.</p>
<p>ABC: Always Be Coding.</p>
]]></content:encoded>
			<wfw:commentRss>http://jeffmatherphotography.com/dispatches/2011/03/seriously-now-lets-start-coding/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ready to Start Coding</title>
		<link>http://jeffmatherphotography.com/dispatches/2011/02/ready-to-start-coding/</link>
		<comments>http://jeffmatherphotography.com/dispatches/2011/02/ready-to-start-coding/#comments</comments>
		<pubDate>Sun, 27 Feb 2011 03:53:34 +0000</pubDate>
		<dc:creator>Jeff Mather</dc:creator>
				<category><![CDATA[CGM]]></category>
		<category><![CDATA[Computing]]></category>
		<category><![CDATA[Data-betes]]></category>
		<category><![CDATA[Diabetes]]></category>
		<category><![CDATA[Fodder for Techno-weenies]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://jeffmatherphotography.com/dispatches/?p=1770</guid>
		<description><![CDATA[It&#8217;s been a week since I announced that I was going to write an iPhone app. I&#8217;m still excited about it, even though someone told me that Medtronic is working on their own version of the same thing I proposed &#8230; <a href="http://jeffmatherphotography.com/dispatches/2011/02/ready-to-start-coding/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been a week since I announced that I was going to write an iPhone app.  I&#8217;m still excited about it, even though someone told me that Medtronic is working on their own version of the same thing I proposed &mdash; a working prototype, she said.  Well, I for one am glad that they seem some value in having a mobile app, but I plan to keep working on mine.  Competition is good.  We&#8217;ll see who can get their app out there first: the newbie picking up iPhone development skills or the large medical company who is going through FDA approval.</p>
<p>Since last Saturday I&#8217;ve learned a lot.  I&#8217;ve picked up the syntax of Objective-C, which is causing this C++ programmer to &#8220;think differently.&#8221;  I like what I&#8217;ve seen from it so far, but we&#8217;ll see what I think after building something real.  I&#8217;ve made a couple &#8220;Hello, World!&#8221; applications, just enough to get a few basic skills using Xcode and Interface Builder.</p>
<p>Now the hard work begins.</p>
<p>I&#8217;ve made a list of requirements for the first couple of (internal) versions of the app; so I know what needs I plan to satisfy.  I&#8217;ve picked <a href="http://www.switchonthecode.com/tutorials/using-core-plot-in-an-iphone-application">an external library</a> to plot the CGM data.  And I&#8217;ve started working on the functional design, sketching a few different views that people will use to interact with their data.  (I usually hate graphical user interface design, but something about the UIKit components seem to be amplifying my scanty abilities with interaction design.)  I still have to figure out the data model &mdash; that is to say, the architecture &mdash; but I think that should follow from the views I create, which of course is supposed to visualize items in the pump/CGM data model.</p>
<p>Tomorrow I&#8217;ll try to put a few components together.  Stay tuned!</p>
]]></content:encoded>
			<wfw:commentRss>http://jeffmatherphotography.com/dispatches/2011/02/ready-to-start-coding/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

