<?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>Blog Pav Blog &#187; Programming</title>
	<atom:link href="http://www.pavley.com/category/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.pavley.com</link>
	<description>“A great leap in the dark” – Thomas Hobbes</description>
	<lastBuildDate>Sun, 05 Sep 2010 19:38:56 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Turing Bold into Strong with Regex &amp; NotePad++</title>
		<link>http://www.pavley.com/2010/09/05/turing-bold-into-strong-with-regex/</link>
		<comments>http://www.pavley.com/2010/09/05/turing-bold-into-strong-with-regex/#comments</comments>
		<pubDate>Sun, 05 Sep 2010 19:00:08 +0000</pubDate>
		<dc:creator>pav</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Laziness]]></category>
		<category><![CDATA[Regular Expressions]]></category>

		<guid isPermaLink="false">http://www.pavley.com/2010/09/05/turing-bold-into-strong-with-regex/</guid>
		<description><![CDATA[I&#8217;ve been hand coding a site and I was a little lazy. Instead in using the strong tag to make text look bold I used the bold tag.
Ok, that might not be a big deal to you but to some HTML fanatics the difference between &#60;b&#62;Hi There&#60;/b&#62; and &#60;strong&#62;Hi There&#60;/strong&#62; is ground for excommunication from the cool [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been hand coding a site and I was a little lazy. Instead in using the <em>strong tag</em> to make text look bold I used the <em>bold tag</em>.</p>
<p>Ok, that might not be a big deal to you but to some HTML fanatics the difference between &lt;b&gt;Hi There&lt;/b&gt; and &lt;strong&gt;Hi There&lt;/strong&gt; is ground for excommunication from the cool kids club. Being lazing I figured the difference was not important enough to warrant me typing an extra 10 characters for each tag. But in the middle of the project I saw the light. (Modern browsers, text readers, and future things we have not invented yet will &#8220;do the right thing&#8221; with strong tags. Bold tags are just fossilized formatting.)</p>
<p>So now I had a bigger problem: How do I turn all those &lt;b&gt;&#8217;s and &lt;/b&gt;&#8217;s into &lt;strong&gt;&#8217;s and &lt;/strong&gt;&#8217;s? Of course regular expressions would work&#8211;if I could figure out the syntax. I mean, it&#8217;s been a long time and I always found regex to be the classical Latin of the programming world. Boring but important <img src='http://www.pavley.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>To complicate things I am using <a href="http://notepad-plus-plus.org/">NotePad++</a> to edit my hand hold HTML. NotePad++ is a great editor (and it&#8217;s free) but often does things it&#8217;s own way. It&#8217;s the Frank Sinatra of Window&#8217;s text editors.</p>
<p>To refresh my memory of regex syntax I found a great site, <a href="http://gskinner.com/RegExr/">RegExr</a>, that let&#8217;s you experiment with regular expressions until you beat them into submission. It&#8217;s written in <a href="http://www.adobe.com/products/flex/">Flex 3</a> and is a fine example of both a programmer&#8217;s tool and an Adobe rich media application.</p>
<p>After a bit of fooling around I discovered the pattern to capture a string inside a bold tag&#8230;</p>
<pre>/&lt;b&gt;(.*)&lt;/b&gt;/gim</pre>
<p>and to replacement was</p>
<pre>&lt;strong&gt;$1&lt;/strong&gt;</pre>
<p>This magic would not work if the bold tags had any attributes but I would have used an actual CSS style if I needed any more complexity than bold text.</p>
<p>Anyway this didn&#8217;t quite work with NotePad++. A little more digging (via <a href="http://www.google.com/search?q=google">Google</a> and <a href="http://stackoverflow.com/">Stack Overflow</a> not the NotePad++ help system) and I discovered that NotePad++ doesn&#8217;t need the regex switches and uses / instead of $ for captures. The working search and replace strings are&#8230;</p>
<pre>
<pre style="font: normal normal normal 12px/18px Consolas, Monaco, 'Courier New', Courier, monospace;">&lt;b&gt;(.*)&lt;/b&gt;</pre>
<pre style="font: normal normal normal 12px/18px Consolas, Monaco, 'Courier New', Courier, monospace;">&lt;strong&gt;/1&lt;strong&gt;</pre>
</pre>
<p>Yey! Now I can continue to be lazy and fix it later!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pavley.com/2010/09/05/turing-bold-into-strong-with-regex/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android SDK Compatibility with Eclipse and JDK</title>
		<link>http://www.pavley.com/2010/08/08/android-sdk-compatibility-with-eclipse-and-jdk/</link>
		<comments>http://www.pavley.com/2010/08/08/android-sdk-compatibility-with-eclipse-and-jdk/#comments</comments>
		<pubDate>Sun, 08 Aug 2010 15:13:38 +0000</pubDate>
		<dc:creator>pav</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tech Trends]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.pavley.com/?p=255</guid>
		<description><![CDATA[I recently switched my development workstation from a MacBook Pro to a Windows desktop PC. Yeah, I know, I&#8217;m going against the trends but it&#8217;s a sweet machine I assembled myself based on recommendations from Ash.
Immediately I ran into compatibility problems with Google&#8217;s Android SDK and the current versions of Eclipse (Helios) and the Java Developer Kit [...]]]></description>
			<content:encoded><![CDATA[<p>I recently switched my development workstation from a MacBook Pro to a Windows desktop PC. Yeah, I know, I&#8217;m going against the trends but it&#8217;s a sweet machine I assembled myself based on recommendations from Ash.</p>
<p>Immediately I ran into compatibility problems with Google&#8217;s <a href=" If you develop on Mac OS X or Linux, you do not need a special driver to debug your application on an Android-powered device.">Android SDK</a> and the current versions of <a href="http://www.eclipse.org/">Eclipse </a>(Helios) and the <a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">Java Developer Kit</a> (JDK Version 6). In a nutshell Google&#8217;s cool Android dev tools don&#8217;t work with Helios&#8211;you need to install Eclipse 3.5 (Galileo). Galileo require&#8217;s JDK Version 5. All this info is prominently featured on the Android <a href="http://developer.android.com/sdk/requirements.html">system reqs</a> page&#8211;but <a href="http://www.wired.com/gadgetlab/2008/01/steve-jobs-peop/">who reads any more</a>?</p>
<p>Digging up old versions of Eclipse is easy. You can find <a href="http://www.eclipse.org/downloads/packages/release/galileo/sr2">Galileo here</a>.</p>
<p>Digging up old versions of the JDK is a bureaucratic nightmare. You can find <a href="http://www.oracle.com/technetwork/java/javase/downloads/index-jdk5-jsp-142662.html">JDK Version 5 here</a> but to install it you have to fill out a form, give away PII, and then wait for an email.</p>
<p>One way around Sun Oracle&#8217;s walled garden is to install <a href="http://download.openoffice.org/">Open Office 3.2.1</a> which installs Java 1.6 (JDK Version 6) in such away that everything compiles.</p>
<p>Now that Google is <a href="http://www.ditii.com/2010/06/01/google-switching-over-to-mac-os-x-and-linux-os-on-windows-security-issues/">throwing away</a> all their Windows PC&#8217;s I&#8217;m sure this compatibility nonsense will get even worse. Here is a note from Google about <a href="http://developer.android.com/sdk/installing.html">enabling debugging</a> of Android Phones:</p>
<blockquote><p>If you develop on Mac OS X or Linux, you do not need a special driver to debug your application on an Android-powered device.</p></blockquote>
<p>Damn it! I might have to go back to coding on the Mac and only using my PC for trival tasks like gaming and web browsing. Ironic huh?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pavley.com/2010/08/08/android-sdk-compatibility-with-eclipse-and-jdk/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Shorter Timescale</title>
		<link>http://www.pavley.com/2009/12/03/the-shorter-timescale/</link>
		<comments>http://www.pavley.com/2009/12/03/the-shorter-timescale/#comments</comments>
		<pubDate>Thu, 03 Dec 2009 23:47:39 +0000</pubDate>
		<dc:creator>pav</dc:creator>
				<category><![CDATA[Agile Principles]]></category>
		<category><![CDATA[Management & Leadership]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[project management]]></category>
		<category><![CDATA[Scrum]]></category>

		<guid isPermaLink="false">http://www.pavley.com/?p=158</guid>
		<description><![CDATA[
I&#8217;m reading a very scary book right now: Heidegger and a Hippo Walk Through Those Pearly Gates. It&#8217;s a funny and informative look at how philosophers and religious thinkers deal with death. I don&#8217;t want to be a spoiler but the basic message of the book is that most people live in denial of their [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-159" title="Eternity (Sprints Not Drawn To Scale)" src="http://www.pavley.com/wp-content/uploads/2009/12/Slide1.jpg" alt="Eternity (Sprints Not Drawn To Scale)" width="475" height="279" /></p>
<p>I&#8217;m reading a very scary book right now: <a href="http://www.amazon.com/Heidegger-Hippo-Through-Those-Pearly/dp/0670020834">Heidegger and a Hippo Walk Through Those Pearly Gates</a>. It&#8217;s a funny and informative look at how philosophers and religious thinkers deal with death. I don&#8217;t want to be a spoiler but the basic message of the book is that most people live in denial of their own mortality and most philosophers are trying to wake them up. Them being us.</p>
<p>This is especially true in software development. Any experienced engineer looking at a 6-12 month project plan will tell you there is a lot of denial going on. I don&#8217;t want to sound overly melodramatic but the 3rd Principle from the <a href="http://agilemanifesto.org/principles.html">Agile Manifesto</a>&#8230;</p>
<blockquote><p>Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.</p></blockquote>
<p>&#8230;is all about waking up and getting out of denial.</p>
<p>I covered the idea of <a href="http://www.pavley.com/2009/11/19/true-working-ness/">working software</a> in a previous blog post but &#8220;preference to the shorter timescale&#8221; idea deserves some focused attention all on it&#8217;s own.</p>
<p>If you live life to a <a href="http://www.youtube.com/watch?v=TNWg5DlWVa8">Tim McGraw</a> sound track then you don&#8217;t waste a lot of time on planning or doing things that are simply not going to happen. The idea of a preference for shorter timescales come from the principle that risk grows with distance into the future.</p>
<p>This principle doesn&#8217;t mean you shouldn&#8217;t dream big! I&#8217;ve met many engineers who tell me &#8220;Agile is only for minor tweaks, not big initiatives.&#8221; (No I won&#8217;t name names but I dare you guys to a blog war!) Your backlog should be as big as forever. It&#8217;s just that you plan and sprint for what you can achieve as a human mortal. Zeus and Hera can execute a 12 month plan with a waterfall process&#8211;Agile is not for immortals.</p>
<p>I like 2 week sprints (with one week of planning in between) for three reasons:</p>
<ol>
<li>It&#8217;s been my experience that (most) human mortals only have vague capacities for planning and managing large chunks of future time. Today, tomorrow, Next week are  cool. We live in a <em>bubble of now</em> that trails 1-2 weeks behind and runs 1-2 weeks ahead.</li>
<li>Engineers (and artists) are mostly <a href="http://www.ehow.com/how_5131069_understand-improve-international-business-communications.html">monochrons</a>. (Almost everyone else tend to be polychrons.) It&#8217;s part of the self selection process that leads people down the road of life to end up either alone in front of a computer (or piano or canvas) or in a group running around the planet making noise. Maybe it&#8217;s all due to <a href="http://www.wired.com/wired/archive/9.12/aspergers_pr.html">Asperger&#8217;s Syndrome</a> but the creative process seems to require that we focus on doing one thing at a time for a fixed period of time in a repeatable cycle.</li>
<li>Engineers (and artists) get lost in their work (the music of the spheres as it were) and lose track of time. Short sprints mean they can&#8217;t go too far astray before they check in with home base! Once an brilliant engineer told me it took a month to fix an ad server bug because he first had to rewrite Math.c. Good thing I checked in when I did or he might have rewritten all of UNIX!</li>
</ol>
<p>So if we end up working together I will ask you to think in short increments that give us plenty of time to capitalize on the future <img src='http://www.pavley.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.pavley.com/2009/12/03/the-shorter-timescale/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Mac OS 3 UX Simulator Updated!</title>
		<link>http://www.pavley.com/2009/11/24/mac-os-3-ux-simulator-updated/</link>
		<comments>http://www.pavley.com/2009/11/24/mac-os-3-ux-simulator-updated/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 23:36:19 +0000</pubDate>
		<dc:creator>pav</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[UI Design]]></category>

		<guid isPermaLink="false">http://www.pavley.com/?p=155</guid>
		<description><![CDATA[A modal About the Finder dialog box appears! Click here to see if you can figure out how to make it appear.
]]></description>
			<content:encoded><![CDATA[<p>A modal <em>About the Finder</em> dialog box appears! Click <a href="http://www.pavley.com/mac-os-3-ux-simulator/">here</a> to see if you can figure out how to make it appear.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pavley.com/2009/11/24/mac-os-3-ux-simulator-updated/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mac OS 3: User Center Design Exemplar</title>
		<link>http://www.pavley.com/2009/11/01/mac-os-3-user-center-design-exemplar/</link>
		<comments>http://www.pavley.com/2009/11/01/mac-os-3-user-center-design-exemplar/#comments</comments>
		<pubDate>Sun, 01 Nov 2009 23:05:08 +0000</pubDate>
		<dc:creator>pav</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tech Trends]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[UI Design]]></category>

		<guid isPermaLink="false">http://www.pavley.com/?p=111</guid>
		<description><![CDATA[
I nearly lost all my data a couple of weeks ago. Actually, I was in no danger at all of losing my data but the terribad UI of Apple&#8217;s Time Machine and Time Capsule made me think I did! Apple&#8217;s backup solution is like a good looking school yard bully with a hidden inferiority complex.
I [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="512" height="342" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.pavley.com/wp-content/uploads/2009/11/macpaint1.swf" /><embed type="application/x-shockwave-flash" width="512" height="342" src="http://www.pavley.com/wp-content/uploads/2009/11/macpaint1.swf"></embed></object></p>
<p>I nearly lost all my data a couple of weeks ago. Actually, I was in no danger at all of losing my data but the terribad UI of Apple&#8217;s <a href="http://www.apple.com/macosx/what-is-macosx/time-machine.html">Time Machine</a> and <a href="http://www.apple.com/timecapsule/">Time Capsule</a> made me think I did! Apple&#8217;s backup solution is like a good looking school yard bully with a hidden inferiority complex.</p>
<p>I used to back up everything manually and it was messy. To be fair Apple seemed to conserve all that backup mess with the Time Capsule wireless base station/terabyte network drive and its slick Time Machine backup application. It just seemed to work: No settings, no maintenance, no hunting for the disk with the 3rd season of <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewTVSeason?id=314435367&amp;s=143441">Buffy</a> on it.</p>
<p>On the rare occasion when I did need a missing or deleted file Time Machine made it easy, and entertaining, to find (nothing like zooming back in time to give lulz).</p>
<p>One evening last week my MacBook Pro died and upon restart got stuck at the <a href="http://osxbook.com/book/bonus/chapter5/panic/">kernel panic screen</a>. I took it <a href="http://www.tekserve.com/">Tek Serve</a> in NYC (where they are a million time smarter than Apple&#8217;s Genius Bar) and learned that a fresh re-install of Mac OS X was the solution.</p>
<p>To make a long story short, when I connected my revived MacBook Pro to Time Capsule it restored a backup from 4 months ago! That&#8217;s a generation in Internet years! Also it took over 12 hours! I was aghast!</p>
<p>With grim determination I started the whole process over and tried to get support from Apple. But nothing helped until I just gave up and accessed Time Machine to confirm it was operational. And lo and behold: There was my data from the previous week. Right up to 30 minutes before the kernel panic attack!</p>
<p style="text-align: center;"><a href="http://www.netlingo.com/smileys.php">%*@:-(</a></p>
<p>Just before I joined Apple I got some coaching from Bruce Tognizzni (I was designing a set of never-to-be-released apps for Letraset back in 1991). <a href="http://www.asktog.com/">Tog</a> explained that good user centered design doesn&#8217;t just hide complexity&#8211;it enables the user to navigate it. Time Machine and Time Capsule are bad user centered design according to this definition since they are pretty faces and not much more.</p>
<p>I can&#8217;t think of any better example of user centered design than the original Mac OS (version 3) and apps like MacPaint and MacWrite. And since you can&#8217;t run it anymore (but you can see screen shots at the <a href="http://www.d4.dion.ne.jp/~motohiko/system3.htm">Vintage Mac Museum</a>) I decided to bring the Mac OS 3 back to life in flash. Embedded above is version 0.1 of the Mac OS 3 Flash Sim. It don&#8217;t do much but I promise to whittle away at it as time permits. I&#8217;ll post the source code shortly as well. Right now you can selected the trash can and pull down the apple menu.</p>
<p>It&#8217;s funny but the constrained yet expressive capabilities of the original Mac OS are much more like the user experience of the iPhone and iPod Touch then the current Mac OS X. There is something to be said for the <a href="http://www.wired.com/culture/design/magazine/17-03/dp_intro">power of limitations</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pavley.com/2009/11/01/mac-os-3-user-center-design-exemplar/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>The Name of the Game is Change</title>
		<link>http://www.pavley.com/2009/10/14/the-name-of-the-game-is-change/</link>
		<comments>http://www.pavley.com/2009/10/14/the-name-of-the-game-is-change/#comments</comments>
		<pubDate>Wed, 14 Oct 2009 14:01:43 +0000</pubDate>
		<dc:creator>pav</dc:creator>
				<category><![CDATA[Agile Principles]]></category>
		<category><![CDATA[Management & Leadership]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[change]]></category>
		<category><![CDATA[project management]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.pavley.com/?p=89</guid>
		<description><![CDATA[
The second principle from the Agile Manifesto is &#8220;Welcome changing requirements, even late in development. Agile processes harness change for the customer&#8217;s competitive advantage.&#8221;
I call this the Product Manager&#8217;s dream principle: &#8220;I get to change the requirements, even after development has started! Woot!&#8221;
First let&#8217;s break this principle down and see what it really means and [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-96" title="Slide1" src="http://www.pavley.com/wp-content/uploads/2009/10/Slide11.jpg" alt="Slide1" width="455" height="457" /></p>
<p>The second principle from the <a href="http://agilemanifesto.org/">Agile Manifesto</a> is &#8220;Welcome changing requirements, even late in development. Agile processes harness change for the customer&#8217;s competitive advantage.&#8221;</p>
<p>I call this the Product Manager&#8217;s dream principle: &#8220;I get to change the requirements, even after development has started! Woot!&#8221;</p>
<p>First let&#8217;s break this principle down and see what it really means and then let&#8217;s talk about how to deal with it.</p>
<p>There are 4 ideas embedded in the PM&#8217;s dream:</p>
<ol>
<li>Welcoming changing requirements in general</li>
<li>Welcoming changing requirements even late in development</li>
<li>Harnessing change</li>
<li>Customer&#8217;s competitive advantage</li>
</ol>
<p>These ideas come from the <strong>grim realization</strong> <strong>that requirements are going to change</strong>, at any stage of the development process, and there isn&#8217;t a damn thing you or any process can do about it. We can pretend that we have control over change. We can ask business owners and product managers to sign an iron-clad contract but <a href="http://www.thomaslfriedman.com/ny-times-articles/2009-03-28-mother-nature-s-dow">Mother Nature</a> and <a href="http://www.murphys-laws.com/murphy/murphy-true.html">Murphy&#8217;s Law</a> are not going to stop working on our plans.</p>
<p>Given that change is inevitable we can either hate it or love it or just deal. If this principle was written from the <em>hating change</em> POV it would read &#8220;Abhor changing requirements, especially late in development&#8230;&#8221; On the other hand if the authors of the Agile Manifesto <em>loved change</em> the principle would have read &#8220;Encourage changing requirements, the later the better&#8230;&#8221;</p>
<p>&#8220;Welcoming changing requirements&#8221; is a positive way to deal with a problematic issue in the same way that many cultures have a tradition of <a href="http://search.barnesandnoble.com/Strangers-to-Relatives/Sergei-Kan/e/9780803227460">adopting strangers</a>. It&#8217;s a smart coping mechanism and recognition that <em>shit happens</em>.</p>
<p>Why do Agilists welcome change and not run the other way and lock the door? Because they are confident that Agile process and policies are setup to withstand change. They have accounted for change in the Agile process and thus change is not going to do much damage to the overall big picture.</p>
<p>Agilists also recognize, according to this principle, that they can &#8220;harness change&#8221;. Agilists can guide change instead of being driven by it. That&#8217;s a pretty tall order but with the right process, one that assumes the inevitable, Agilists take advantage of the opportunities that change creates. Change is where true <em>competitive advantage</em> comes from! Not from a carefully designed, well executed plan, but from a process that gives customers the chance to quickly capitalize on changing market conditions. <strong>Wiggle room beats precision any day of the week.</strong></p>
<p><a href="http://en.wikipedia.org/wiki/Stephen_Jay_Gould">Stephen Jay Gould</a> once wrote about how his interest in fossilized snails, from which he would derive many insights about evolution, came about completely by <a href="http://www.nytimes.com/books/97/11/09/home/gould-talk.html">accident</a>. Gould spent his life discovering and teaching how random events lead to advantages that life is able to exploit. That&#8217;s agility right there.</p>
<p>Working with Niles Eldredge, Gould popularized the theory that evolution works in <a href="http://www.worldofwarcraft.com/cataclysm/index.html">cataclysms</a> called <em>punctuated equilibrium</em>: Short periods of sudden change separated by long periods of relative calm. Agilists see a lot of punctuated equilibrium in software development. Everything in the project is going along as planned and then WAMMO! The market changes, a bug appears, or a forgotten requirement emerges! (This is in well run organizations. In poorly run organizations the change is constant and internally generated.)</p>
<p>OK, now that I have accepted change how do I deal with it? Each school of Agile development from <a href="http://www.extremeprogramming.org/">XP</a> to <a href="http://www.controlchaos.com/">SCRUM</a> has different foci for dealing with change. I&#8217;ve seen five patterns emerge that successfully welcome change (but I&#8217;d love to hear about others):</p>
<ol>
<li><strong>Time boxing:</strong> Limit the amount of time you spend on any one task so that the cost of change isn&#8217;t devastatingly high.</li>
<li><strong>Locked iterations:</strong> Restrict change to outside development cycles. Once a dev iteration is started ignore change until victory can be declared. If you really must change requirements in the middle of an iteration stop and re-plan.</li>
<li><strong><a href="http://en.wikipedia.org/wiki/Just-in-time_(business)">JIT</a> planning:</strong> Plan as little as possible and as late into the project as possible.</li>
<li><strong>Light design and documentation:</strong> Waste as little time as possible on design and documentation as it&#8217;s all going to change anyway.</li>
<li><strong>Measure and analyze:</strong> Don&#8217;t act on assumptions or intuition. Do what the data tells you to avoid surprises.</li>
</ol>
<p>These solutions in isolation create as many problems as they solve. But when used together in a well thought out and integrated process they create a flexible fabric that can capture the energy of change and use it to gain an advantage. This is hard to do, not because it&#8217;s complex, but because many engineers (and normal people too) are uncomfortable with change. One strategy that helps people <em>surf the chaos</em> is to <strong>keep a central vision in place</strong> <strong>with a general roadmap </strong>of how to get there. As long as the vision is stable then change is the process of getting there.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pavley.com/2009/10/14/the-name-of-the-game-is-change/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Our Highest Priority</title>
		<link>http://www.pavley.com/2009/10/08/our-highest-priority/</link>
		<comments>http://www.pavley.com/2009/10/08/our-highest-priority/#comments</comments>
		<pubDate>Thu, 08 Oct 2009 21:41:29 +0000</pubDate>
		<dc:creator>pav</dc:creator>
				<category><![CDATA[Agile Principles]]></category>
		<category><![CDATA[Management & Leadership]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[project management]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.pavley.com/?p=73</guid>
		<description><![CDATA[
The first principle of the Agile Manifesto is &#8220;Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.&#8221;
Easier said than done  
This principle is deceptively simple and simply radical. I don&#8217;t believe it&#8217;s an accident that it&#8217;s the first principle and it&#8217;s first 3 words ensure that what [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-86" title="Labor is greater than money" src="http://www.pavley.com/wp-content/uploads/2009/10/Slide1.jpg" alt="Labor is greater than money" width="429" height="180" /></p>
<p>The first principle of the <a href="http://agilemanifesto.org/">Agile Manifesto</a> is &#8220;Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.&#8221;</p>
<p>Easier said than done <img src='http://www.pavley.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>This principle is deceptively simple and simply radical. I don&#8217;t believe it&#8217;s an accident that it&#8217;s the first principle and it&#8217;s first 3 words ensure that what we pay it detailed attention.</p>
<p>So let&#8217;s pick it apart!</p>
<p>There are five major ideas embedded inside this 16 word sentence:</p>
<ol>
<li>Highest Priority</li>
<li>Customer Satisfaction</li>
<li>Early Delivery</li>
<li>Continuous Delivery</li>
<li>Valuable Software</li>
</ol>
<p>All five of these ideas deserve a blog post or two (the highest praise one can give in the 21st century). But a paragraph each will have to do.</p>
<p>To have a &#8220;highest priority&#8221; is not a foregone conclusion. Usually you have competing priorities. The classic problem with software development priorities is expressed in the <em>consultant&#8217;s conundrum</em>:</p>
<blockquote><p>Fast, cheap, or good &#8212; Pick any two!</p></blockquote>
<p>The consultant&#8217;s conundrum has no &#8220;highest priority&#8221; and thus an impossible problem to resolve. I&#8217;m going to tell you a secret. No matter what the consultant (or <a href="http://www.useit.com/alertbox/fast-methods.html">Jakob Neilsen</a>) says, you can&#8217;t pick all three, or even any two. You can only pick one priority. This is the first principle of agile development and the lack of a single highest priority is the <em>root cause</em> of why projects fail.</p>
<p>To focus on &#8220;customer satisfaction&#8221; is another tragically overlooked value in the real world. Most business, except the ones that succeed for the long term, focus on everything but happy customers. Even though really smart people write books like Patricia Seybold&#8217;s <a href="http://www.psgroup.com/books_customersdotcom.aspx">Customers.com</a>, revenue or awards or downloads are still made into objectives in and of themselves. Another secret: SUSTAINABLE REVENUE FOLLOWS CUSTOMER SATISFACTION! (Sorry for the caps&#8211;my shift key got stuck.)</p>
<p>The third and forth ideas, &#8220;Early Delivery&#8221; and &#8220;Continuous Delivery&#8221;, are difficult to do because they go against many humans&#8217; natures. Some of us naturally crave feedback and offer up unfinished works for critical review early and often. But that type of human seems not to get into software development. It&#8217;s the lonely author, or <a href="http://www.theglobeandmail.com/news/technology/article739045.ece">lonely blogger</a>,  who seems to dominate our industry. He wants to knock the socks off his audience so he waits until every thing is done before revealing his magnum opus to the world. This behavior in a business context is rationalized by the idea that you only get <em>one chance to make a first impression</em>. I feel my shift key being to stick as I prepare to refute this idea&#8211;but I will resist shouting in type because of the overwhelming evidence supporting early and continuous delivery: Microsoft, Google, Adobe, Apple, Salesforce. When these companies (and any other tech companies) are successful, it&#8217;s when they release incrementally and improve over time guided by customer feedback. When these companies fail, it&#8217;s when they hold off for the big bang.</p>
<p>The final idea of the first principle of the Agile Manifesto is the hardest to define. What is &#8220;Valuable Software&#8221;? What is value? The wikipedia.org article on <a href="http://en.wikipedia.org/wiki/Value_(economics)">Value (economics)</a> is messy and ultimately not helpful. Like truth, value is subjective and only understood when time and multiple perspectives are integrated. So let us go back the classic definition and say that valuable software is that which &#8220;saves labor&#8221; (which leaves out gaming and entertainment, but I consider walking away from my computer a form of labor).</p>
<p>If the software you are building does not &#8220;save labor&#8221; then perhaps you shouldn&#8217;t be creating it. I&#8217;m serious. There is plenty of software out there that is not valuable by this definition. Yes, I&#8217;m thinking of you MS Project! At the end of the day software is about automation and by that I mean the automation of labor.</p>
<p>To me, and many others, the Agile principles are not a <a href="http://crankypm.com/2008/09/agile-software-development-is-no-silver-bullet/">silver bullet to cure all the ills of software development</a>. They are a recognition that the software development process is not separate from software being produced. A product that is not valuable can not benefit from Agile development anymore than quackery can benefit from healthcare reform. Our highest is priority is not to make it fast, cheap, or good. Our highest priority is to make it valuable.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pavley.com/2009/10/08/our-highest-priority/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Circular Logic in Project Management</title>
		<link>http://www.pavley.com/2009/08/25/circular-logic-in-project-management/</link>
		<comments>http://www.pavley.com/2009/08/25/circular-logic-in-project-management/#comments</comments>
		<pubDate>Wed, 26 Aug 2009 01:59:38 +0000</pubDate>
		<dc:creator>pav</dc:creator>
				<category><![CDATA[Management & Leadership]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Biological Cybernetics]]></category>
		<category><![CDATA[project management]]></category>
		<category><![CDATA[recursion]]></category>

		<guid isPermaLink="false">http://www.pavley.com/?p=43</guid>
		<description><![CDATA[
Listening to one of my favorite public radio programs (The World) while carting the kids around this weekend I heard about an interesting study by the Max Planck Institute for Biological Cybernetics. A team of biocyberneticists wanted to find out how well people navigated. They hired a bunch of hikers, gave them each a GPS, [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-62" title="Straight line or Circle?" src="http://www.pavley.com/wp-content/uploads/2009/08/line_as_circle2.png" alt="Straight line or Circle?" width="427" height="270" /></p>
<p>Listening to one of my favorite public radio programs (<a href="http://www.theworld.org/2009/08/21/feel-like-youre-walking-in-circles-you-might-be/">The World</a>) while carting the kids around this weekend I heard about an interesting study by the <a href="http://www.kyb.mpg.de/press/2009/souman.html">Max Planck Institute for Biological Cybernetics</a>. A team of biocyberneticists wanted to find out how well people navigated. They hired a bunch of hikers, gave them each a GPS, and one simple instruction: Go straight that way.</p>
<p>Tracking the GPS devices from the comfort of the lab the researchers discovered that people don’t navigate so well on cloudy days or dark nights. Without an external frame of reference, like the sun or a mountaintop, people tend to walk in circles. Even people who claim to have a great sense of direction.</p>
<p>After reading more about the study I realized that people don’t tend to walk in circles. <strong>People only walk in circles</strong>. With out an external reference point the natural human programming is to only go so far, turn around, and go the other way.</p>
<p>And this makes perfect sense. Over millions of years, if an individual strayed out of his natural habitat without a good reason, that individual seldom got to reproduce. Our natural inclination is to stick to our territory, to the known, and within boundaries. Even when we think we are on a new path.</p>
<p>The mind is not exempted from this bit of hard coded behavior. I see it in others and myself all the time. In programming we call this <a href="http://en.wikipedia.org/wiki/Recursion_(computer_science)">recursion</a> when we mean it and a bug when we don’t. In business it’s know as “once size fits all”, “if it plays in Peoria”, and “if it ain’t broke, don’t fix it.” Actually, I wish the business world had relegated circular thinking to tired old cliches. But insidiously it’s in your MBOs. It’s in you mission statement. It’s in your strat plan. Any goal that isn&#8217;t externally verifiable is a carrot on a stick.</p>
<p>The typical recursive program looks like this (pseudo code):</p>
<pre class="brush: js">function DoIt() {
	If(GetData()) {
		DoIt();
	} else {
		exit();
	}
}</pre>
<p>As long as there is data DoIt() will call itself. The data is the external reference point, the mountaintop. Remove the call to GetData(), or if it fails to return false, the function DoIt() will do it forever (or until the stack overflows—which ever comes first).</p>
<p>What is interesting to me is how strong the impulse to think in a circle really is. Many times we ignore the Sun or miss the mountaintop.<br />
I have so many specific examples that I can hardly choose one but this is my favorite: The project is behind schedule so we need to:</p>
<ul>
<li> <em>Add more resources</em>: The team is swamped so adding more should help!</li>
<li> <em>Spend more money</em>: More hardware, more consultants, more tools ought to help!</li>
<li> <em>Work more hours</em>: We just need find another 12 hours in a week to get back on track!</li>
<li> <em>Motivate more</em>: Obviously the team doesn’t understand how critical the project is to the company!</li>
</ul>
<p>All of those solutions are examples of circular thinking because they seek to resolve the problem with more what the team is already doing.</p>
<p>When a project is late (and the calendar is the ultimate external reference point for any project) you have stop. Break the sprint. Reverse course. Look up for a guiding star that points to true north.</p>
<p><em> This is what works for me:</em></p>
<ul>
<li> <em>Shuffle the project’s management</em>: Poor execution usually means one thing—<em>Poor leadership</em>. Good leaders take poor plans and make them successful (or change them until they are successful). Poor leaders complain about the plan, the team’s skills, and the design of the product.</li>
<li> <em>Hold the budget</em>: Throwing hardware, consultants, and tools at the project usually just makes it more complex. Sometimes running on a faster CPU will temporarily buy time for your pokey little puppy of an app server. But you’re just making some other project late down the road. You should only spend more budget if you <em>inadequately budgeted beforehand</em>.</li>
<li> <em>Work 9-to-5</em>: I know I’m going to get a lot of tech management mad at me but I’ve seen this go on for 20 years. <em>Working 12-hour days just buys you bugs and burn out</em>. You can do it for a short “sprint”, maybe at the end of the project. But you can’t sprint your way out of a hole. The secret here is to make sure the 8-hour days are not interrupted by meetings, fire drills, and shop talk. Engineers shouldn’t go to very many meetings, outside of the daily scrum. They get bored and ask silly questions.</li>
<li> <em>Admit it’s not going anywhere</em>: <em>The current team is your greatest resource</em>. They’ve been working on the problem, they know why the project is late, and they feel bad or mad or just resigned. Get their help and really listen to the suggestions. Honesty will get you for free what bonuses can’t buy. The team should be working for long term company success not a short term project bonus.</li>
</ul>
<p>These techniques are counter-intuitive, and that alone probably means we are on the right track for breaking out of a recursive situation. As you can probably guess I’ve had more than a few projects <a href="http://blog.searchenginewatch.com/060508-093509">go circular</a> over the years. In the end there are no quick fixes. When you finally figure out that you are lost the realization doesn’t make the problem go away. It’s usually a long walk home—even when you are on a straight line.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pavley.com/2009/08/25/circular-logic-in-project-management/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Worst Ever Paragraph in a Technical Doc</title>
		<link>http://www.pavley.com/2009/08/02/worst-ever-paragraph-in-a-technical-doc/</link>
		<comments>http://www.pavley.com/2009/08/02/worst-ever-paragraph-in-a-technical-doc/#comments</comments>
		<pubDate>Sun, 02 Aug 2009 15:40:42 +0000</pubDate>
		<dc:creator>pav</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[AS 3.0 Components]]></category>
		<category><![CDATA[CS4]]></category>
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://www.pavley.com/?p=34</guid>
		<description><![CDATA[I&#8217;m working on my Flash game framework. Progress, which I admit is slow, requires a good understanding of the Flash CS4 Component model. I embarked on this project a few weeks ago without realizing 3 things:

The CS4 Component Model is very different from the CS3 model.
There is very little good documentation for CS4 Components.
Flash and [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m working on my Flash game framework. Progress, which I admit is slow, requires a good understanding of the <a href="http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/">Flash CS4 Component</a> model. I embarked on this project a few weeks ago without realizing 3 things:</p>
<ol>
<li>The CS4 Component Model is very different from the CS3 model.</li>
<li>There is very little good documentation for CS4 Components.</li>
<li>Flash and CS4 Components have become the step children of Flex and it&#8217;s entirely different, incompatible component model.</li>
</ol>
<p> <img src='http://www.pavley.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p>I&#8217;m not sure why the CS3 Component Model had to go. The major change seems to be that CS3 Comps were based on a subclass of <a href="http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/display/MovieClip.html">MovieClip</a> while CS4 Comps are based on a subclass of <a href="http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/display/Sprite.html">Sprite</a>. This change in inheritance has some great technical advantages but even more practical disadvantages.</p>
<p>MovieClip is a heavy weight object with lots of functionality. It&#8217;s a great starting point for components because you have all of Flash&#8217;s frame-based animation at your command. Sprite is a superclass of MovieClip and hard-coded to a single frame. Sprite is a great idea, since a many elements in a Flash game are static. Using Sprite-based components means less overhead for the Flash engine to grind through. Sprite-based components are less overhead for the programmer too: Since Flash plays any MovieClip by default you don&#8217;t need to include frame management code in a CS4 Component.</p>
<p>That&#8217;s all good. Here&#8217;s the bad:</p>
<p>CS4 Components can not share the same stage with CS3 Components. You have to choose one or the other!</p>
<p>There are 5 less Adobe-authored CS4 Components than CS3. Some of my favorites were not ported to CS4 including Accordion, Tree, and Window. I can still use the original CS3 set of components but not in the same application with CS4 components.</p>
<p><code>/cry</code></p>
<p>A quick search of <a href="http://flashden.net/">FlashDen</a> lists 236 CS3 components and only 51 CS4 components. This means to me Adobe has been doing a poor job of evangelizing the benefits of CS4 Components or that the benefits aren&#8217;t worth the effort. Or, as I suspect, all of the above.</p>
<p>CS4 components can be compiled so that their code is hidden. <em>I hate that.</em> I hope I don&#8217;t need to argue the open source model here. But someone at adobe should read the <a href="http://en.wikipedia.org/wiki/Open_source">Wikipedia entry</a>. I know developers who want to make money from their Flash components probably demanded this feature. I want to grab these follow capitalists by the shoulders, look them square in the eye, and say &#8220;There is a better way!&#8221; Look to the <a href="http://www.cpan.org/">Perl community</a>! Look to the <a href="http://www.ruby-lang.org/en/">Ruby community</a>! Look to the <a href="http://www.php.net/">PHP community</a>! None of our brothers and sisters are starving there! Hiding your code leads to a lack of adoption, a lack of quality, and the illusion that you can sit on your butt and no longer have to innovate.</p>
<p>For me, the single biggest problem with the CS4 component model is the scarcity of quality documentation. The books and sites devoted to CS3 components are too numerous to mention. I found only one decent article on Adobe&#8217;s <a href="http://www.adobe.com/devnet/">DevNet</a> about CS4 Components: <a href="http://www.adobe.com/devnet/flash/articles/creating_as3_components.html">Creating ActionScript 3.0 components in Flash</a> by Jeff Kamerer. It&#8217;s a very comprehensive article, points out many of the problematic design details that need to be considered when authoring CS4 components, but it&#8217;s rambling and needs much editing.</p>
<p>In fact it contains one of the worst paragraphs I&#8217;ve ever read in years of reading technical documentation:</p>
<blockquote><p>You&#8217;ll find ActionScript metadata throughout all component code: in ActionScript 2.0 and ActionScript 3.0, in Flash and in Flex. ActionScript metadata comes between square brackets. It has a name that is followed by a list of name/value pairs enclosed in parentheses. For example, here is metadata with the name Inspectable and a single name/value pair, defaultValue/Label: <code>[Inspectable(defaultValue="Label")]</code></p></blockquote>
<p>Confusing yes?</p>
<p>What the author means to say (and I don&#8217;t blame him, I blame the nameless Adobe technical editor who should have fixed this) is that metadata is enclosed in square brackets and defined by a name and a string value or a list of key/value pairs. The example given is the most confusing part of this paragraph: It would be much clearer if a general example was used like <code>[Name(key="value")]</code>. By using a specific example he makes us hunt for the general hidden in the details. The example uses &#8220;defaultValue&#8221; as the key and confuses us with the word &#8220;value&#8221; on the left (the value is on the right). By using the string &#8220;Label&#8221; for the value the example confuses us with a synonym for a name on the right (the name, or key, goes on the left).</p>
<p>Unless I&#8217;m so confused I got it wrong.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pavley.com/2009/08/02/worst-ever-paragraph-in-a-technical-doc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Always Start with Da Face!</title>
		<link>http://www.pavley.com/2009/07/24/always-start-with-da-face/</link>
		<comments>http://www.pavley.com/2009/07/24/always-start-with-da-face/#comments</comments>
		<pubDate>Fri, 24 Jul 2009 22:43:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Data Structures]]></category>
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://www.pavley.com/?p=19</guid>
		<description><![CDATA[
The hardest part of creating a Flash game, after figuring out the idea behind it, is to figure out what it will look like. Once you have those two tasks out of the way the actual coding is easy: The design tells you what to code.
But first -&#62; Inspiration! 
Since this game will feature multi-player [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://blog.pavley.com/wp-content/uploads/blog.pavley.com/2009/07/questrian-ui-design.gif"><img class="size-full wp-image-24 aligncenter" title="Questrian UI Design" src="http://blog.pavley.com/wp-content/uploads/blog.pavley.com/2009/07/questrian-ui-design.gif" alt="Very rough layout--subject to change!" width="480" height="320" /></a></p>
<p>The hardest part of creating a Flash game, after figuring out the idea behind it, is to figure out what it will look like. Once you have those two tasks out of the way the actual coding is easy: <em>The design tells you what to code</em>.</p>
<p><em>But first -&gt; </em><em><strong>Inspiration! </strong></em></p>
<p>Since this game will feature multi-player interaction I’m going to borrow from the greatest of all multi-player games: <a href="http://worldofwarcraft.com">World of Warcraft</a>. In WoW you get to battle monsters and other players rendered in an epic 3D virtual world. Sweet! In my little game you’ll do the same, only with dots instead of the epic 3D. A lot of WoW-play boils down to a  race between <a href="http://www.wowwiki.com/Damage_per_second">DSP</a> (damage per second) and <a href="http://www.wowwiki.com/Healing_comparison">HSP</a> (healing per second). So that’s what my game will do: Let players discover who can keep their little team of dots alive while killing the other guy’s dots.</p>
<p>Like the game the UI will be inspired by Blizzard’s <a href="http://forums.megagames.com/forums/showthread.php?p=337884">magnum opus </a>as well. On the left will be unit frames that display the health, mana, and experience of your team. On the right will be unit frames that display your opponent’s stats. In the center will be an animated dot-view of the action. Across the bottom will be command frames: Click these guys and you can target and attack bad dots or help your good dots. Lose and you hang your head in humiliation. Win and you gain experience to progress to the next level. Maybe even some <a href="http://www.google.com/search?hl=en&amp;client=safari&amp;rls=en-us&amp;defl=en&amp;q=define:loot&amp;ei=cQxYSqHpHOCntgeeqaTdCg&amp;sa=X&amp;oi=glossary_definition&amp;ct=title">loot</a> will drop!</p>
<p>At this point I have a rough idea and a very rough UI design. I like to work it that way. I’ve found it’s a big waste of time to spend hours designing something what will just end up trashed as the concept evolves. <em>It’s time to code…</em></p>
<p>I’ll need four major classes: An application class to manage everything, A view class to display stuff to the player, a state machine class to track what is happening to who, and a game engine class to control all the action. (This architecture is called <a href="http://ootips.org/mvc-pattern.html">Model View Controller</a> (MVC) and is at the heart of almost any well written GUI application.)</p>
<p style="text-align: center;"><a style="text-decoration: none;" href="http://blog.pavley.com/wp-content/uploads/blog.pavley.com/2009/07/flash-project.gif"><img class="aligncenter size-full wp-image-26" title="Questrian Flash Project Files" src="http://blog.pavley.com/wp-content/uploads/blog.pavley.com/2009/07/flash-project.gif" alt="Questrian Flash Project Files" width="213" height="427" /></a></p>
<p>I&#8217;d like to use a <a href="http://en.wikipedia.org/wiki/Hash_table">hash map</a> to store the current state of my objects in the game. I don&#8217;t really need the efficiency of a hash map. But my ideas are very rough right now and things are going to change. Store keyword-value pairs will make managing change easier than hard coding properties into ActionScript classes. The <a href="http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7eea.html">Adobe documentation</a> suggests I use the Object class to create a fake hash map (associative array) or use the flash.utils.Dictionary class. But I won&#8217;t get cool Java-like <a href="http://pirlwww.lpl.arizona.edu/resources/guide/software/Java_tutorial/collections/interfaces/collection.html">collection interface</a> convenience functions <img src='http://www.pavley.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p>Luckily I found: <a href="http://lab.polygonal.de/ds/">AS3 Data Structures For Game Developers</a> by Michael Baczynski. Thanks Michael! This library includes Hash Maps, Queues, Trees, and Stacks and more. Hard to believe ActionScript 3.0 doesn&#8217;t include them by default.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pavley.com/2009/07/24/always-start-with-da-face/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
