<?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>My Other Pants &#187; indyalt.net</title>
	<atom:link href="http://myotherpants.com/tag/indyaltnet/feed/" rel="self" type="application/rss+xml" />
	<link>http://myotherpants.com</link>
	<description>I left it in my other pants</description>
	<lastBuildDate>Tue, 24 Jan 2012 18:11:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>I&#8217;m using the wrong language.</title>
		<link>http://myotherpants.com/2010/12/im-using-the-wrong-language-2/</link>
		<comments>http://myotherpants.com/2010/12/im-using-the-wrong-language-2/#comments</comments>
		<pubDate>Tue, 14 Dec 2010 01:00:39 +0000</pubDate>
		<dc:creator>Ball</dc:creator>
				<category><![CDATA[work safe]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[indyalt.net]]></category>
		<category><![CDATA[presentations]]></category>

		<guid isPermaLink="false">http://myotherpants.com/?p=225</guid>
		<description><![CDATA[A few years ago, we did some embedded control testing that got me seriously thinking about language. The system was specked out using signal flow diagrams, the kind I remember from digital signal processing in college. The code was white-boxed C poking and prodding at a lot of global variables. Our test tool let us [...]]]></description>
			<content:encoded><![CDATA[<p>A few years ago, we did some embedded control testing that got me seriously thinking about language.    The system was specked out using signal flow diagrams, the kind I remember from digital signal processing in college.  The code was white-boxed C poking and prodding at a lot of global variables.  Our test tool let us define values in terms of other values, invoke the C code, then assert some values with our expected.  Think of this as like using excel to model signal flow.</p>
<p>Here&#8217;s an example of a signal flow diagram from <a href="http://DspRelated.com">DSPRelated.com</a><br />
<img src="http://www.dsprelated.com/josimages/filters/img530.png" alt="Signal Flow Diagram" /></p>
<p>The signal flow diagrams used a lot of sub components, some that were deeply nested.  Our test tool doesn&#8217;t have any abstraction; no functions, no macros, and no components.  This lead to repetition in our test code.  If I had three calls to a sub block, I would copy/paste/rename upwards of 60 lines of code for each block.  Code reviews were important and kind of intense.  We couldn&#8217;t stand the tool, but the tooling surrounding it was worth the hassle.  We had code coverage, logging reports, and most importantly we had decision coverage.</p>
<p>But it still felt like I was programming in the wrong language.  At that time in my life I tended to think, &#8220;I should be writing in Ruby.&#8221;  But even that&#8217;s only part of the story.</p>
<p>What I wanted to do was model the diagrams more directly.  I wanted to define a component, wire five of them together, define my input ranges, and make some assertions.  I wanted my test code to feel like you were looking at a diagram.  This would make the code easier to maintain, reduce duplication, and make it easier to review.</p>
<p>I sat down with Ruby&#8217;s mutable syntax and tried to whip up a model of a few representative diagrams.  I couldn&#8217;t make it perfect, but I could hit the 80% mark and leave enough &#8220;bare metal&#8221; to work around for the last 20%.  All it did was spit out the code I would have written by hand, but it was much easier to write in my little language.  The best part is all our existing tools worked just the same.</p>
<pre name="code" class="ruby">
test 10, "4 step floating average" do
  inputs :in =&gt; [0.0, 10.0, 13.0]
  inouts :delay_1 =&gt; [0.0, 10.0, 13.0],
         :delay_2 =&gt; [0.0, 10.0, 13.0],
         :delay_3 =&gt; [0.0, 10.0, 13.0]
  delay_1 = instance :delay, :delay_1_expected,
         :input =&gt; :in
  delay_2 = instance :delay, :delay_2_expected,
         :input =&gt; delay_1.output
  delay_3 = instance :delay, :delay_3_expected,
         :input =&gt; delay_2.output
  double :expected, "(in + delay_1'IN + delay_2'IN + delay_3'IN) / 4"
  assert :delay_1 , delay_1.output
  assert :delay_2 , delay_2.output
  assert :delay_3 , delay_3.output
  assert :answer, :expected
end
</pre>
<p>I am happy with the solution.  Not because I get to write in Ruby, but because I can write the code that fits the solution.  That&#8217;s when I started to really understand the power of language to clearly express the problem and solution at hand.</p>
<p>I&#8217;m presenting to IndyAlt.NET on Domain Specific Languages this week.  This isn&#8217;t just programming language wankery, though I&#8217;ll admit that part is fun.  It is about using the right tool for the job.  I&#8217;m currently writing an application in C#.  But the majority of my code should only superficially be called C#.  I should bend C# to express the domain and let me program the solution, not the implementation.</p>
]]></content:encoded>
			<wfw:commentRss>http://myotherpants.com/2010/12/im-using-the-wrong-language-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>I just had to play</title>
		<link>http://myotherpants.com/2009/04/i-just-had-to-play/</link>
		<comments>http://myotherpants.com/2009/04/i-just-had-to-play/#comments</comments>
		<pubDate>Mon, 27 Apr 2009 02:03:20 +0000</pubDate>
		<dc:creator>Ball</dc:creator>
				<category><![CDATA[work safe]]></category>
		<category><![CDATA[indyalt.net]]></category>

		<guid isPermaLink="false">http://myotherpants.com/?p=54</guid>
		<description><![CDATA[I&#8217;ve been working on a presentation and some other stuff all month, but I had to work on a T-Shirt idea for IndyALT.NET.  It&#8217;s been nagging at me for a while.  And it was fun!  It has been far too long since I pushed pixels!]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been working on a presentation and some other stuff all month, but I had to work on a T-Shirt idea for <a href="http://indyalt.net">IndyALT.NET</a>.  It&#8217;s been nagging at me for a while.  And it was fun!  It has been far too long since I pushed pixels!</p>
<p><img class="size-full wp-image-55" title="indyaltnetflags" src="http://myotherpants.com/wp-content/uploads/2009/04/indyaltnetflags.png" alt="Red-Green-Refactor" width="763" height="467" /></p>
]]></content:encoded>
			<wfw:commentRss>http://myotherpants.com/2009/04/i-just-had-to-play/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FSharp Presentation Notes!</title>
		<link>http://myotherpants.com/2008/12/fsharp-presentation-notes/</link>
		<comments>http://myotherpants.com/2008/12/fsharp-presentation-notes/#comments</comments>
		<pubDate>Fri, 19 Dec 2008 02:33:50 +0000</pubDate>
		<dc:creator>Ball</dc:creator>
				<category><![CDATA[work safe]]></category>
		<category><![CDATA[FSharp]]></category>
		<category><![CDATA[indyalt.net]]></category>
		<category><![CDATA[presentations]]></category>

		<guid isPermaLink="false">http://myotherpants.com/?p=26</guid>
		<description><![CDATA[I had a great time giving my talk tonight.  Thanks to the guys at IndyAlt.NET for listening to my prattling.  It&#8217;s been fun having an excuse to dig into FSharp again.  So, let the linking begin. Die Roller Source Code My FSharp Examples Slide Deck More information on FSharp msdn.microsoft.com/fsharp The official site VS Shell [...]]]></description>
			<content:encoded><![CDATA[<p>I had a great time giving my talk tonight.  Thanks to the guys at <a title="Indy alt dot net" href="http://indyalt.net">IndyAlt.NET</a> for listening to my prattling.  It&#8217;s been fun having an excuse to dig into FSharp again.  So, let the linking begin.</p>
<p><a href="http://myotherpants.com/wp-content/uploads/2008/12/dieroller20.zip">Die Roller Source Code</a></p>
<p><a href="http://myotherpants.com/wp-content/uploads/2008/12/fsharp-examples.zip">My FSharp Examples</a></p>
<p><a href="http://myotherpants.com/wp-content/uploads/2008/12/fsharppresentation.pdf">Slide Deck</a></p>
<p>More information on FSharp</p>
<p><a title="FSharp Resource Center" href="http://msdn.microsoft.com/fsharp">msdn.microsoft.com/fsharp</a> The official site<a title="FSharp Resource Center" href="http://msdn.microsoft.com/fsharp"><br />
</a></p>
<p><a title="Visual Studio Shell" href="http://msdn.microsoft.com/en-us/vsx2008/products/bb933751.aspx">VS Shell</a> Where you can install FSharp<a title="Visual Studio Shell" href="http://msdn.microsoft.com/en-us/vsx2008/products/bb933751.aspx"><br />
</a></p>
<p><a title="Don Syme's Blog" href="http://blogs.msdn.com/dsyme/">Don Syme&#8217;s Blog</a></p>
<p><a title="Expert FSharp" href="http://www.expert-fsharp.com/">Expert FSharp</a></p>
<p><a title="Hub FS" href="http://cs.hubfs.net/blogs/default.aspx">HubFS</a> the FSharp Community and it&#8217;s <a title="HubFS Forums" href="http://cs.hubfs.net/forums/default.aspx">Forums</a></p>
<p>Other Great Blogs</p>
<p><a title="Matthew Podwysocki" href="http://weblogs.asp.net/podwysocki/default.aspx">Matthew Podwysocki<br />
</a></p>
<p><a title="Lucas Bolognese" href="http://blogs.msdn.com/lucabol/">Lucas Bolognese<br />
</a></p>
<p><a title="Luis Diego Fallas" href="http://langexplr.blogspot.com/">Luis Diego Fallas</a></p>
]]></content:encoded>
			<wfw:commentRss>http://myotherpants.com/2008/12/fsharp-presentation-notes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I&#8217;m Presentable!</title>
		<link>http://myotherpants.com/2008/12/im-presentable/</link>
		<comments>http://myotherpants.com/2008/12/im-presentable/#comments</comments>
		<pubDate>Wed, 03 Dec 2008 13:57:46 +0000</pubDate>
		<dc:creator>Ball</dc:creator>
				<category><![CDATA[work safe]]></category>
		<category><![CDATA[FSharp]]></category>
		<category><![CDATA[indyalt.net]]></category>
		<category><![CDATA[presentations]]></category>

		<guid isPermaLink="false">http://myotherpants.com/?p=20</guid>
		<description><![CDATA[I&#8217;ll be presenting a talk on FSharp at IndyAlt.net on the 18th of December. If you&#8217;ve seen my talk at SEP, This will be an updated version.  I&#8217;m re-ordering slides, adding new shout-outs to Eddie Izzard, expanding my example code, and slowing the explanation of my code.  Also, I&#8217;m going to use fsUnit to ease into the [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ll be presenting a talk on <a title="FSharp Resource Center" href="http://msdn.microsoft.com/fsharp">FSharp</a> at <a title="IndyAlt.NET" href="http://indyalt.net">IndyAlt.net</a> on the 18th of December.</p>
<p>If you&#8217;ve seen my talk at <a title="SEP" href="http://sep.com">SEP</a>, This will be an updated version.  I&#8217;m re-ordering slides, adding new shout-outs to Eddie Izzard, expanding my example code, and slowing the explanation of my code.  Also, I&#8217;m going to use <a title="fsUnit Project Home" href="http://code.google.com/p/fsunit/">fsUnit</a> to ease into the syntax and explain my parser bit by bit.  I&#8217;ll have a bigger writeup on the day of the talk.  Don&#8217;t want to tip my hand too early&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://myotherpants.com/2008/12/im-presentable/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

