<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>127.0.0.1</title>
	<atom:link href="http://azheglov.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://azheglov.wordpress.com</link>
	<description>Alexei Zheglov&#039;s Software Blog</description>
	<lastBuildDate>Wed, 08 Jun 2011 04:06:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='azheglov.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>127.0.0.1</title>
		<link>http://azheglov.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://azheglov.wordpress.com/osd.xml" title="127.0.0.1" />
	<atom:link rel='hub' href='http://azheglov.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Notes to Self: Debugging Deadlocks on SQL Server</title>
		<link>http://azheglov.wordpress.com/2011/02/13/notes-to-self-debugging-deadlocks-on-sql-server/</link>
		<comments>http://azheglov.wordpress.com/2011/02/13/notes-to-self-debugging-deadlocks-on-sql-server/#comments</comments>
		<pubDate>Mon, 14 Feb 2011 04:04:20 +0000</pubDate>
		<dc:creator>azheglov</dc:creator>
				<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://azheglov.wordpress.com/?p=216</guid>
		<description><![CDATA[Here are are some tips that I&#8217;ve learned from our company&#8217;s Database Whisperer in the last year. Every once in a few months, I stumble upon some weird database problem and I&#8217;m glad I can call Michael for help. Here &#8230; <a href="http://azheglov.wordpress.com/2011/02/13/notes-to-self-debugging-deadlocks-on-sql-server/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=azheglov.wordpress.com&amp;blog=6708261&amp;post=216&amp;subd=azheglov&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Here are are some tips that I&#8217;ve learned from <a href="http://michaeljswart.com/">our company&#8217;s Database Whisperer</a> in the last year.  Every once in a few months, I stumble upon some weird database problem and I&#8217;m glad I can call Michael for help.  Here are some tips I wanted to write down after tracking down a problem earlier this week.</p>
<p><strong>Set a low blocked process threshold.</strong> Here&#8217;s how to configure it using SQL Server Management Studio.  Run a stored procedure <em>sp_configure</em> and look for a variable named <em>blocked process threshold</em> in its output.  If the configured value (in seconds) is too high, run the following commands to set it to 5 seconds:</p>
<pre>sp_configure 'blocked process threshold', 5</pre>
<pre>reconfigure</pre>
<p><strong>How to get Blocked process reports using SQL Server Profiler</strong>.  Open SQL Server Profiler and start a new trace.  In the <em>TraceProperties</em> dialog, <em>Events Selection</em>tab, uncheck all events.<br />
<a href="http://azheglov.files.wordpress.com/2011/02/sqlserverprofiler_startingatrace1.jpg"><img src="http://azheglov.files.wordpress.com/2011/02/sqlserverprofiler_startingatrace1.jpg?w=500&#038;h=361" alt="" title="SQLServerProfiler_StartingATrace" width="500" height="361" class="alignnone size-full wp-image-231" /></a></p>
<p>Check the <em>Show all events</em> check-box.  In the long menu of events, expand the <em>Errors and Warnings</em> node and check <em>Blocked process report</em>.  Check <em>Show all columns</em> and check all possible check-boxes in the <em>Blocked process report</em> row.</p>
<p><a href="http://azheglov.files.wordpress.com/2011/02/sqlserverprofiler_settingupblockedprocessreports.jpg"><img src="http://azheglov.files.wordpress.com/2011/02/sqlserverprofiler_settingupblockedprocessreports.jpg?w=500&#038;h=361" alt="" title="SQLServerProfiler_SettingUpBlockedProcessReports" width="500" height="361" class="alignnone size-full wp-image-234" /></a><br />
<strong>How to interpret the blocked process report.</strong>  The report contains, in an XML-like format, information about the blocked and the blocking process.  The <em>inputbuf</em> elements let you see the SQL code your program is running, but sometimes they only identify the executing database object by ID, like this:</p>
<pre>
Proc [Database Id = 11 Object Id = 1744113354]
</pre>
<p>Then a simple query (in SQL Server Management Studio)</p>
<pre>
select object_name(1744113354)
</pre>
<p>identifies this object as a certain stored procedure.  Okay, I probably won&#8217;t forget this part.</p>
<p>The <em>blocked-process</em> element contains execution stack, but there is one problem: its frames are presented in a very cryptic way, like this:</p>
<pre>
&lt;frame line="1" stmtstart="74" sqlhandle="0x02000000ec598609171ca0e0d3bae80cc5a4c0e34169572c"/&gt;
</pre>
<p>To decode them, the following one-line query is handy:</p>
<pre>
select * from sys.dm_exec_sql_text(0x02000000ec598609171ca0e0d3bae80cc5a4c0e34169572c)
</pre>
<p>That&#8217;s about it for now.  For real database knowledge, <a href="http://michaeljswart.com/">read Michael&#8217;s blog.</a>  Here, I just want to write down a few things that were important to me in the last few days to make sure I don&#8217;t forget.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/azheglov.wordpress.com/216/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/azheglov.wordpress.com/216/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/azheglov.wordpress.com/216/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/azheglov.wordpress.com/216/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/azheglov.wordpress.com/216/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/azheglov.wordpress.com/216/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/azheglov.wordpress.com/216/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/azheglov.wordpress.com/216/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/azheglov.wordpress.com/216/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/azheglov.wordpress.com/216/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/azheglov.wordpress.com/216/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/azheglov.wordpress.com/216/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/azheglov.wordpress.com/216/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/azheglov.wordpress.com/216/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=azheglov.wordpress.com&amp;blog=6708261&amp;post=216&amp;subd=azheglov&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://azheglov.wordpress.com/2011/02/13/notes-to-self-debugging-deadlocks-on-sql-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/22ac2ff7313d8e523a5950a687670d0c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">author</media:title>
		</media:content>

		<media:content url="http://azheglov.files.wordpress.com/2011/02/sqlserverprofiler_startingatrace1.jpg" medium="image">
			<media:title type="html">SQLServerProfiler_StartingATrace</media:title>
		</media:content>

		<media:content url="http://azheglov.files.wordpress.com/2011/02/sqlserverprofiler_settingupblockedprocessreports.jpg" medium="image">
			<media:title type="html">SQLServerProfiler_SettingUpBlockedProcessReports</media:title>
		</media:content>
	</item>
		<item>
		<title>A Note on XML Serialization</title>
		<link>http://azheglov.wordpress.com/2010/09/22/a-note-on-xml-serialization/</link>
		<comments>http://azheglov.wordpress.com/2010/09/22/a-note-on-xml-serialization/#comments</comments>
		<pubDate>Wed, 22 Sep 2010 11:05:56 +0000</pubDate>
		<dc:creator>azheglov</dc:creator>
				<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://azheglov.wordpress.com/?p=190</guid>
		<description><![CDATA[A coworker asked me recently how to serialize an array of objects, belonging to different classes deriving from the same base class, such that the XML elements representing these objects revealed the class they belong to. He wanted the XML &#8230; <a href="http://azheglov.wordpress.com/2010/09/22/a-note-on-xml-serialization/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=azheglov.wordpress.com&amp;blog=6708261&amp;post=190&amp;subd=azheglov&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>A coworker asked me recently how to serialize an array of objects, belonging to different classes deriving from the same base class, such that the XML elements representing these objects revealed the class they belong to.  He wanted the XML to look like this:</p>
<pre>
&lt;ArrayOfBase&gt;
    &lt;Derived1 /&gt;
    &lt;Derived2 /&gt;
    &lt;Derived1 /&gt;
    ...
&lt;/ArrayOfBase&gt;
</pre>
<p>I remembered doing exactly that a while ago, but I couldn&#8217;t remember exactly what I did.  But it wasn&#8217;t difficult for us and didn&#8217;t take long to find the answer.  Here it is:</p>
<p>Class RowSet is a DTO (data transfer object) containing a matrix of data cells.</p>
<pre>
[Serializable]
public class RowSet {
    [XmlElement( ElementName = "row" )]
    public Row[] Rows { get; set; }
    ...
}
</pre>
<p>Note how the <strong>XmlElement</strong> attribute is applied to a collection.  It defines serialization of individual elements rather than the collection itself.  Row is defined as a one-dimentional array of abstract Cells.</p>
<pre>
[Serializable]
public class Row {
    [XmlElement( Type = typeof( DataCell ),
                 ElementName = "d" )]
    [XmlElement( Type = typeof( NullCell ),
                 ElementName = "n" )]
    public Cell[] CellArray { get; set; }
    ...
}
</pre>
<p>Cell is an abstract class and DataCell and NullCell derive from it.  RowSet serialized into XML looks like this:</p>
<pre>
&lt;rows&gt;
    &lt;row&gt;
        &lt;d value=... /&gt;
        &lt;n /&gt;
        &lt;n /&gt;
        &lt;d ... /&gt;
        ...
    &lt;/row&gt;
    &lt;row&gt;
        ...
    &lt;/row&gt;
    ...
&lt;/rows&gt;
</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/azheglov.wordpress.com/190/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/azheglov.wordpress.com/190/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/azheglov.wordpress.com/190/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/azheglov.wordpress.com/190/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/azheglov.wordpress.com/190/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/azheglov.wordpress.com/190/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/azheglov.wordpress.com/190/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/azheglov.wordpress.com/190/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/azheglov.wordpress.com/190/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/azheglov.wordpress.com/190/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/azheglov.wordpress.com/190/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/azheglov.wordpress.com/190/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/azheglov.wordpress.com/190/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/azheglov.wordpress.com/190/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=azheglov.wordpress.com&amp;blog=6708261&amp;post=190&amp;subd=azheglov&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://azheglov.wordpress.com/2010/09/22/a-note-on-xml-serialization/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/22ac2ff7313d8e523a5950a687670d0c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">author</media:title>
		</media:content>
	</item>
		<item>
		<title>How To Spot a Possible Twitter Scam</title>
		<link>http://azheglov.wordpress.com/2010/08/17/how-to-spot-a-possible-twitter-scam/</link>
		<comments>http://azheglov.wordpress.com/2010/08/17/how-to-spot-a-possible-twitter-scam/#comments</comments>
		<pubDate>Tue, 17 Aug 2010 19:57:58 +0000</pubDate>
		<dc:creator>azheglov</dc:creator>
				<category><![CDATA[blogging]]></category>

		<guid isPermaLink="false">http://azheglov.wordpress.com/?p=176</guid>
		<description><![CDATA[If a Twitter application claims to do something that is not supported by Twitter API, then it is probably a scam. I got this idea from Dhananjay Nene a long time ago, when an application claimed to be able to &#8230; <a href="http://azheglov.wordpress.com/2010/08/17/how-to-spot-a-possible-twitter-scam/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=azheglov.wordpress.com&amp;blog=6708261&amp;post=176&amp;subd=azheglov&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>If a Twitter application claims to do something that is not supported by <a href="http://apiwiki.twitter.com/Twitter-API-Documentation">Twitter API</a>, then it is probably a scam.  I got this idea from <a href="http://blog.dhananjaynene.com/">Dhananjay Nene</a> a long time ago, when an application claimed to be able to find out who has viewed your Twitter page.</p>
<p>Quite a few people used an app named <a href="http://twifficiency.com/">Twifficiency</a>, which advertised itself as follows: &#8220;In a nut shell, Twifficiency calculates your twitter efficiency based upon your twitter activity. This includes how many people you follow, how many people follow you, how often you tweet and <strong>how many tweets you read</strong>.&#8221;</p>
<p>The highlighted part looks like a red flag.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/azheglov.wordpress.com/176/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/azheglov.wordpress.com/176/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/azheglov.wordpress.com/176/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/azheglov.wordpress.com/176/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/azheglov.wordpress.com/176/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/azheglov.wordpress.com/176/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/azheglov.wordpress.com/176/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/azheglov.wordpress.com/176/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/azheglov.wordpress.com/176/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/azheglov.wordpress.com/176/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/azheglov.wordpress.com/176/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/azheglov.wordpress.com/176/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/azheglov.wordpress.com/176/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/azheglov.wordpress.com/176/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=azheglov.wordpress.com&amp;blog=6708261&amp;post=176&amp;subd=azheglov&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://azheglov.wordpress.com/2010/08/17/how-to-spot-a-possible-twitter-scam/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/22ac2ff7313d8e523a5950a687670d0c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">author</media:title>
		</media:content>
	</item>
		<item>
		<title>The 10th Anniversary of the Joel Test</title>
		<link>http://azheglov.wordpress.com/2010/08/08/the-10th-anniversary-of-the-joel-test/</link>
		<comments>http://azheglov.wordpress.com/2010/08/08/the-10th-anniversary-of-the-joel-test/#comments</comments>
		<pubDate>Mon, 09 Aug 2010 00:25:44 +0000</pubDate>
		<dc:creator>azheglov</dc:creator>
				<category><![CDATA[agile]]></category>

		<guid isPermaLink="false">http://azheglov.wordpress.com/?p=150</guid>
		<description><![CDATA[It may be hard to believe it was that long ago, but it was indeed on August 9, 2000 that Joel Spolsky wrote his famous article, The Joel Test: 12 Steps to Better Code The test is based on a &#8230; <a href="http://azheglov.wordpress.com/2010/08/08/the-10th-anniversary-of-the-joel-test/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=azheglov.wordpress.com&amp;blog=6708261&amp;post=150&amp;subd=azheglov&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>It may be hard to believe it was that long ago, but it was indeed on August 9, 2000 that <strong>Joel Spolsky</strong> wrote his famous article, <a href="http://www.joelonsoftware.com/articles/fog0000000043.html">The Joel Test: 12 Steps to Better Code</a></p>
<p>The test is based on a simple idea: answer 12 yes-or-no questions and if you answered &#8220;Yes&#8221; 12 times or close to that, you have a very mature and effective software engineering organization.  If most of your answers were &#8220;No&#8221;, then you&#8217;re in serious trouble, or you will be when your hero programmer decides to leave.  Regardless of how you score on this test, the questions you answered &#8220;No&#8221; tell you how you can improve.</p>
<p>Before you begin to criticize this test, consider that it was written a very long time ago and in what was a really a different era (the <a href="http://agilemanifesto.org/">Agile Manifesto</a> was published only the following year and we think Agile has been around for a while).</p>
<p>Over the last ten years, countless software developers asked themselves these questions, thought &#8220;we should really be doing this this&#8230;&#8221;, and then actually did it.  At the same time, advancements in our profession were taking place and chipping away at the relevance of these questions.</p>
<p><strong>Do you use source control?</strong>  Is that even a question?</p>
<p><strong>Do you make daily builds?</strong>  Here, there may be a big difference between two ways to answer &#8220;yes&#8221;, for instance, between running a script every 24 hours just to build the thing and improvement based on continual feedback from a continuous integration system. </p>
<p><strong>Do you have a spec?</strong>  &#8220;No&#8221; may now even be the preferred answer.  Imagine an awkward scene: someone walks into a room full of Agile Manifesto signatories and asks, &#8220;Do you guys have a spec?&#8221;  True, there is an important place for specification in agile software development (such as executable specifications used in <a href="http://agileacceptancetesting.org/">agile acceptance testing</a>), but the spec described in the Joel Test is of a different kind, the big one written up-front and before everything else.</p>
<p><strong>Do you do hallway usability testing?</strong>  Okay, if you are a software developer and you never leave your desk and expect your manager to give you tasks, then you are probably developing something unusable.  (<a href="http://www.mountaingoatsoftware.com/">Mike Cohn</a> wrote in <a href="http://www.amazon.com/User-Stories-Applied-Software-Development/dp/0321205685/"><em>User Stories Applied</em></a> that software development managers are some of the worst user proxies.)  If that is your situation, you can discover a lot by stepping outside the cubicle and asking someone to use your program.  But your team can probably discover the same insights, only earlier, by applying user stories and engaging in conversations with more relevant user proxies.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/azheglov.wordpress.com/150/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/azheglov.wordpress.com/150/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/azheglov.wordpress.com/150/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/azheglov.wordpress.com/150/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/azheglov.wordpress.com/150/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/azheglov.wordpress.com/150/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/azheglov.wordpress.com/150/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/azheglov.wordpress.com/150/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/azheglov.wordpress.com/150/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/azheglov.wordpress.com/150/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/azheglov.wordpress.com/150/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/azheglov.wordpress.com/150/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/azheglov.wordpress.com/150/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/azheglov.wordpress.com/150/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=azheglov.wordpress.com&amp;blog=6708261&amp;post=150&amp;subd=azheglov&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://azheglov.wordpress.com/2010/08/08/the-10th-anniversary-of-the-joel-test/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/22ac2ff7313d8e523a5950a687670d0c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">author</media:title>
		</media:content>
	</item>
		<item>
		<title>A Medium-Sized List of Agile Practices</title>
		<link>http://azheglov.wordpress.com/2010/03/31/a-medium-sized-list-of-agile-practices/</link>
		<comments>http://azheglov.wordpress.com/2010/03/31/a-medium-sized-list-of-agile-practices/#comments</comments>
		<pubDate>Wed, 31 Mar 2010 11:04:52 +0000</pubDate>
		<dc:creator>azheglov</dc:creator>
				<category><![CDATA[agile]]></category>

		<guid isPermaLink="false">http://azheglov.wordpress.com/?p=116</guid>
		<description><![CDATA[I wanted to compile a list of important agile practices, big enough to include all the important ones, but not so big as to be overbearing, intimidating and unhelpful to agile beginners. You would probably be right to interrupt me &#8230; <a href="http://azheglov.wordpress.com/2010/03/31/a-medium-sized-list-of-agile-practices/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=azheglov.wordpress.com&amp;blog=6708261&amp;post=116&amp;subd=azheglov&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I wanted to compile a list of important agile practices, big enough to include all the important ones, but not so big as to be overbearing, intimidating and unhelpful to agile beginners.</p>
<p>You would probably be right to interrupt me at this point by asking, wouldn&#8217;t such a list constitute a process?  Doesn&#8217;t the <a href="http://agilemanifesto.org/">Agile Manifesto</a> teach that we should value <em>individuals and interactions over processes and tools</em>?</p>
<p>You would be right because the Agile Manifesto says nothing about using, for example, <strong>continuous integration</strong>.  But how many of the early adopters of agile refuse to use it?  Hardly any.  At the same time, the word <em>agile</em> is used by many more people now than ten years ago and stories like &#8220;we&#8217;ve implemented scrum; we now hold status meetings daily instead of weekly&#8221; abound.</p>
<p>So, the list of recommended practices will of course come with disclaimers and caveats.  Each listed practice is optional and following all of them won&#8217;t automatically make you agile.  But let&#8217;s try to compile the list first.</p>
<p>I visited a blog, <a href="http://www.noop.nl/">NOOP.NL</a>, whose author, Jurgen Appelo, is both a recognized agile expert and seems to be a fan of top-100 lists.  He did <a href="http://www.noop.nl/2009/05/the-big-agile-practices-survey-report-part-1.html">The Big Agile Practices Survey</a> a while back and then published the results.  Out of the survey&#8217;s many questions, I decided to consider the following three:</p>
<ul>
<li>Which practices are REALLY AGILE, or&#8230; highest level of agility?</li>
<li>Which practices are REALLY IMPORTANT, or&#8230; highest level of importance?</li>
<li>Which practices are REALLY APPLIED, or&#8230; highest level of application?</li>
</ul>
<p><em>Which practices are REALLY AGILE, or&#8230; highest level of agility?</em></p>
<table>
<tr>
<td><strong>Area</strong></td>
<td><strong>Best practice</strong></td>
<td><strong>Score</strong></td>
</tr>
<tr>
<td>Process</td>
<td>Iteration Planning / Planning Game / Sprint Planning</td>
<td>98.8%</td>
</tr>
<tr>
<td>Process</td>
<td>Velocity</td>
<td>98.1%</td>
</tr>
<tr>
<td>Process</td>
<td>Sprint Backlog</td>
<td>98.1%</td>
</tr>
<tr>
<td>Process</td>
<td>Daily Stand-up Meeting / Daily Scrum</td>
<td>97.6%</td>
</tr>
<tr>
<td>Organization</td>
<td>Self-Organizing Team / Scrum Team</td>
<td>97.5%</td>
</tr>
<tr>
<td>Process</td>
<td>Story Points</td>
<td>96.9%</td>
</tr>
<tr>
<td>Organization</td>
<td>Scrum Master</td>
<td>96.3%</td>
</tr>
<tr>
<td>Process</td>
<td>Sprint Review / Iteration Demo</td>
<td>96.3%</td>
</tr>
<tr>
<td>Process</td>
<td>Timeboxing / Fixed Sprints / Fixed Iteration Length</td>
<td>96.0%</td>
</tr>
<tr>
<td>Requirements</td>
<td>Product Backlog</td>
<td>95.6%</td>
</tr>
<tr>
<td>&nbsp;</td>
<td></td>
<td></td>
</tr>
</table>
<p><em>Which practices are REALLY IMPORTANT, or&#8230; highest level of importance?</em></p>
<table>
<tr>
<td><strong>Area</strong></td>
<td><strong>Best practice</strong></td>
<td><strong>Score</strong></td>
</tr>
<tr>
<td>Construction</td>
<td>Source Control / Version Control</td>
<td>100.0%</td>
</tr>
<tr>
<td>Process</td>
<td>Definition of Done / Done Done</td>
<td>99.4%</td>
</tr>
<tr>
<td>Construction</td>
<td>Refactoring</td>
<td>98.9%</td>
</tr>
<tr>
<td>Organization</td>
<td>Sustainable Pace</td>
<td>98.6%</td>
</tr>
<tr>
<td>Construction</td>
<td>Frequent Delivery / Frequent Releases</td>
<td>98.3%</td>
</tr>
<tr>
<td>Requirements</td>
<td>Product Backlog</td>
<td>98.2%</td>
</tr>
<tr>
<td>Requirements</td>
<td>Requirement Prioritization</td>
<td>98.2%</td>
</tr>
<tr>
<td>Testing</td>
<td>Unit Testing</td>
<td>98.2%</td>
</tr>
<tr>
<td>Testing</td>
<td>Storytesting / Acceptance Criteria / Acceptance Testing</td>
<td>98.1%</td>
</tr>
<tr>
<td>Process</td>
<td>Retrospective / Reflection Workshop</td>
<td>98.0%</td>
</tr>
<tr>
<td>&nbsp;</td>
<td></td>
<td></td>
</tr>
</table>
<p><em>Which practices are REALLY APPLIED, or&#8230; highest level of application?</em></p>
<table>
<tr>
<td><strong>Area</strong></td>
<td><strong>Best practice</strong></td>
<td><strong>Score</strong></td>
</tr>
<tr>
<td>Construction</td>
<td>Source Control / Version Control</td>
<td>100.0%</td>
</tr>
<tr>
<td>Requirements</td>
<td>Requirement Prioritization</td>
<td>94.4%</td>
</tr>
<tr>
<td>Testing</td>
<td>Unit Testing</td>
<td>93.4%</td>
</tr>
<tr>
<td>Requirements</td>
<td>Product Backlog</td>
<td>93.2%</td>
</tr>
<tr>
<td>Process</td>
<td>Iteration Planning / Planning Game / Sprint Planning</td>
<td>92.9%</td>
</tr>
<tr>
<td>Construction</td>
<td>Refactoring</td>
<td>91.8%</td>
</tr>
<tr>
<td>Process</td>
<td>Daily Stand-up Meeting / Daily Scrum</td>
<td>90.8%</td>
</tr>
<tr>
<td>Process</td>
<td>Timeboxing / Fixed Sprints / Fixed Iteration Length</td>
<td>90.8%</td>
</tr>
<tr>
<td>Construction</td>
<td>Daily Builds / Automated Builds / Ten-Minute Builds</td>
<td>90.3%</td>
</tr>
<tr>
<td>Testing</td>
<td>Integration Testing</td>
<td>88.2%</td>
</tr>
<tr>
<td>&nbsp;</td>
<td></td>
<td></td>
</tr>
</table>
<p>Several observations can be made:</p>
<ul>
<li>Notice the amazingly high percentages of respondents who said that they associate a particular practice with agile, believe that it is important, and actually apply it.</li>
<li>The identified practices are not constrained to any particular agile method.  For example, there is no mention of <strong>pair programming</strong> (an XP practice) and the respondents didn&#8217;t say the scrum master has to be a designated person.
<li>Some of the practices are mentioned more than once.  <strong>The Product Backlog occurs in all three lists.</strong>
<li>Let&#8217;s say you don&#8217;t have a product backlog.  The Agile Manifesto doesn&#8217;t say you must have it.  But it should be clear now that either you have a good reason not to have it or you are missing something important.
</ul>
<p>By joining the three lists and removing the duplicates, I got a list of 21 practices.  I removed the percentages (they are now unimportant), grouped related practices together and renamed the areas.  Here is the result:</p>
<table>
<tr>
<td><strong>Area</strong></td>
<td><strong>Best practice</strong></td>
</tr>
<tr>
<td>People</td>
<td>Self-Organizing Team / Scrum Team</td>
</tr>
<tr>
<td>People</td>
<td>Scrum Master</td>
</tr>
<tr>
<td>Timing</td>
<td>Timeboxing / Fixed Sprints / Fixed Iteration Length</td>
</tr>
<tr>
<td>Timing</td>
<td>Sustainable Pace</td>
</tr>
<tr>
<td>Timing</td>
<td>Frequent Delivery / Frequent Releases</td>
</tr>
<tr>
<td>Requirements</td>
<td>Product Backlog</td>
</tr>
<tr>
<td>Requirements</td>
<td>Requirement Prioritization</td>
</tr>
<tr>
<td>Requirements</td>
<td>Iteration Planning / Planning Game / Sprint Planning</td>
</tr>
<tr>
<td>Requirements</td>
<td>Sprint Backlog</td>
</tr>
<tr>
<td>Tools and Techniques</td>
<td>Source Control / Version Control</td>
</tr>
<tr>
<td>Tools and Techniques</td>
<td>Daily Builds / Automated Builds / Ten-Minute Builds</td>
</tr>
<tr>
<td>Tools and Techniques</td>
<td>Refactoring</td>
</tr>
<tr>
<td>Tools and Techniques</td>
<td>Unit Testing</td>
</tr>
<tr>
<td>Tools and Techniques</td>
<td>Integration Testing</td>
</tr>
<tr>
<td>Tools and Techniques</td>
<td>Storytesting / Acceptance Criteria / Acceptance Testing</td>
</tr>
<tr>
<td>Feedback</td>
<td>Daily Stand-up Meeting / Daily Scrum</td>
</tr>
<tr>
<td>Feedback</td>
<td>Sprint Review / Iteration Demo</td>
</tr>
<tr>
<td>Feedback</td>
<td>Definition of Done / Done Done</td>
</tr>
<tr>
<td>Feedback</td>
<td>Retrospective / Reflection Workshop</td>
</tr>
<tr>
<td>Feedback</td>
<td>Velocity</td>
</tr>
<tr>
<td>Feedback</td>
<td>Story Points</td>
</tr>
<tr>
<td>&nbsp;</td>
<td></td>
<td></td>
</tr>
</table>
<p>Now I want to take one more simplifying step: get rid of the tabular form of information.</p>
<p>Start with people.  You need a <strong>scrum master</strong> and a <strong>self-organizing team</strong>.  Timing-wise, your process is iterative, uses <strong>fixed-length, time-boxed iterations</strong> and emphasizes <strong>sustainable pace</strong> and <strong>frequent releases</strong>.  What do you do in each iteration?  You start with a <strong>product backlog</strong>, which is maintained to reflect your current <strong>prioritization of requrements</strong>.  Once you have it, you can hold an <strong>iteration planning meeting</strong> at the start of an iteration and select user stories into the <strong>sprint backlog</strong>.  Now, what techniques to you use to engineer the solution to satisfy your customer?  Well, <strong>source control</strong> is a must, <strong>daily, automated builds</strong> (probably enabled by a continuous integration system) are helpful.  There are no recommendations on how to design and write your code, but it is recommended that you <strong>refactor</strong> it.  Then there is a three-pronged testing strategy: <strong>unit-</strong>, <strong>acceptance</strong> and <strong>integration tests</strong>.  (Serious QA strategy will have more prongs, but we are talking about the minimal agile-specific set.)</p>
<p>Lastly, and most importantly, there is feedback, lots of it and in various forms.  The <strong>daily scrum</strong> (or, in a literal translation from one of the foreign languages, the <em>synchronization reunion</em>!) and the <strong>iteration demo</strong>, when there is no avoiding the question: what is our <strong>definition of done</strong>?  <strong>Retrospectives</strong> to improve the teamwork and fine-tune the practices.  <strong>Velocity</strong> is very important in agile estimation and planning and to track velocity you need <strong>story points</strong>.</p>
<p>OK, getting to this list was labourious, but the result itself is compact as I promised at the beginning of the post.  </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/azheglov.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/azheglov.wordpress.com/116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/azheglov.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/azheglov.wordpress.com/116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/azheglov.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/azheglov.wordpress.com/116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/azheglov.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/azheglov.wordpress.com/116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/azheglov.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/azheglov.wordpress.com/116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/azheglov.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/azheglov.wordpress.com/116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/azheglov.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/azheglov.wordpress.com/116/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=azheglov.wordpress.com&amp;blog=6708261&amp;post=116&amp;subd=azheglov&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://azheglov.wordpress.com/2010/03/31/a-medium-sized-list-of-agile-practices/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/22ac2ff7313d8e523a5950a687670d0c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">author</media:title>
		</media:content>
	</item>
		<item>
		<title>Dependency Injection Frameworks for .NET</title>
		<link>http://azheglov.wordpress.com/2010/01/20/dependency-injection-frameworks-for-net/</link>
		<comments>http://azheglov.wordpress.com/2010/01/20/dependency-injection-frameworks-for-net/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 04:28:09 +0000</pubDate>
		<dc:creator>azheglov</dc:creator>
				<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://azheglov.wordpress.com/?p=99</guid>
		<description><![CDATA[Robert Martin conducted an unscientific poll of .NET developers last weekend, asking them what dependency injection (or inversion-of-control) framework they use. Then he tweeted the results and described the poll as &#8220;unscientific&#8221;, &#8220;not conclusive&#8221;, definitely &#8220;not bogus&#8221; and maybe having &#8230; <a href="http://azheglov.wordpress.com/2010/01/20/dependency-injection-frameworks-for-net/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=azheglov.wordpress.com&amp;blog=6708261&amp;post=99&amp;subd=azheglov&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Robert Martin conducted an unscientific poll of .NET developers last weekend, asking them what dependency injection (or inversion-of-control) framework they use.  Then he <a href="http://twitter.com/unclebobmartin/status/7881785050">tweeted the results</a> and described the poll as &#8220;unscientific&#8221;, &#8220;not conclusive&#8221;, definitely &#8220;not bogus&#8221; and maybe having something to do <a href="http://twitter.com/unclebobmartin/status/7882525059">&#8220;with the kind of people who work/tweet on Sunday.&#8221;</a></p>
<p>Here are the tabulated results.  Not only there is no clear winner, we have several strong contenders.</p>
<table cellspacing="5">
<tr>
<td><b>Product</b></td>
<td><b>Votes</b></td>
<td><b>%</b></td>
</tr>
<tr>
<td>Structure Map</td>
<td>14</td>
<td>25%</td>
</tr>
<tr>
<td>Windsor</td>
<td>13</td>
<td>23%</td>
</tr>
<tr>
<td>Unity</td>
<td>10</td>
<td>18%</td>
</tr>
<tr>
<td>NInject</td>
<td>9</td>
<td>16%</td>
</tr>
<tr>
<td>autofac</td>
<td>6</td>
<td>11%</td>
</tr>
<tr>
<td>func</td>
<td>2</td>
<td>4%</td>
</tr>
<tr>
<td>linfu</td>
<td>1</td>
<td>2%</td>
</tr>
<tr>
<td>Spring</td>
<td>1</td>
<td>2%</td>
</tr>
</table>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/azheglov.wordpress.com/99/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/azheglov.wordpress.com/99/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/azheglov.wordpress.com/99/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/azheglov.wordpress.com/99/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/azheglov.wordpress.com/99/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/azheglov.wordpress.com/99/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/azheglov.wordpress.com/99/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/azheglov.wordpress.com/99/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/azheglov.wordpress.com/99/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/azheglov.wordpress.com/99/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/azheglov.wordpress.com/99/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/azheglov.wordpress.com/99/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/azheglov.wordpress.com/99/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/azheglov.wordpress.com/99/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=azheglov.wordpress.com&amp;blog=6708261&amp;post=99&amp;subd=azheglov&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://azheglov.wordpress.com/2010/01/20/dependency-injection-frameworks-for-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/22ac2ff7313d8e523a5950a687670d0c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">author</media:title>
		</media:content>
	</item>
		<item>
		<title>Recommended Software Blogs</title>
		<link>http://azheglov.wordpress.com/2010/01/02/recommended-software-blogs/</link>
		<comments>http://azheglov.wordpress.com/2010/01/02/recommended-software-blogs/#comments</comments>
		<pubDate>Sat, 02 Jan 2010 21:02:40 +0000</pubDate>
		<dc:creator>azheglov</dc:creator>
				<category><![CDATA[reading]]></category>

		<guid isPermaLink="false">http://azheglov.wordpress.com/?p=80</guid>
		<description><![CDATA[Probably, the best thing I posted on this blog in 2009 is located permanently on the right hand side of the main page &#8211; the Blogroll. It&#8217;s a list of about 40 software-related blogs that I found to be the &#8230; <a href="http://azheglov.wordpress.com/2010/01/02/recommended-software-blogs/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=azheglov.wordpress.com&amp;blog=6708261&amp;post=80&amp;subd=azheglov&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Probably, the best thing I posted on this blog in 2009 is located permanently on the right hand side of <a href="http://azheglov.wordpress.com/">the main page</a> &#8211; the Blogroll.  It&#8217;s a list of about 40 software-related blogs that I found to be the most helpful to me as a programmer.</p>
<p>I started following <a href="http://www.noop.nl/2009/09/top-200-blogs-for-developers-q3-2009.html">Top 200 Blogs for Developers</a> posted on <a href="http://www.noop.nl/">NOOP.NL</a> in the first half of the year.  Throughout the year, I found several cool blogs that weren&#8217;t originally on the list and unsubscribed from others to reduce the list to something that I both find useful and have time to read regularly.  I didn&#8217;t use rankings or follow any algorithm; when I liked a blog post and found it relevant at the same time, I simply moved it into a separate folder.</p>
<p>What do these blogs write about?  New trends in software, programming techniques, new languages and frameworks, software craftsmanship, clean code, test-driven development, managing software development, agile, and many more topics.</p>
<p>I&#8217;d probably go as far as to say this blogroll is probably the only thing of value this blog produced in 2009.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/azheglov.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/azheglov.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/azheglov.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/azheglov.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/azheglov.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/azheglov.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/azheglov.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/azheglov.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/azheglov.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/azheglov.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/azheglov.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/azheglov.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/azheglov.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/azheglov.wordpress.com/80/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=azheglov.wordpress.com&amp;blog=6708261&amp;post=80&amp;subd=azheglov&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://azheglov.wordpress.com/2010/01/02/recommended-software-blogs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/22ac2ff7313d8e523a5950a687670d0c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">author</media:title>
		</media:content>
	</item>
		<item>
		<title>Unit Tests Using Isolation Frameworks: Slides Posted</title>
		<link>http://azheglov.wordpress.com/2009/12/22/unit-tests-using-isolation-frameworks-slides-posted/</link>
		<comments>http://azheglov.wordpress.com/2009/12/22/unit-tests-using-isolation-frameworks-slides-posted/#comments</comments>
		<pubDate>Wed, 23 Dec 2009 02:43:15 +0000</pubDate>
		<dc:creator>azheglov</dc:creator>
				<category><![CDATA[speaking]]></category>

		<guid isPermaLink="false">http://azheglov.wordpress.com/?p=73</guid>
		<description><![CDATA[I&#8217;ve posted the slides from my FISSION&#8217;09 talk titled Unit Tests Using Isolation Frameworks on Slideshare. &#8220;Fission&#8221; is the name of Desire2Learn&#8216;s internal software developers&#8217; conference. The organizers chose this name apparently to be the opposite of the Fusion, which &#8230; <a href="http://azheglov.wordpress.com/2009/12/22/unit-tests-using-isolation-frameworks-slides-posted/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=azheglov.wordpress.com&amp;blog=6708261&amp;post=73&amp;subd=azheglov&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve posted the slides from <a href="http://www.slideshare.net/azheglov/unit-tests-using-isolation-frameworks">my FISSION&#8217;09 talk titled <em>Unit Tests Using Isolation Frameworks</em> on Slideshare</a>.</p>
<p>&#8220;Fission&#8221; is the name of <a href="http://www.desire2learn.com/">Desire2Learn</a>&#8216;s internal software developers&#8217; conference.  The organizers chose this name apparently to be the opposite of the Fusion, which is the name of the annual user&#8217;s conference.  My talk was on a general software development topic, didn&#8217;t contain any D2L-specific, so I made only a few minor edits to the slides.</p>
<p>I felt strongly about speaking on this topic.  Writing good, maintainable unit tests is becoming increasingly more important, <em>isolation</em> (or <em>mocking</em>) plays a critical role in that, yet few developers really understand how to do it.  My goal was to show why and when to isolate, how to do it right, what tools are available, clarify the most confusing terms (Mocks? Stubs?) and give listeners pointers to resources to learn more.</p>
<p>The talk was designed to fit into a 30-minute slot (it did!) with a few minutes left for Q&amp;A. Enjoy!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/azheglov.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/azheglov.wordpress.com/73/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/azheglov.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/azheglov.wordpress.com/73/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/azheglov.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/azheglov.wordpress.com/73/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/azheglov.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/azheglov.wordpress.com/73/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/azheglov.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/azheglov.wordpress.com/73/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/azheglov.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/azheglov.wordpress.com/73/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/azheglov.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/azheglov.wordpress.com/73/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=azheglov.wordpress.com&amp;blog=6708261&amp;post=73&amp;subd=azheglov&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://azheglov.wordpress.com/2009/12/22/unit-tests-using-isolation-frameworks-slides-posted/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/22ac2ff7313d8e523a5950a687670d0c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">author</media:title>
		</media:content>
	</item>
		<item>
		<title>On Third-Party Testing Tools in Open-Source Projects</title>
		<link>http://azheglov.wordpress.com/2009/12/02/on-third-party-testing-tools-in-open-source-projects/</link>
		<comments>http://azheglov.wordpress.com/2009/12/02/on-third-party-testing-tools-in-open-source-projects/#comments</comments>
		<pubDate>Thu, 03 Dec 2009 04:00:07 +0000</pubDate>
		<dc:creator>azheglov</dc:creator>
				<category><![CDATA[open source]]></category>

		<guid isPermaLink="false">http://azheglov.wordpress.com/?p=61</guid>
		<description><![CDATA[I found an interesting dilemma while working on an open-source project. My asking about possible solutions on Stack Overflow and the LinkedIn Q&#38;A Software Development category didn&#8217;t yield any good answers, so had to do some research to find the &#8230; <a href="http://azheglov.wordpress.com/2009/12/02/on-third-party-testing-tools-in-open-source-projects/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=azheglov.wordpress.com&amp;blog=6708261&amp;post=61&amp;subd=azheglov&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I found an interesting dilemma while working on an open-source project.  My asking about possible solutions on <a href="http://stackoverflow.com/questions/1785442/include-nunit-in-my-open-source-project-download">Stack Overflow</a> and the <a href="http://www.linkedin.com/answers/technology/software-development/TCH_SFT/594758-28281464">LinkedIn Q&amp;A Software Development category</a> didn&#8217;t yield any good answers, so had to do some research to find the solution.</p>
<p>But what was the problem?</p>
<p>First of all, the open-source product has two different distributions: downloadable binaries for end users and a source code repository for developers and contributors (and end users who want to peek at the source code!).  The repository contains the production code, which compiles into those binaries, and &#8212; because it was written in the modern clean-code, TDD manner &#8212; a bunch of automated tests.  The tests have dependencies on third-party tools.  The problem is, can we include those tools in the repository?  Is their license text required, no, is it even legal?  What is the common practice?</p>
<p>It turned out not many people know the answer or understand this kind of stuff &#8211; just read the answers I got.</p>
<p>Before I reveal the correct answer, why do I want to check in those tools?  I want to send a message that tests matter and this is how we do things here.  At the same time, I want it to be very easy for the potential contributors to check out the code and run tests right away!  I don&#8217;t them to worry whether they should download NUnit version 2.2.8, 2.4.7 or 2.5.2.</p>
<p>OK, the correct answer: based on my analysis, <a href="http://stackoverflow.com/questions/1785442/include-nunit-in-my-open-source-project-download/1820772#1820772">here</a>, the common practice is to check in such dependencies.  A copy of the license must be included if the third-party product&#8217;s license requires it.  I learned along the way that the <strong>Apache</strong> license has such a requirement, while <strong>zlib</strong> and the <strong>New BSD License</strong>(a. k. a. the &#8220;three-clause BSD) do not.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/azheglov.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/azheglov.wordpress.com/61/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/azheglov.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/azheglov.wordpress.com/61/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/azheglov.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/azheglov.wordpress.com/61/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/azheglov.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/azheglov.wordpress.com/61/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/azheglov.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/azheglov.wordpress.com/61/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/azheglov.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/azheglov.wordpress.com/61/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/azheglov.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/azheglov.wordpress.com/61/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=azheglov.wordpress.com&amp;blog=6708261&amp;post=61&amp;subd=azheglov&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://azheglov.wordpress.com/2009/12/02/on-third-party-testing-tools-in-open-source-projects/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/22ac2ff7313d8e523a5950a687670d0c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">author</media:title>
		</media:content>
	</item>
		<item>
		<title>I&#8217;m Quoted, Part 2</title>
		<link>http://azheglov.wordpress.com/2009/11/13/im-quoted-part-2/</link>
		<comments>http://azheglov.wordpress.com/2009/11/13/im-quoted-part-2/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 05:20:36 +0000</pubDate>
		<dc:creator>azheglov</dc:creator>
				<category><![CDATA[writing]]></category>

		<guid isPermaLink="false">http://azheglov.wordpress.com/?p=57</guid>
		<description><![CDATA[Continuing what I started in the previous post, I want to mention three more articles that quoted me this year. Degrading Web Apps Gracefully (appeared on the Linux Foundation&#8217;s Web site in April) discussed how to build Web applications such &#8230; <a href="http://azheglov.wordpress.com/2009/11/13/im-quoted-part-2/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=azheglov.wordpress.com&amp;blog=6708261&amp;post=57&amp;subd=azheglov&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Continuing what I started in the previous post, I want to mention three more articles that quoted me this year.</p>
<p><a href="http://ldn.linuxfoundation.org/article/degrading-web-apps-gracefully">Degrading Web Apps Gracefully</a> (appeared on the Linux Foundation&#8217;s Web site in April) discussed how to build Web applications such that they work on many different browsers in use these days.  I contributed two bits of advice.  In the <em>Write for the Audience</em> section, I reflected on what we did at WhenU to collect data and know the breakdown of our userbase by the combination of OS and browser.  In the following section, <em>Testing is a Must</em>, I described how virtualization technology, VMWare in particular, can be used to test those combinations.  I also made a reference to the minor deviation of the HTTP protocol implementation on Chinese- and Korean-localized versions of Windows that burned us at the end of 2005.</p>
<p>While contributing to <a href="http://www.javaworld.com/community/node/2836">Convincing the Boss to Pay for Developer Training</a>, I stated my belief that developers get a lot more from books kept on their desks than books kept on a common shelf or a company library that they have to walk to.  They simply open the book much more often.</p>
<p>An finally, a great article <a href="http://www.javaworld.com/community/node/3130">Gosh, Things Are Better for Developers These Days</a> came out in June.  People were asked to name what is important in software development today that didn&#8217;t exist ten years ago.  We actually found quite a few things that seemed new but existed in the 1990s and several things that seemed old but definitely invented after 2000.  Although none of the contributors were mentioned by name, the &#8220;LinkedIn friend&#8221; in the 4th paragraph from the bottom, speaking about test-driven development, unit-testing and mocking frameworks was me.  I also pointed out to the author that the <em>Design Patterns</em> book by the Gang of Four was published in 1994, so it was not 10, but 15 years old.  I was very surprised myself when I looked that up and thought that was a good counterexample.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/azheglov.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/azheglov.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/azheglov.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/azheglov.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/azheglov.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/azheglov.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/azheglov.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/azheglov.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/azheglov.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/azheglov.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/azheglov.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/azheglov.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/azheglov.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/azheglov.wordpress.com/57/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=azheglov.wordpress.com&amp;blog=6708261&amp;post=57&amp;subd=azheglov&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://azheglov.wordpress.com/2009/11/13/im-quoted-part-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/22ac2ff7313d8e523a5950a687670d0c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">author</media:title>
		</media:content>
	</item>
	</channel>
</rss>
