<?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"
	>

<channel>
	<title>Mark Staples</title>
	<atom:link href="http://www.markstaples.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.markstaples.com</link>
	<description>Ruminations and observations about software, technology, and beer.</description>
	<pubDate>Fri, 22 Aug 2008 01:47:18 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5</generator>
	<language>en</language>
			<item>
		<title>Dark Ale</title>
		<link>http://www.markstaples.com/2008/03/02/dark-ale/</link>
		<comments>http://www.markstaples.com/2008/03/02/dark-ale/#comments</comments>
		<pubDate>Sun, 02 Mar 2008 01:35:42 +0000</pubDate>
		<dc:creator>Mark</dc:creator>
		
		<category><![CDATA[Homebrew]]></category>

		<guid isPermaLink="false">http://www.markstaples.com/2008/03/02/dark-ale/</guid>
		<description><![CDATA[It&#8217;s been a cool summer in Sydney this year, and recently we&#8217;ve had a few particularly cool days , which I&#8217;ve taken to be the first stirrings of Autumn.  This prompted me to get a batch of beer ready for Winter - a Cooper&#8217;s Dark Ale, with their Brew Enhancer Type 2.  I&#8217;ve [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been a cool summer in Sydney this year, and recently we&#8217;ve had a few particularly cool days , which I&#8217;ve taken to be the first stirrings of Autumn.  This prompted me to get a batch of beer ready for Winter - a <a href="http://www.coopers.com.au/homebrew/hbrew.php?pid=1&amp;id=112">Cooper&#8217;s Dark Ale</a>, with their <a href="http://www.coopers.com.au/homebrew/hbrew.php?pid=7">Brew Enhancer Type 2</a>.  I&#8217;ve used this kit <a href="http://www.markstaples.com/2005/12/04/dark-chocolate-ale/">before</a>, but this time I&#8217;m not doing anything fancy - just making plain ol&#8217; beer.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.markstaples.com/2008/03/02/dark-ale/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Lessons on Standards from Build Management</title>
		<link>http://www.markstaples.com/2008/02/19/lessons-on-standards-from-build-management/</link>
		<comments>http://www.markstaples.com/2008/02/19/lessons-on-standards-from-build-management/#comments</comments>
		<pubDate>Tue, 19 Feb 2008 01:26:22 +0000</pubDate>
		<dc:creator>Mark</dc:creator>
		
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.markstaples.com/2008/02/19/lessons-on-standards-from-build-management/</guid>
		<description><![CDATA[I&#8217;ve written an article for the latest edition of the CM Journal at CM Crossroads, on  					Four Lessons about Company Standards and Procedures from Build Management.   Writing in a practitioner&#8217;s forum is very different to writing academic papers!  I&#8217;m not sure I&#8217;ve completely got the hang of it yet&#8230; but it&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve written an article for the latest edition of the <a href="http://www.cmcrossroads.com/magazine.html">CM Journal</a> at <a href="http://www.cmcrossroads.com/">CM Crossroads</a>, on  					<a href="http://www.cmcrossroads.com/articles/cm-journal/four-lessons-about-company-standards-and-procedures-from-build-management.html">Four Lessons about Company Standards and Procedures from Build Management</a>.   Writing in a practitioner&#8217;s forum is very different to writing academic papers!  I&#8217;m not sure I&#8217;ve completely got the hang of it yet&#8230; but it&#8217;s fun trying.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.markstaples.com/2008/02/19/lessons-on-standards-from-build-management/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Lime Cordial</title>
		<link>http://www.markstaples.com/2008/02/19/lime-cordial/</link>
		<comments>http://www.markstaples.com/2008/02/19/lime-cordial/#comments</comments>
		<pubDate>Mon, 18 Feb 2008 23:06:29 +0000</pubDate>
		<dc:creator>Mark</dc:creator>
		
		<category><![CDATA[Homebrew]]></category>

		<guid isPermaLink="false">http://www.markstaples.com/2008/02/19/lime-cordial/</guid>
		<description><![CDATA[A lime cordial last night - back to basics.  It was based on the generic cordial recipe - 2kg sugar, 1.7L water, 18g citric acid, and 0.3L of juice and pared rinds from 8 limes.  This batch had the most intense lime flavour.  My working hypothesis is that this is due to [...]]]></description>
			<content:encoded><![CDATA[<p>A lime cordial last night - back to basics.  It was based on the <a href="http://www.markstaples.com/2008/01/29/generic-cordial/">generic cordial recipe</a> - 2kg sugar, 1.7L water, 18g citric acid, and 0.3L of juice and pared rinds from 8 limes.  This batch had the most intense lime flavour.  My working hypothesis is that this is due to the quality of the fruit - the limes were perhaps more fresh than I normally use, and very dark green.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.markstaples.com/2008/02/19/lime-cordial/feed/</wfw:commentRss>
		</item>
		<item>
		<title>CM Best Practices - Two Lists and One of Mine</title>
		<link>http://www.markstaples.com/2008/01/30/cm-best-practices-two-lists-and-one-of-mine/</link>
		<comments>http://www.markstaples.com/2008/01/30/cm-best-practices-two-lists-and-one-of-mine/#comments</comments>
		<pubDate>Wed, 30 Jan 2008 06:46:05 +0000</pubDate>
		<dc:creator>Mark</dc:creator>
		
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.markstaples.com/2008/01/30/cm-best-practices-two-lists-and-one-of-mine/</guid>
		<description><![CDATA[A colleague forwarded to me a pointer to the current issue of the ITMPI journal, on Best Practices in Configuration Management.  They make an interesting contrast with the best CM practices in the November issue of the CM Journal on &#8220;What Best Practice Is Best?&#8221;, and specifically the article CM: The Next Generation of [...]]]></description>
			<content:encoded><![CDATA[<p>A colleague forwarded to me a pointer to the current issue of the ITMPI journal, on <a href="http://www.itmpi.org/default.aspx?pageid=460">Best Practices in Configuration Management</a>.  They make an interesting contrast with the best CM practices in the <a href="http://www.cmcrossroads.com/magazine/edition/What-Best-Practice-is-Best-November-2007.html">November issue</a> of the <a href="http://www.cmcrossroads.com/magazine.html">CM Journal</a> on &#8220;What Best Practice Is Best?&#8221;, and specifically the article <a href="http://www.cmcrossroads.com/articles/cm%3a-the-next-generation/cm%3a-the-next-generation-of-top-10-best-practices.html">CM: The Next Generation of Top 10 Best Practices</a>.</p>
<p>The CM Journal article&#8217;s list is as follows:</p>
<ul>
<li>1. Use of Change Packages</li>
<li>2. Stream-based Branching Strategy - do not overload branching</li>
<li>3. Status flow for all records with Clear In Box Assignments</li>
<li>4. Data record Owner and Assignee</li>
<li>5. Continuous integration with automated nightly builds from the CM repository</li>
<li>6. Dumb numbering</li>
<li>7. Main branch per release vs Main Trunk</li>
<li>8. Enforce change traceability to Features/Problem Reports</li>
<li>9. Automate administration to remove human error</li>
<li>10.Tailor your user interface closely to your process</li>
<li>11. Org chart integrated with CM tool</li>
<li>12. Change control of requirements</li>
<li>13. Continuous Automation</li>
<li>14. Warm-standby disaster recovery</li>
<li>15. Use Live data CRB/CIB meetings</li>
<li>16. A Problem is not a problem until it&#8217;s in the CM repository</li>
<li>17. Use tags and separate variant code into separate files</li>
<li>18a. Separate Problems/Issues/Defects from Activities/Features/Tasks</li>
<li>18b. Separate customer requests from Engineering problems/features</li>
<li>19. Change promotion vs Promotion Branches</li>
<li>20. Separate products for shared code</li>
</ul>
<p>The ITMPI Journal articles lists just 3 best practices:</p>
<ul>
<li><a href="http://www.compaid.com/caiinternet/ezine/westfall-SCM.pdf">Software Configuration Management Audits</a> (This isn&#8217;t really covered well by the 20 practices above, but is somewhat related to practices 5 and 13.)</li>
<li><a href="http://www.compaid.com/caiinternet/ezine/westfall-configurationcontrol.pdf">Risk-Based Configuration Control - Balancing Flexibility with Stability</a>  (This is somewhat related to practices 7, 11, 15, 16, 18a/b, and 19.)</li>
<li><a href="http://www.compaid.com/caiinternet/ezine/westfall-bidirectional.pdf">Bidirectional Requirements Traceability</a>  (This is somewhat related to practices 1, 2, 3, 4, 8, and 12.)</li>
</ul>
<p>The ITMPI Journal article doesn&#8217;t really cover the practices 6, 9, 10, 14, 17, and 20, partly because the CM journal article practices are at a lower level of detail and cover a few practical/administrative issues outside of the core of CM theory.</p>
<p>Anyway, the practices in both these lists are all &#8220;good&#8221; for &#8220;most&#8221; development groups.  They aren&#8217;t rocket science, but I&#8217;d say there are a fair number of development groups out there that barely do any of them.  Although version control is ubiquitous in industry, CM is still very poorly understood by most practitioners.</p>
<p>For what it&#8217;s worth, I think that for most commercial software development, the most important practice isn&#8217;t about sophisticated version control issues or processes - it&#8217;s a simple but critical piece of organisational structure and policy.</p>
<p><strong>All Customer Deliveries Go Through the Release Team</strong><br />
Create a release team that&#8217;s different to the development team.  Ensure all customer software deliveries happen through the release team.  Have the most senior manager you can find declare it a firing offense for a developer to ship code or patches directly from their desktop to the customer.  Even in &#8220;emergency&#8221; situations.</p>
<p>More than once I&#8217;ve seen or heard of companies that own high-end commercial SCM tools, but make those tools worthless because developers sometimes email patches directly to the customer.  (Sometimes in the rush they also forget to check in their changes to version control, which just makes the nightmare worse.)  The developers are usually trying to &#8220;get the job done&#8221;, and be &#8220;helpful&#8221; to a customer with a problem.  Sadly, they end up causing bigger problems for everyone down the line.  If you&#8217;re not managing releases properly, you don&#8217;t know what code the customer has - you degrade your ability to diagnose faults, you won&#8217;t be able to ship working patches in future, and you might easily introduce a regression problem by losing the fix itself.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.markstaples.com/2008/01/30/cm-best-practices-two-lists-and-one-of-mine/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Generic Cordial</title>
		<link>http://www.markstaples.com/2008/01/29/generic-cordial/</link>
		<comments>http://www.markstaples.com/2008/01/29/generic-cordial/#comments</comments>
		<pubDate>Tue, 29 Jan 2008 00:00:29 +0000</pubDate>
		<dc:creator>Mark</dc:creator>
		
		<category><![CDATA[Homebrew]]></category>

		<guid isPermaLink="false">http://www.markstaples.com/2008/01/29/generic-cordial/</guid>
		<description><![CDATA[Another cordial this weekend, this time using bulk white nectarines from the grocer. They were too hard to be eaten, but made good cordial.  I used a nectarine instantiation of my father&#8217;s generic cordial recipe.  He created this recipe based on Matt&#8217;s recipe for orange cordial, but tweaked it after various trials, and [...]]]></description>
			<content:encoded><![CDATA[<p>Another cordial this weekend, this time using bulk white nectarines from the grocer. They were too hard to be eaten, but made good cordial.  I used a nectarine instantiation of my father&#8217;s generic cordial recipe.  He created this recipe based on <a href="http://www.markstaples.com/2006/10/19/lemon-cordial/">Matt&#8217;s recipe for orange cordial</a>, but tweaked it after various trials, and made it parametric on fruit.</p>
<p>The recipe e.g. for strawberries or whole fruit, creates a very thick syrupy cordial - thick enough to use as a topping for icrecream.  Add water if you want a thinner cordial more similar to a shop-bought one.</p>
<p>Somewhat surprisingly to me, microwaving dry white sugar (below) does work.  But, be careful.  Your microwave may have a different power, the bowl will become super-hot, and you need to periodically stir the sugar, or it will melt around the edges.  Also, when you add super-hot sugar to the fruit puree, be ready for the puree to instantly boil.  Personally, I don&#8217;t microwave the sugar - I just chuck it into the puree cold, then boil the lot of it&#8230;</p>
<p><strong>Generic Cordial Recipe</strong></p>
<ul>
<li>To make 7<em>x</em> litres of cordial, use:<br />
5<em>x</em> litres of fruit puree (see below)<br />
5<em>x</em> kg of white sugar<br />
63<em>x</em> <strong>grams</strong> of citric acid (i.e. 9 grams/litre)</li>
</ul>
<ul>
<li>Heat puree to boil and remove from heat<br />
Heat sugar in microwave (5 mins/kg)</li>
<li>Combine all ingredients, stir until dissolved</li>
<li>Bring to boil, boil until satisfied with sterilization (5 mins?)</li>
<li>Cool until cold enough to pour into sterilized bottles</li>
</ul>
<p><strong>Fruit Purees</strong></p>
<p><strong>Ginger</strong>: use 100g ginger root per litre of finished cordial (i.e. per 5/7 lire of puree).  Grate ginger root, boil with some water until soft (pressure-cook for 40 mins)?, puree in blender (two 30-sec bursts?), then make up planned quantity with water.<br />
<strong>Strawberry</strong>: Use hulled strawberries and no added water.  Don&#8217;t boil, mash before blending.<br />
<strong>Passionfruit</strong>:  Use pulp of 1 large passionfruit per 100ml of puree. Boil with some water (or pressure cook) for say 20 minutes to release pulp from seeds.  Sieve to remove seeds, puree in blender, add water to achieve planned quantity.<br />
<strong>Pineapple, mandarin, &#8230;</strong>: (boil, add water only as needed)</p>
<p><strong>Cordials with Ginger</strong><br />
Make ginger cordial from ginger puree as above and blend with other cordial to taste (40% ginger cordial?)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.markstaples.com/2008/01/29/generic-cordial/feed/</wfw:commentRss>
		</item>
		<item>
		<title>&#8220;Why Not&#8221; is not &#8220;Can Not&#8221;</title>
		<link>http://www.markstaples.com/2008/01/22/why-not-is-not-can-not/</link>
		<comments>http://www.markstaples.com/2008/01/22/why-not-is-not-can-not/#comments</comments>
		<pubDate>Tue, 22 Jan 2008 05:55:16 +0000</pubDate>
		<dc:creator>Mark</dc:creator>
		
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.markstaples.com/2008/01/22/why-not-is-not-can-not/</guid>
		<description><![CDATA[Our paper &#8220;An Exploratory Study of Why organisations Do Not Adopt CMMI&#8221; has started to be cited in the literature.  It&#8217;s been in the &#8220;hottest 25 downloads&#8221; for the journal since it became available 3 quarters ago, so I&#8217;m hopeful the number of citations might grow.
On one hand, it&#8217;s great to cited!  On [...]]]></description>
			<content:encoded><![CDATA[<p>Our paper <a href="http://www.markstaples.com/2007/03/28/an-exploratory-study-of-why-organizations-do-not-adopt-cmmi/">&#8220;An Exploratory Study of Why organisations Do Not Adopt CMMI&#8221;</a> has started to be cited in the literature.  It&#8217;s been in the <a href="http://top25.sciencedirect.com/?journal_id=01641212">&#8220;hottest 25 downloads&#8221;</a> for the journal since it became available 3 quarters ago, so I&#8217;m hopeful the number of citations might grow.</p>
<p>On one hand, it&#8217;s great to cited!  On the other hand, I worry that the results could be mis-interpreted. Specifically, people might be tempted to mis-read the paper as saying &#8220;small companies can&#8217;t do CMMI&#8221;. We don&#8217;t say that. So, I thought I&#8217;d try to clarify a few points here&#8230;</p>
<p>The main question we do provide some initial evidence for is:</p>
<ul>
<li> When companies decide not to do CMMI, why do they say &#8220;no&#8221;?</li>
</ul>
<p>Here&#8217;s some questions we don&#8217;t provide evidence for in the paper:</p>
<ul>
<li> Do most companies do CMMI?</li>
<li> Can most companies do CMMI?</li>
<li> Do most companies think they can do CMMI?</li>
</ul>
<p>(These are alternate <a href="http://dx.doi.org/10.1016/j.jss.2006.09.046">&#8220;complementary research questions&#8221;</a> - by saying what my main research question is NOT, I hope you get  a better understanding about the boundaries of the main question, and how to interpret the results.)</p>
<p>In looking at the main question, we broke down the companies by size to see if we could get hints about why companies  gave the reasons they did.  Small companies tended to give different kinds of reasons than medium and large  companies.  Roughly, small companies said they couldn&#8217;t do CMMI, whereas medium and large companies said they shouldn&#8217;t.</p>
<p>But obviously some small companies can do CMMI!  There are <a href="http://www.sei.cmu.edu/news-at-sei/features/2004/3/pdf/feature-1-2004-3.pdf">fairly credible reports</a> of it in the literature.  So, what&#8217;s  going on?</p>
<p>What&#8217;s going on is that my target population is not &#8220;all software companies&#8221;.  My target population is software companies that have decided not to do CMMI.  To start my research, I first exclude companies that are doing CMMI, or that want to do it.</p>
<p>It&#8217;s interesting to progressively partition the population of companies, and think about where most software process  improvement research happens.  (This looks better as an animation, so think about these pictures as a sort of <a href="http://en.wikipedia.org/wiki/Flip_book">flick book</a> in your mind&#8217;s eye.)</p>
<p>First, there&#8217;s the population of every organisation that might reasonably use CMMI.</p>
<p><a href="http://www.markstaples.com/wp-content/uploads/2008/02/whynot-1.gif" title="whynot-1"><img src="http://www.markstaples.com/wp-content/uploads/2008/02/whynot-1.gif" alt="whynot-1" /></a></p>
<p>Some of them will not have heard of CMMI, but some will have.  You could study the differences between these groups as a piece of advertising or <a href="http://en.wikipedia.org/wiki/Diffusion_%28business%29">diffusion</a> research, but I&#8217;m not aware of anyone who&#8217;s published research on this for CMMI or any other SPI approach.</p>
<p><a href="http://www.markstaples.com/wp-content/uploads/2008/02/whynot-2.gif" title="whynot-2"><img src="http://www.markstaples.com/wp-content/uploads/2008/02/whynot-2.gif" alt="whynot-2" /></a></p>
<p>Of the organisations that have heard of CMMI, some will have decided not to adopt it, and some will have decided to adopt it.  This is the point in the adoption lifecycle that we examine in our paper.  It is an extremely rare kind of research in software engineering.</p>
<p><a href="http://www.markstaples.com/wp-content/uploads/2008/02/whynot-3.gif" title="whynot-3"><img src="http://www.markstaples.com/wp-content/uploads/2008/02/whynot-3.gif" alt="whynot-3" /></a></p>
<p>For interest&#8217;s sake, let&#8217;s drill down some more&#8230;</p>
<p>Of the organisations that have tried to adopt CMMI, some will have succeeded in rolling it out, and some will have failed.</p>
<p><a href="http://www.markstaples.com/wp-content/uploads/2008/02/whynot-4.gif" title="whynot-4"><img src="http://www.markstaples.com/wp-content/uploads/2008/02/whynot-4.gif" alt="whynot-4" /></a></p>
<p>Of those who succeeded in adopting CMMI, some organisations will have got some benefit, while others will have had no benefit.</p>
<p><a href="http://www.markstaples.com/wp-content/uploads/2008/02/whynot-5.gif" title="whynot-5"><img src="http://www.markstaples.com/wp-content/uploads/2008/02/whynot-5.gif" alt="whynot-5" /></a></p>
<p>Where do you think most CMMI/SPI research sits?</p>
<p>Most research papers report on how organisations benefitted from using CMMI. In the literature, you almost never hear about organisations who tried and failed to adopt CMMI, nor about organisations who adopted but then failed to benefit from CMMI. (This effect is called <a href="http://en.wikipedia.org/wiki/Selection_bias">selection bias</a>, or <a href="http://en.wikipedia.org/wiki/Publication_bias">publication bias</a>, depending on how it arises.)  It&#8217;s sort of understandable - companies don&#8217;t want to let themselves be seen in a bad light, and researchers may think that success is more glamorous than failure.</p>
<p>Looking at successful cases is necessary, but to really broaden the impact of software engineering research, we need to learn from failures as well!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.markstaples.com/2008/01/22/why-not-is-not-can-not/feed/</wfw:commentRss>
		</item>
		<item>
		<title>F# Being Productized</title>
		<link>http://www.markstaples.com/2007/10/24/f-being-productized/</link>
		<comments>http://www.markstaples.com/2007/10/24/f-being-productized/#comments</comments>
		<pubDate>Wed, 24 Oct 2007 01:21:15 +0000</pubDate>
		<dc:creator>Mark</dc:creator>
		
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.markstaples.com/2007/10/24/f-being-productized/</guid>
		<description><![CDATA[ The recent announcement by Somasegar at Microsoft that F# is being &#8220;productized&#8221; has now started to be picked up by various news agencies. Being productized means some future version of the F# language and its Visual Studio integration will be officially supported by Microsoft.
However, I see a couple of people are implying that because [...]]]></description>
			<content:encoded><![CDATA[<p> The <a href="http://blogs.msdn.com/somasegar/archive/2007/10/17/f-a-functional-programming-language.aspx">recent announcement by Somasegar</a> at Microsoft that F# is being &#8220;productized&#8221; has now started to be <a href="http://arstechnica.com/news.ars/post/20071023-microsoft-to-push-functional-programming-into-the-mainstream-with-f.html">picked up</a> by <a href="http://blogs.zdnet.com/microsoft/?p=860">various</a> <a href="http://www.ddj.com/development-tools/202600705">news</a> <a href="http://www.betanews.com/article/Experimental_Functional_Language_Emerges_from_Microsoft_Research/1193170328">agencies</a>. Being productized means some future version of the F# language and its Visual Studio integration will be officially supported by Microsoft.</p>
<p>However, I see a <a href="http://www.infoq.com/news/2007/10/FSharp-Plans">couple</a> of <a href="http://www.vnunet.com/vnunet/news/2201752/microsoft-preps-functional">people</a> are implying that because F# is functional language, it&#8217;s not an OO language.  Wrong!  It&#8217;s both.</p>
<p>Somasegar says F# will be appealing to developers in the domains of &#8220;financial, scientific and technical computing.&#8221;  He says that&#8217;s because of the correspondence you can achieve between F# and the mathematics that those developers work with in their domains.  I say, also because of the speedy execution performance you can get from F#.   Strong static typing in F# gives the compiler many more opportunities to be much smarter about optimization.   Speed matters when you&#8217;re working with massive data sets and data streams.   Dynamic languages will always struggle in comparison.</p>
<p>F# also has great potential as a teaching language in Universities, and Somasegar says that&#8217;s a target. So, I really hope Microsoft puts out a free <a href="http://msdn.microsoft.com/vstudio/express/">Visual Studio Express</a> edition for F# to make sure the barriers to getting started with F# on Windows are as low as they can be.  <a href="http://strangelights.com/fsharp/Wiki/default.aspx/FSharpWiki.MonoLinux">F# can also run on mono</a> on <a href="http://www.mono-project.com/Supported_Platforms">*nix</a>, so really there&#8217;s no excuse to not give it a try whatever platform your University uses.</p>
<p>F# is particularly nice move for Microsoft as a company, because it&#8217;s such a strong story of home-grown innovation.  I&#8217;d agree with Somasegar&#8217;s opinion that &#8220;[F#] is one of the best things that has happened at Microsoft ever since we created Microsoft Research over 15 years ago.&#8221;</p>
<p>p.s. Does anyone know how to search for &#8220;f#&#8221; on google news without finding faux-swear words?  It&#8217;s f#@&amp;!ng annoying.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.markstaples.com/2007/10/24/f-being-productized/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Orange Coriander Ale</title>
		<link>http://www.markstaples.com/2007/08/27/orange-coriander-ale/</link>
		<comments>http://www.markstaples.com/2007/08/27/orange-coriander-ale/#comments</comments>
		<pubDate>Mon, 27 Aug 2007 06:25:57 +0000</pubDate>
		<dc:creator>Mark</dc:creator>
		
		<category><![CDATA[Homebrew]]></category>

		<guid isPermaLink="false">http://www.markstaples.com/2007/08/27/orange-coriander-ale/</guid>
		<description><![CDATA[All good things come to an end, and so it is with my Dark Chocolate Ale.  My stores are generally getting low - now I&#8217;m left with only a couple of bottles of Spicy Ghost and a crate of Chilli Lager.  Time for another brew.
Next week I&#8217;m off to Europe for a couple [...]]]></description>
			<content:encoded><![CDATA[<p>All good things come to an end, and so it is with my <a href="http://www.markstaples.com/2005/12/04/dark-chocolate-ale/">Dark Chocolate Ale</a>.  My stores are generally getting low - now I&#8217;m left with only a couple of bottles of <a href="http://www.markstaples.com/2006/05/08/spicy-ghost/">Spicy Ghost</a> and a crate of <a href="http://www.markstaples.com/2006/12/25/christmas-chilli-lager/">Chilli Lager</a>.  Time for another brew.</p>
<p>Next week I&#8217;m off to Europe for a couple of weeks, presenting a paper at <a href="http://www.methodengineering07.org/">ME</a> and another at <a href="http://events.deri.at/nfpsla-soc07/">NFP-SLA</a>.  I thought I should get some beer on so it can ferment while I&#8217;m away.  (Exploit the parallelism inherent in the system!)</p>
<p>The Spicy Ghost was particularly nice, and my plan was to repeat that, but this time also adding some coriander seeds and orange rind to the wort, to approximate <a href="http://hoegaarden.com/fr/productinfo_witbier.html">Hoegaarden blanche</a>.  Sadly they were out of Spicy Ghost at the shops, so instead I&#8217;ve used another Cascade Premium kit, this time the <a href="http://www.cascadehomebrew.com.au/brewkits/brewkit_iv.asp">Pale Ale</a>.  I don&#8217;t know if the result will be anything like what I was originally hoping for, but I&#8217;m sure it&#8217;ll be quite drinkable. <img src='http://www.markstaples.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.markstaples.com/2007/08/27/orange-coriander-ale/feed/</wfw:commentRss>
		</item>
		<item>
		<title>A Web Services Epiphany - Accessing Confluence from F# Using SOAP</title>
		<link>http://www.markstaples.com/2007/07/15/a-web-services-epiphany-accessing-confluence-from-f-using-soap/</link>
		<comments>http://www.markstaples.com/2007/07/15/a-web-services-epiphany-accessing-confluence-from-f-using-soap/#comments</comments>
		<pubDate>Sat, 14 Jul 2007 14:55:53 +0000</pubDate>
		<dc:creator>Mark</dc:creator>
		
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.markstaples.com/2007/07/15/a-web-services-epiphany-accessing-confluence-from-f-using-soap/</guid>
		<description><![CDATA[&#8220;Web services&#8221; has been a buzz word for so long you might wonder if there&#8217;s any buzz left.  I&#8217;d known in principle about how web service technology was full of goodness, especially for achieving interoperability, but I&#8217;d never really taken the red pill.  However, recently I had an epiphany.
I&#8217;ve been working in a [...]]]></description>
			<content:encoded><![CDATA[<p>&#8220;<a href="http://en.wikipedia.org/wiki/Web_service">Web services</a>&#8221; has been a buzz word for so long you might wonder if there&#8217;s any buzz left.  I&#8217;d known in principle about how web service technology was full of goodness, especially for achieving interoperability, but I&#8217;d never really taken the <a href="http://en.wikipedia.org/wiki/Red_pill">red pill</a>.  However, recently I had an epiphany.</p>
<p>I&#8217;ve been working in a team using the <a href="http://www.atlassian.com/software/confluence/">Confluence</a> wiki to organise some information.  Confluence is a page-based wiki, but I&#8217;ve been pushing it a little in the direction of being a <a href="http://en.wikipedia.org/wiki/Semantic_wiki">semantic wiki</a>, by using 2-column tables on some pages, to represent key-value pairs for page attributes and relationships.  My problem was that, to Confluence, those tables were just ordinary textual content.  There was no way to check that the special tables were well-formed, and there was no way to query the wiki using the page attributes and relationships.</p>
<p>My first plan was to export the wiki to XML and query that, but then I discovered that <a href="http://confluence.atlassian.com/display/DOC/Remote+API+Specification">Confluence has a SOAP API</a>.  It looked promising, and it also looked like a good excuse to do <a href="http://www.markstaples.com/2006/06/05/f-sample-events-and-net-firebird/">some more scripting</a> with <a href="http://research.microsoft.com/fsharp/">F#</a>.</p>
<p>I bumbled around the web looking for simple guide on how to actually use <a href="http://en.wikipedia.org/wiki/SOAP">SOAP</a>, and finally came across <a href="http://www.strangelights.com/fsharp/wiki/default.aspx/FSharpWiki/MSNSearchSnippet.html">a page from Robert Pickering&#8217;s site</a> that laid it all out for me.  For Confluence, it goes like this:</p>
<ol>
<li>Generate a C# file from the Confluence WSDL file:<br />
<tt>wsdl http://&lt;your-confluence-path-here&gt;/rpc/soap-axis/confluenceservice-v1?wsdl</tt></li>
<li>Compile it to produce a dll:<br />
<tt>csc /target:library ConfluenceSoapServiceService.cs</tt></li>
</ol>
<p>(My <tt>wsdl.exe</tt> is in <tt>C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin</tt>, and my <tt>csc.exe</tt> is in <tt>C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727</tt>, but yours might be somewhere else.)</p>
<p>Then you&#8217;re set to go. For the purposes of exposition, say you want a page called &#8220;PAGE&#8221; from a Confluence space called &#8220;SPACE&#8221;, to which you&#8217;ve got anonymous access:</p>
<ol>
<li>In the F# interactive environment, load the dll, e.g. :<br />
<tt>#r &#8220;ConfluenceSoapServiceService.dll&#8221;</tt></li>
<li>Then, create a new type F# object to expose that SOAP API:<br />
<tt>let wiki = new ConfluenceSoapServiceService()</tt><br />
(Right now, in the interactive environment, I need to call this twice to get it to work, because of some strange F# interactive bug, but <a href="http://research.microsoft.com/~dsyme/">Don</a> assures me it works first time when it&#8217;s compiled.)</li>
<li>The API functions are available as members of that new object, just like they were written natively in F#:<br />
<tt>let page = wiki.getPage(&#8221;", &#8220;SPACE&#8221;, &#8220;PAGE&#8221;)</tt></li>
<li>But it&#8217;s not just the API functions - the values too are all just like they were written natively in F#.  For example, the page returned above is in the RemotePage type.  It has fields for things such as the page content:<br />
<tt>page.content</tt></li>
</ol>
<p>After that I was away - the standard libraries and seamless .net interoperability provided by F# made most things easy.  The hardest part of the exercise was working out how to <a href="http://confluence.atlassian.com/display/DOC/Confluence+Developer+FAQ?focusedCommentId=159471#comment-159471">parse the Confluence wikicode using regexes</a>.  (Oh, the pain!)</p>
<p>So, now I&#8217;ve seen the light - web services really are ace.  I was accessing an API implemented in Java, running on *nix, but to me it looked like it was native to F#, running on Windows.  And setting it up took almost no effort.  (After I found out how it was done. <img src='http://www.markstaples.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> )</p>
<p>I think my epiphany was mostly about web services, or was it about F#?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.markstaples.com/2007/07/15/a-web-services-epiphany-accessing-confluence-from-f-using-soap/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Feisty Fawn</title>
		<link>http://www.markstaples.com/2007/04/20/feisty-fawn/</link>
		<comments>http://www.markstaples.com/2007/04/20/feisty-fawn/#comments</comments>
		<pubDate>Thu, 19 Apr 2007 23:44:38 +0000</pubDate>
		<dc:creator>Mark</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.markstaples.com/2007/04/20/feisty-fawn/</guid>
		<description><![CDATA[Today, version 7.04 (&#8221;Feisty Fawn&#8221;) of Ubuntu Linux was released. Yay!  Earlier this week I installed the Feisty beta release, and rediscovered Linux happiness.
I first started using Linux at home in the mid/late 90s, installing Redhat Linux 4 on a second-hand PC.  I faithfully followed the Redhat releases, installing Redhat 6 on a [...]]]></description>
			<content:encoded><![CDATA[<p>Today, version 7.04 (&#8221;Feisty Fawn&#8221;) of <a href="http://www.ubuntu.com/">Ubuntu </a>Linux was released. Yay!  Earlier this week I installed the Feisty beta release, and rediscovered Linux happiness.</p>
<p>I first started using Linux at home in the mid/late 90s, installing <a href="http://en.wikipedia.org/wiki/Redhat_Linux">Redhat Linux</a> 4 on a second-hand PC.  I faithfully followed the Redhat releases, installing Redhat 6 on a new PC, and eventually upgrading to Redhat 9.  Then, Redhat went all &#8220;enterprise&#8221;, and stopped their free package update management service.  My old Redhat 9 box slowly became impossible to maintain.  Maybe Redhat thought focussing on the enterprise was good for them - and maybe it did help their stock price for a while.  At the time there was no credible transition (e.g. to <a href="http://en.wikipedia.org/wiki/Fedora_%28Linux_distribution%29">Fedora</a>), and so as a home user I just felt abandoned.  Now I think Redhat&#8217;s <a href="http://www.google.com/trends?q=debian%2C+redhat%2C+fedora%2C+ubuntu&amp;ctab=0&amp;geo=all&amp;date=all">getting what&#8217;s coming to them</a>.</p>
<p>To successfully install Redhat 4, I had to host a private &#8220;installation party&#8221;, and buy pizzas for the Linux geeks who came around to mess around with OS configuration files on the command line.  For a while I thought my Feisty beta installation experience was going to be similar.  The desktop install stopped half-way through (<a href="https://bugs.launchpad.net/ubuntu/+source/ubiquity/+bug/106631">ubiquity crashed</a>), and then the alternate install managed to corrupt my <a href="http://en.wikipedia.org/wiki/RAID#Software_RAID">software RAID</a> configuration before failing.  But finally the alternate installation worked without software RAID. Afterwards I was left in 800&#215;600 screen resolution for a while, until I discovered some advice on the net about using dpkg-reconfigure.</p>
<p>There are still dome problems remaining now I&#8217;ve finished the installation.  My box <a href="https://bugs.launchpad.net/ubuntu/+source/linux-source-2.6.20/+bug/104868">won&#8217;t poweroff when I shutdown</a>.  And, it&#8217;s still hard for Windows and Linux boxes to play nicely together on my network.  I can share files in one direction but not the other, and it hasn&#8217;t &#8220;just worked&#8221; setting up my Linux box as a network print server for its local printer.</p>
<p>But, these are minor problems that don&#8217;t diminish my renewed Linux happiness.  The desktop menus are clean, the system administration tools work (apart from the problems noted above), the package update management is fantastic, I like the use of <a href="http://en.wikipedia.org/wiki/Sudo">sudo</a> for root-less security, and it&#8217;s very neat to be asked to install system features only if/when you need them.  Now we&#8217;ve upgraded, our scanner finally works, and we&#8217;ve been able to install <a href="http://en.wikipedia.org/wiki/Wesnoth">Wesnoth</a> to keep Liam occupied these school holidays.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.markstaples.com/2007/04/20/feisty-fawn/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
