<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Kurt Grandis &#187; Software Engineering</title>
	<atom:link href="http://kurtgrandis.com/blog/category/software-engineering/feed/" rel="self" type="application/rss+xml" />
	<link>http://kurtgrandis.com/blog</link>
	<description>Software Engineering &#38; Entrepreneurship</description>
	<lastBuildDate>Sat, 29 May 2010 14:21:55 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>GHAPACK: A Library for the Generalized Hebbian Algorithm</title>
		<link>http://kurtgrandis.com/blog/2009/02/08/ghapack-a-library-for-the-generalized-hebbian-algorithm/</link>
		<comments>http://kurtgrandis.com/blog/2009/02/08/ghapack-a-library-for-the-generalized-hebbian-algorithm/#comments</comments>
		<pubDate>Mon, 09 Feb 2009 03:34:04 +0000</pubDate>
		<dc:creator>kurt</dc:creator>
				<category><![CDATA[Data]]></category>
		<category><![CDATA[Machine Learning]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[gha]]></category>
		<category><![CDATA[lsa]]></category>
		<category><![CDATA[lsi]]></category>
		<category><![CDATA[machinelearning]]></category>
		<category><![CDATA[svd]]></category>

		<guid isPermaLink="false">http://kurtgrandis.com/blog/?p=31</guid>
		<description><![CDATA[I recently joined a new open source project called GHAPACK. The project currently provides the functionality and the means to use the Generalized Hebbian Algorithm. I came across this project after banging my head against some of the practical limitations of Singular Value Decomposition (SVD). GHA is a Hebbian-based neural network-like algorithm that approximates SVD&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>I recently joined a new open source project called <a href="http://sourceforge.net/projects/ghapack/">GHAPACK</a>. The project currently provides the functionality and the means to use the Generalized Hebbian Algorithm. I came across this project after banging my head against some of the practical limitations of Singular Value Decomposition (SVD). GHA is a Hebbian-based neural network-like algorithm that approximates SVD&#8217;s ability to perform eigen decomposition. Its added bonus is that it allows for incremental training so you can refine your model with new data without having to recompute using the entire dataset.</p>
<h2>Your Trusty SVD Tool</h2>
<p>SVD is one of those tools that every machine learning practitioner and computational geek will pull out at some time or another. It&#8217;s a powerful matrix factorization technique that allows you to get at the matrix&#8217;s eigenvectors and eigenvalues. One of reason it tends to be used so often is the fact that it can be used on those pesky <em>M x N </em>matrices, which us data junkies tend to generate.</p>
<p>For most small problems I can just use scipy and numpy&#8217;s <em>svd</em> and never give it a second thought. <a href="http://www.netlib.org/lapack/">LAPACK&#8217;s</a> suite of SVD routines power the <em>svd</em> functions of scipy, numpy, and MATLAB among others. It is developed for dense matrices and processes them in their entirety. What happens when you start dealing with problems in high-dimensional space? Those dense representations and full processing are expensive. So, when your problem space is better suited for sparse matrices you tend to run into not enough memory, non-convergence&#8230;no SVD.</p>
<p>At the time I was considering a problem that would be well-suited for incremental training, meaning I did not want to have to rerun the entire dataset through SVD after adding a small set of new data; GHA lets you avoid that sort of inconvenience and approximates the same outcome (as far as my problem was concerned).</p>
<h2>GHAPACK</h2>
<p>GHAPACK is written by <a href="http://www.dcs.shef.ac.uk/~genevieve/lsa.html">Genevieve Gorrell</a> and based on her work using GHAs to perform Latent Semantic Analysis (LSA).</p>
<h3>&#8220;Offline&#8221; Calculations</h3>
<p>My first order of business upon joining the project was to get the offline training working. This allows you to compute a pseudo-SVD based on a massive matrix without having to load the whole thing into memory.  No more out-of-memory segfaults. Now, you&#8217;re just limited by the resiliency of your hardware. This is now working.</p>
<h3>Memory Management</h3>
<p>I addressed a few memory leaks, but will likely do some restructuring to optimize memory management.</p>
<h3>Resource Library</h3>
<p>I would like the core of the GHA magic to be extracted into a library that others could embed in their own projects. So, I intend to move core functionality into a library and restructure the existing apps into commandline tools that utilize those libs.</p>
<h3>Performance</h3>
<p>GHA, off-the-bat, is not known for its speed compared to some other eigen decomposition approaches. Besides that, there is room for some major gains in performance. Let&#8217;s see what we can squeeze out of GHAPACK and perhaps lean on things like BLAS.</p>
<h3>Testing Framework</h3>
<p>A testing framework that objectively keeps track of performance gains, while ensuring computational integrity through unit testing always makes refactoring work that much less stressful.</p>
<p>Lots of work to do and a hearty thanks to Professor Gorrell for letting me join her efforts.</p>
<hr />
<h2>Other SVD Resources</h2>
<p>There are other SVD libraries out there that will carry you farther if SVD is what you really want and not necessarily the means to an end.</p>
<p><a href="http://www.netlib.org/scalapack/">ScaLAPACK</a> has parallel SVD code, which creams LAPACK&#8217;s performance when you have access to multiple cores and/or MPI. <a href="http://www.caam.rice.edu/software/ARPACK/">ARPACK</a> and <a href="http://www.netlib.org/svdpack/">SVDPACK</a> both offer Lanczos-based SVD solutions for sparse matrices with ARPACK being well-suited for parallel processing.</p>
]]></content:encoded>
			<wfw:commentRss>http://kurtgrandis.com/blog/2009/02/08/ghapack-a-library-for-the-generalized-hebbian-algorithm/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Agile Scapegoating and People over Process</title>
		<link>http://kurtgrandis.com/blog/2008/11/19/agile-scapegoating-and-people-over-process/</link>
		<comments>http://kurtgrandis.com/blog/2008/11/19/agile-scapegoating-and-people-over-process/#comments</comments>
		<pubDate>Wed, 19 Nov 2008 07:28:32 +0000</pubDate>
		<dc:creator>kurt</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[xp]]></category>

		<guid isPermaLink="false">http://kurtgrandis.com/blog/?p=23</guid>
		<description><![CDATA[Last week James Shore posted an article The Decline and Fall of Agile that generated quite a bit of discussion. He points out many of atrocities and failures in software development and software project management done under guise of &#8220;Agile&#8221; or &#8220;Scrum&#8221; are often not true implementations. You have these teams who say they are doing Scrum, but the only things [...]]]></description>
			<content:encoded><![CDATA[<p>Last week James Shore posted an article <a href="http://jamesshore.com/Blog/The-Decline-and-Fall-of-Agile.html">The Decline and Fall of Agile</a> that generated quite a bit of discussion. He points out many of atrocities and failures in software development and software project management done under guise of &#8220;Agile&#8221; or &#8220;Scrum&#8221; are often not true implementations. You have these teams who say they are doing Scrum, but the only things that actually get adopted are sprints and scrums. So many  of these failed groups ignore the important and difficult aspects of Scrum like self-organization, shippable product goals, and self-reflection &amp; improvement. As Jason says, they are &#8220;having their dessert every night and skipping their vegetables.&#8221;</p>
<p>Ken Schwaber replied to Jason&#8217;s article:</p>
<blockquote><p>When Scrum is mis-used, the results are iterative, incrementa​l death marches. This is simply waterfall done more often without any of the risk mitigation techniques or people and engineerin​g practices needed to make Scrum work.</p></blockquote>
<p>The article also sparked Bob Martin to write an essay <a href="http://blog.objectmentor.com/articles/2008/11/16/dirty-rotten-scrumdrels">&#8220;Dirty Rotten ScrumDrels&#8221;</a> in response to some of the Scrum scapegoating that has been going on recently. Check out the comments for some Uncle Bob-Shore dialog.</p>
<p>Things like self-reflection and process and work reviews are all practices that people naturally adopt to improve themselves. I think successful developers tend to do this anyways in order to stay ahead of the curve. When you have mediocre teams flailing about who           are looking for a silver bullet and turn to things like Scrum who don&#8217;t already do this sort of thing, it is easy for them to brush that off as a triviality; if they haven&#8217;t already seen the value of it, it just gets lost in the noise.</p>
<p>I share Mr. Shore&#8217;s frustration in seeing Agile and Scrum being blamed for the shortcomings of teams and improper implementations, when you&#8217;ve seen the real thing work over and over.</p>
]]></content:encoded>
			<wfw:commentRss>http://kurtgrandis.com/blog/2008/11/19/agile-scapegoating-and-people-over-process/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>FogBugz: One Hot Ride</title>
		<link>http://kurtgrandis.com/blog/2008/03/19/fogbugz-one-hot-ride/</link>
		<comments>http://kurtgrandis.com/blog/2008/03/19/fogbugz-one-hot-ride/#comments</comments>
		<pubDate>Thu, 20 Mar 2008 04:48:26 +0000</pubDate>
		<dc:creator>kurt</dc:creator>
				<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://kurtgrandis.com/blog/2008/03/19/fogbugz-one-hot-ride/</guid>
		<description><![CDATA[So, a few months ago I came across a video by Fog Creek demonstrating the latest version of their project management software FogBugz. Wow. It looked great and appeared to have many of the features I had been searching for across the project management software terrain.
It was not until a couple of weeks ago that [...]]]></description>
			<content:encoded><![CDATA[<p>So, a few months ago I came across a <a href="http://www.fogcreek.com/FogBugz/60movie/60movie.html">video</a> by Fog Creek demonstrating the latest version of their project management software <a href="http://www.fogcreek.com/FogBugz/">FogBugz</a>. Wow. It looked great and appeared to have many of the features I had been searching for across the project management software terrain.</p>
<p>It was not until a couple of weeks ago that I actually set up a trial account. I signed up and began configuring FogBugz to manage a small project that would likely run its full course over three to four 2 week iterations. Let me start by saying that FogBugz has been a pleasure to work with.</p>
<h3>Simple and Intuitive</h3>
<p>The folks over at Fog Creek have done a good job minimizing the amount of clicks required to accomplish some basic tasks like creating new cases/features/bugs. Lists of bugs and features can be viewed by various characteristics through filters or by easily accessible reports. It might seem like these features would be difficult to get excited about in a world filled with things like Django and Rails, but FogBugz managed to get its factors right making the process &#8220;flow&#8221; really well.</p>
<h3>Oh, The Integration</h3>
<p>Wiki, bug tracker, project management/prioritization view, customer email (support), and source control all talking to one another&#8230; Again, while other applications might offer these same tools and integrate some subset of them, FogBugz goes a step further. The integration is tight and using these utilities feels like you are just dealing with another dimension of the same data as opposed to using two independent applications that are similarly branded and share some ability to markup references.</p>
<p>That being said, I still have not yet figured out how to integrate source control. You can download a plugin for Visual Studio if that&#8217;s your tool of choice, but my experiments have been taking place in a Linux environment. There are a pair of shell scripts available for download that should solve my problem, but it was not immediately clear to me how to use them. That&#8217;s my next mission.</p>
<h3>Evidence-based Planning</h3>
<p>I am a huge proponent of evidence-based planning and it looks like they&#8217;ve done a good job bringing this capability to those who might not be familiar with the process. The gist of it is that by capturing both project estimates (at the feature level) and actual time taken you can build a model of your estimate accuracy, development velocity and then in turn generate release forecasts based on historical data. So with a click of a button (and disciplined engineers who enter their estimates and elapsed times) you can have nice reports and charts showing when you are most likely to deliver your releases and with what features &#8212; all based on historical data. It is a powerful concept and well executed here.</p>
<p>FogBugz goes as far as to model the estimation error of individual developers. This sounds great and is a good story, but I wonder how useful this actually is in reality where developers learn from past experiences and self-correct; without some Bayesian filtering I could see these values become noninformative fairly quickly.</p>
<p>I am also still playing around with the best way of capturing my existing process where we use team-based story point estimation. It seems like it will be straightforward, but I am waiting for a few gotchyas lurking in the darkness.</p>
<h3>Things That Make Me Go &#8220;Hmmm&#8221;</h3>
<p>I have struggled a bit to fit my Scrum-based backlog management mindset into FogBugz. The bugtracker allows features and bugs to be prioritized. Those priority levels are totally configurable and could be defined for whatever level of detail you need. One thing I am missing is the ability to deal with micro sprint-level priorities (i.e. what order should this set of features be implemented in to minimize overall project risk?). I realize I could define as many priority levels as I need, but it would start getting a bit tedious defining that many sublevels. Fortunately, the project I am currently using FogBugz for is small enough that I can manage without that functionality. It does however become important when you start increasing the team size and dealing with projects where you really do have a rank ordering of feature priorities. It could be that <a href="http://www.danube.com/scrumworks/">ScrumWorks</a> by Danube Technologies has just spoiled me with their Scrum-based backlog system.</p>
<p>Another thing that has detracted from my experience is its response latency, but let me say that it is not bad. I think it might be the case that the application&#8217;s simplicity and overall experience allows me to forget that it is a remotely hosted application. I wonder how responsive the server license version is, where you host the code and the server is just working with your projects and perhaps on-site. Maybe I will find out one day.</p>
<h3>Conclusion</h3>
<p>My preliminary run through FogBugz has been overwhelmingly positive. It is a powerfully usable application that offers tight integration amongst core tools used in not only the development, but also the support of software applications. Check out the official highlighted feature <a href="http://www.fogcreek.com/FogBugz/details.html">list</a>.<br />
If you are looking around for some project management software then definitely check FogBugz out and see how it fits with your current process. I am still waiting to see how FogBugz will fit into our overall process once it has had a chance to run the full cycle &#8212; so far, it is looking good.</p>
]]></content:encoded>
			<wfw:commentRss>http://kurtgrandis.com/blog/2008/03/19/fogbugz-one-hot-ride/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
