<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:posterous="http://posterous.com/help/rss/1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>alternate illusion</title>
    <link>http://alternateillusion.com</link>
    <description>thoughts of the black sheep</description>
    <generator>posterous.com</generator>
    <link xmlns="http://www.w3.org/2005/Atom" href="http://posterous.com/api/sup_update#2c39d2937" type="application/json" rel="http://api.friendfeed.com/2008/03#sup" />
    
    
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/alternateillusion/PfqJ" /><feedburner:info uri="alternateillusion/pfqj" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://posterous.superfeedr.com/" /><geo:lat>47.48525</geo:lat><geo:long>19.07452</geo:long><creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license><image><link>http://creativecommons.org/licenses/by-sa/3.0/</link><url>http://creativecommons.org/images/public/somerights20.gif</url><title>Some Rights Reserved</title></image><feedburner:emailServiceId>alternateillusion/PfqJ</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
      <pubDate>Wed, 14 Dec 2011 09:45:44 -0800</pubDate>
      <title>Time Crisis</title>
      <link>http://feedproxy.google.com/~r/alternateillusion/PfqJ/~3/o1xB2q9h4m0/time-crisis</link>
      <guid isPermaLink="false">http://alternateillusion.com/time-crisis</guid>
      <description>&lt;p&gt;
	&lt;p&gt;Once in a while I end up facing problems due to the most disgusting global variable at all: time. Time can not be mocked easily. You'll have features based on time. You'll have reports based on time. You'll have to make the right decisions at the most appropriate time, etc... I could - and probably will - start a series of posts about time and its presence in software development. This post is dedicated to distributed build systems. I have a setup of a master Jenkins server, and several virtual and physical boxes around the globe as slaves. Oh. One more thing about time. It's relative. If you're locked in a windowless room with only one device capable of measuring time, can you be sure that what you see is the time as we know it? Guess what! Our computers have only got a single clock. This leaves me with a conclusion, that a box can have its own relative time, which is not a fine goal for cloud based (=stored across multiple instances) applications. It leads to strange errors, like when a Jenkins master would declare a fresh report from a slave outdated.&lt;/p&gt;
&lt;p&gt;We've evolved so much towards shiny applications, that we have forgotten about the basic ideas which led to the evolution of the world-wide web. I remember when I first encountered the Internet, I usually pinged one host which I hoped to be on-line 24/7. This was: time.kfki.hu. A time server! &lt;em&gt;NTP is a protocol designed to synchronize the clocks of computers over a network. The first &lt;acronym class="ACRONYM"&gt;NTP&lt;/acronym&gt; implementation started around 1980 with an accuracy of only several hundred milliseconds!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;So wouldn't it be nice if all boxes would sync from the same provider? But what happens if your crucial information is corrupted by the mistake of that third party service? You wouldn't like that, would you? The great part follows: You can have your Jenkins master server act as a time provider for all connected devices. This could mean user PC's, test boxes and even the inflatable pirate's controller which is hooked on the notification system.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The implementation&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Server&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I'll show a Ubuntu Natty configuration, but it should be pretty much the same on every distribution. The first thing you'd want to do is to remove the ntpdate application from all instances. It's not harmful, but can cause minor turbulences.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;apt-get remove ntpdate&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Then, you need to install the NTP daemon &lt;strong&gt;to every instance&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;apt-get install ntp&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;On the time server instance, open up and edit &lt;strong&gt;/etc/ntp.conf&lt;/strong&gt;. The existing contents of the file can be left as it is, but you need to add some lines. Under the list of servers, add a reference to the instance itself. This will serve as a back-up if your network should fail.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;server 127.127.1.0&lt;/em&gt;&lt;br /&gt;&lt;em&gt;fudge 127.127.1.0 stratum 10&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;You need to enable the synchronization service. Suppose you have a network with 192.168.2.xxx IP addresses, then you'll have to add:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;restrict 192.168.2.0 mask 255.255.255.0 nomodify notrap&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I prefer to insert it before the line: restrict 127.0.0.1. You need to insert such line for every network you plan to server.&lt;/p&gt;
&lt;p&gt;Once you are done, save the file and restart the service:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;/etc/init.d/ntp restart&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Client&lt;/strong&gt;&lt;em&gt;&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;So you have your network a time provider, you need to get your boxes to sync with that. If you carefully followed along, you already have the package ntp installed. Open up &lt;strong&gt;/etc/ntp.conf&lt;/strong&gt; and edit as follows.&lt;/p&gt;
&lt;p&gt;Remove every single server line, and add only those which are relevant for your box. If your time server is on 192.168.1.123, than leave a single&lt;/p&gt;
&lt;p&gt;&lt;em&gt;server 192.168.1.123&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;line in the list.&lt;/p&gt;
&lt;p&gt;Right before the line: restrict 127.0.0.1 enter two more restrictions. The first will prevent access to the ntp services of this machine, the second will back-up the localhost serving of the time.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;restrict default notrust nomodify nopeer&lt;/em&gt;&lt;br /&gt;&lt;em&gt;restrict&lt;/em&gt; &amp;lt;external ip of the current box&amp;gt;&lt;/p&gt;
&lt;p&gt;Of course, you have to replace "&amp;lt;external ip of the current box&amp;gt;" with the external ip of the current box.&lt;/p&gt;
&lt;p&gt;Once you are done, save the file and restart the service:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;/etc/init.d/ntp restart&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Debugging&lt;/strong&gt;&lt;em&gt;&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The ntp software is anything, but verbose. If you want to see what's going on, than stop the service with&lt;/p&gt;
&lt;p&gt;&lt;em&gt;/etc/init.d/ntp stop&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;and run&lt;/p&gt;
&lt;p&gt;&lt;em&gt;ntpt -d&lt;/em&gt;&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://alternateillusion.com/time-crisis"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://alternateillusion.com/time-crisis#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=o1xB2q9h4m0:4VuLpxUA_Ps:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=o1xB2q9h4m0:4VuLpxUA_Ps:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?i=o1xB2q9h4m0:4VuLpxUA_Ps:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=o1xB2q9h4m0:4VuLpxUA_Ps:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?i=o1xB2q9h4m0:4VuLpxUA_Ps:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=o1xB2q9h4m0:4VuLpxUA_Ps:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/alternateillusion/PfqJ/~4/o1xB2q9h4m0" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1525535/gravatar.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/36jwATlnaaQx</posterous:profileUrl>
        <posterous:firstName>Marton</posterous:firstName>
        <posterous:lastName>Meszaros</posterous:lastName>
        <posterous:nickName>meza</posterous:nickName>
        <posterous:displayName>Marton Meszaros</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://alternateillusion.com/time-crisis</feedburner:origLink></item>
    <item>
      <pubDate>Wed, 07 Dec 2011 07:13:43 -0800</pubDate>
      <title>Global Day of Coderetreat, Budapest</title>
      <link>http://feedproxy.google.com/~r/alternateillusion/PfqJ/~3/ydBq89RA1mU/global-day-of-coderetreat-budapest</link>
      <guid isPermaLink="false">http://alternateillusion.com/global-day-of-coderetreat-budapest</guid>
      <description>&lt;p&gt;
	&lt;p&gt;Twitter is an awesome platform. A lot of  information comes and goes. On the sleepy Friday of the 18th of  November, 2011 I read about a global event called "&lt;a href="http://globalday.coderetreat.org/"&gt;Global Day of Coderetreat&lt;/a&gt;".  As the software craftsmanship community in Budapest, Hungary is pretty  fragmented, I started whining publicly that I'd love to have a &lt;a href="http://coderetreat.org/"&gt;Coderetreat&lt;/a&gt; here too. That's when &lt;a href="http://www.hanoulle.be/"&gt;Yves Hanoulle&lt;/a&gt; gave me the perfect kick (in the butt) in one of his &lt;a href="http://twitter.com/#%21/YvesHanoulle/status/137471926384857088"&gt;tweets&lt;/a&gt;. So thanks again Yves for igniting our little group!&lt;/p&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://getfile8.posterous.com/getfile/files.posterous.com/temp-2011-12-07/JpjtepypvsFBGabcnhwDsrBkGvCJzfbhuvpFHdojyFeweJjeHhkFdGvkeAtx/1.jpg.scaled1000.jpg"&gt;&lt;img alt="1" height="359" src="http://getfile9.posterous.com/getfile/files.posterous.com/temp-2011-12-07/JpjtepypvsFBGabcnhwDsrBkGvCJzfbhuvpFHdojyFeweJjeHhkFdGvkeAtx/1.jpg.scaled600.jpg" width="600" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;The day has come, and so did the 8am when we started setting up the scene at &lt;a href="http://mycorporation.hu/"&gt;MyCorporation co-working space&lt;/a&gt;.  I secretly planned on starting at 9, and it seemed to be a good idea.  At 8:30, there were only 4 of people present. At 9:00am, we started the  day with 4 pairs watching &lt;a href="http://twitter.com/coreyhaines "&gt;Corey&lt;/a&gt; and his greeting. After a short  explanation of the day and the problem we're going to work on, session 1  started. Most of the attendees were familiar with pair programming, TDD  and clean code, but never had the chance to try them "in production".  The pairs were formed by people knowing each other, this gave them  something to hang on to while facing new challenges. The first session  was aimed to show the way pair-programming is done in practice, so I  issued a role change every 15 minutes. The 45 minutes passed in a blink  of an eye. Deleting code at the end caused some muttering, but we were  counting on that. It seemed that the in-session role changing slowed the  pairs down, so we voted to stop that for the next rounds. Two more  people joined us during the first retrospective, and we maintained this  number of 5 pairs until the very end of the day.&lt;/p&gt;
&lt;p&gt;&lt;iframe src="http://www.youtube.com/embed/FdMzngWchDk?wmode=transparent" allowfullscreen frameborder="0" height="417" width="500"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;Session 2 started with the same pairs, as they now got to know the  problem domain, and learned a lot from the previous session. Some didn't  really stick to TDD at first, but in the second run, they tried. As I  was walking around in the room, I could feel the innovation coming from  those awesome minds trying to solve the Game of Life and the  communication barriers. It was very interesting to hear that even  co-workers who have been working together for years now, have never  known each other as well as they did after 2 sessions of  pair-programming. The participants were mainly from the world of PHP and  Java, but thanks to some brave guys, we even had Scala, C# and Ruby  popping up. The third session begun with new pairs. People paired up  according to what they've heard from each other in the previous  retrospectives. Some wanted to try out new languages that the other half  knew, some wanted to try working with someone else. We introduced TDD  ping-pong. I'm not sure if the language learning goal was a good choice,  because we ended up with some pairs where only one participant knew the  given syntax. Nevertheless, the problem was solved by the one not  knowing the language told the other what he'd want to write. During the  coding session, we've joined a global Google hangout, where fellow  coderetreaters from Germany, Sweden and Belgium were doing their thing.  Right after our third session, we saw that the guys from Ghent are  standing in front of the camera and waiting for someone to talk to them.  So we did, and had a great time talking to &lt;a href="http://www.jbrains.ca/"&gt;J. B. Rainsberger&lt;/a&gt;.&lt;br /&gt; Our catering for the day was sponsored by &lt;a href="http://www.mimox.com/"&gt;Mimox&lt;/a&gt;, and they did invest in  some really tasty food. MyCorporation organized it to be at the  restaurant next door.&lt;/p&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://getfile5.posterous.com/getfile/files.posterous.com/temp-2011-12-07/xdxdevtfehFDvsbtdlttFEElzElJxdpHfCetofagDejncvBDraxIhrluFEbw/2.jpg.scaled1000.jpg"&gt;&lt;img alt="2" height="359" src="http://getfile6.posterous.com/getfile/files.posterous.com/temp-2011-12-07/xdxdevtfehFDvsbtdlttFEElzElJxdpHfCetofagDejncvBDraxIhrluFEbw/2.jpg.scaled600.jpg" width="600" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;br /&gt; For the fourth session, we introduced the primitive obsession  constraint. I made a mistake in facilitating and did not discover in time  that a pair got sucked into an unnecessary generalization problem which  held them back from achieving the primary goal. Lesson learned; as a facilitator you need to see their code, not just look at it. Another  thing I've learned is that introducing these constraints without the participants understanding why they are good at all, isn't really a viable practice. I  will create slides for each for the next time and speak about them a  bit prior the first session.&lt;br /&gt; For the final 2 sessions I suggested that everyone should return to  their primary language. What they didn't know is that I had an evil plan  prepared. (Thanks &lt;a href="http://twitter.com/#!/jthurne"&gt;Jim&lt;/a&gt; for the idea).&lt;br /&gt; We voted for the 3 lined methods constraint, and started coding. I  encouraged the pairs to commit themselves to any other constraint too if  they like, and most of them happily took the challenge. By the end of  the 45 minutes, we had one team which completed the task. The evil plan  was to ask them not to delete their code, but for the next session swap  their product with another pair and they'll be working on the inherited  code in the final session. Shame and laughter filled the air all at once,  but they did it anyway. I hope that the message was clear that you  should always leave code the way that you can even project it on the  wall. A very appropriate global constraint was voted for this session:  no swearing! The pair which inherited the already finished code received  some guidelines from the original creators and started working on  making the tests more readable, while the others tried to continue and  complete each-others work.&lt;/p&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://getfile2.posterous.com/getfile/files.posterous.com/temp-2011-12-07/GwbjFnfddagsdfDcngigExEFscgcCnaEqJvBpCtHykkmjvJowJdhvapnitfc/3.jpg.scaled1000.jpg"&gt;&lt;img alt="3" height="359" src="http://getfile3.posterous.com/getfile/files.posterous.com/temp-2011-12-07/GwbjFnfddagsdfDcngigExEFscgcCnaEqJvBpCtHykkmjvJowJdhvapnitfc/3.jpg.scaled600.jpg" width="600" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;br /&gt; Due to the delayed start, we had to leave the venue as soon as we  finished session #6, so the final retrospective and the closing circle  was held in a restaurant nearby. I was really happy that everyone stayed  up until the end, and everyone wanted to have more coderetreats. Most  people said that they will try this exercise at work, and they never  thought pair programming was such fun and productive. My remark was that  I really enjoyed facilitating, but I'd love to code too. For my greatest  surprise, there were several volunteers for the role. We agreed upon  rotating the role amongst these individuals, which is - I think - a  great contribution to the coderetreat community.&lt;p /&gt;  What I learned from the day?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; There's hope for a change of culture&lt;/li&gt;
&lt;li&gt; There are craftsmen in our city&lt;/li&gt;
&lt;li&gt; People need to experience agile development in practice to understand its values&lt;/li&gt;
&lt;li&gt; Hands-on TDD and pair programming trainings should be present in our professional community&lt;/li&gt;
&lt;li&gt; Organizing is fun and I still love it&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What will happen?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We created a &lt;a href="https://www.facebook.com/pages/Coderetreat-Budapest/105238859593194"&gt;Facebook page&lt;/a&gt; for the newly forming community&lt;/li&gt;
&lt;li&gt;We will conduct a coderetreat once a month&lt;/li&gt;
&lt;li&gt;We will share knowledge between the participants&lt;/li&gt;
&lt;li&gt;We will try and "infect" others with this experience&lt;/li&gt;
&lt;li&gt;We will do this for fun and knowledge&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Thank you all who had made this global day possible! Thank you all who got up early on Saturday and coded all day long. You have proven yourselves dedicated to your profession, there's no other way to put it! :)&lt;/p&gt;
&lt;ul&gt;
&lt;/ul&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://alternateillusion.com/global-day-of-coderetreat-budapest"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://alternateillusion.com/global-day-of-coderetreat-budapest#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=ydBq89RA1mU:Vivh-SHDjU0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=ydBq89RA1mU:Vivh-SHDjU0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?i=ydBq89RA1mU:Vivh-SHDjU0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=ydBq89RA1mU:Vivh-SHDjU0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?i=ydBq89RA1mU:Vivh-SHDjU0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=ydBq89RA1mU:Vivh-SHDjU0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/alternateillusion/PfqJ/~4/ydBq89RA1mU" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1525535/gravatar.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/36jwATlnaaQx</posterous:profileUrl>
        <posterous:firstName>Marton</posterous:firstName>
        <posterous:lastName>Meszaros</posterous:lastName>
        <posterous:nickName>meza</posterous:nickName>
        <posterous:displayName>Marton Meszaros</posterous:displayName>
      </posterous:author>
      <media:content type="image/jpeg" height="1225" width="2048" url="http://getfile0.posterous.com/getfile/files.posterous.com/temp-2011-12-07/JpjtepypvsFBGabcnhwDsrBkGvCJzfbhuvpFHdojyFeweJjeHhkFdGvkeAtx/1.jpg">
        <media:thumbnail height="299" width="500" url="http://getfile3.posterous.com/getfile/files.posterous.com/temp-2011-12-07/JpjtepypvsFBGabcnhwDsrBkGvCJzfbhuvpFHdojyFeweJjeHhkFdGvkeAtx/1.jpg.scaled500.jpg" />
      </media:content>
      <media:content type="image/jpeg" height="1225" width="2048" url="http://getfile9.posterous.com/getfile/files.posterous.com/temp-2011-12-07/xdxdevtfehFDvsbtdlttFEElzElJxdpHfCetofagDejncvBDraxIhrluFEbw/2.jpg">
        <media:thumbnail height="299" width="500" url="http://getfile2.posterous.com/getfile/files.posterous.com/temp-2011-12-07/xdxdevtfehFDvsbtdlttFEElzElJxdpHfCetofagDejncvBDraxIhrluFEbw/2.jpg.scaled500.jpg" />
      </media:content>
      <media:content type="image/jpeg" height="1225" width="2048" url="http://getfile3.posterous.com/getfile/files.posterous.com/temp-2011-12-07/GwbjFnfddagsdfDcngigExEFscgcCnaEqJvBpCtHykkmjvJowJdhvapnitfc/3.jpg">
        <media:thumbnail height="299" width="500" url="http://getfile8.posterous.com/getfile/files.posterous.com/temp-2011-12-07/GwbjFnfddagsdfDcngigExEFscgcCnaEqJvBpCtHykkmjvJowJdhvapnitfc/3.jpg.scaled500.jpg" />
      </media:content>
    <feedburner:origLink>http://alternateillusion.com/global-day-of-coderetreat-budapest</feedburner:origLink></item>
    <item>
      <pubDate>Wed, 09 Nov 2011 09:00:00 -0800</pubDate>
      <title>Cost of a meeting</title>
      <link>http://feedproxy.google.com/~r/alternateillusion/PfqJ/~3/FrcbyybVPgk/cost-of-a-meeting</link>
      <guid isPermaLink="false">http://alternateillusion.com/cost-of-a-meeting</guid>
      <description>&lt;p&gt;
	&lt;p&gt;This is probably a redundant observation and there's many more   scientific calculations out there created by much smarter guys, but   here's a formula I found usable.&lt;/p&gt;
&lt;p&gt;When you're planning a meeting, take the following things into account:&lt;br /&gt; The people you invited have to prepare themselves before the event  (creating slides, taking notes, going through the ticketing system,  etc), and  repair themselves after the event (coffee, grouping up,  bashing something, etc). Empirically I've found that an effect  of a  meeting could take an hour or two per person.&lt;br /&gt; It goes without a  saying, that the net price is the product of the length of the  meeting  in hours and the hourly rate of each attendant. But in addition,   there's the distraction time (described above). Also the happening draws  time  from delivering values, so that factor should be taken into  account as well.  Here's my formula.&lt;/p&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;img alt="Cost" height="87" src="http://getfile0.posterous.com/getfile/files.posterous.com/temp-2011-11-09/BEFutsddnseAqjqGeeCvpfhkHxarDoxnmDzHdyiaHBmDzDwlwojEazEvrhaJ/cost.gif.scaled600.gif" width="472" /&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-weight: bold;"&gt;R&lt;/span&gt; is the matrix of the hourly rates of the participants, so sum(R) would be the total hourly cost of the people involved.&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight: bold;"&gt;l&lt;/span&gt; is the length of the meeting in hours&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight: bold;"&gt;p&lt;/span&gt; is the number of people attending, thus R has p elements&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Alpha&lt;/strong&gt; is the distraction time in hours. Normally 1 to 3&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight: bold;"&gt;r&lt;/span&gt; is the number of remaining issues after the meeting&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight: bold;"&gt;1+(1/(r+1))&lt;/span&gt; part of  the formula makes the cost even higher, if the time spent on  the meeting  could have been spent on finishing all the remaining tasks.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The r needs some explanation.It stands for &lt;em&gt;"the number of remaining issues after the meeting"&lt;/em&gt;&lt;/p&gt;
&lt;blockquote class="posterous_medium_quote"&gt;
&lt;p&gt;Of course the "&lt;em&gt;remaining issues&lt;/em&gt;" and the "&lt;em&gt;issue count&lt;/em&gt;" could be replaced by hours, complexity points, or whatever you like. For the demonstration, I'll use remaining issues.&lt;em&gt;&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Expanding the value, we get an equation as follows:&lt;/p&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;img alt="Costdeltai" height="32" src="http://getfile5.posterous.com/getfile/files.posterous.com/temp-2011-11-09/cifqqxzmmshpAnxeHzFdHmwkFnfJwgHmffwudzmhFyyfisJffspJmmHpoens/costdeltai.gif.scaled600.gif" width="418" /&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-weight: bold;"&gt;i&lt;/span&gt;r is the number of remaining issues&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight: bold;"&gt;v&lt;/span&gt;i is the average issues done in an hour by one person in the team&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;h&lt;/strong&gt; is the working hours in the day&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight: bold;"&gt;p&lt;/span&gt; is the number of people attending&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;P&lt;/strong&gt; is the number of people in the team&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Let's say you are on a 2 week (9 coding days) sprint with a total issue count of 50 with a team of 8 people where you have &lt;strong&gt;h&lt;/strong&gt; as the working hours daily set to 6. That would make:&lt;/p&gt;
&lt;p&gt;P = 8;&lt;br /&gt;D = 9;&lt;br /&gt;T = 50; (total issue count)&lt;br /&gt;h = 6;&lt;/p&gt;
&lt;p&gt;That would mean:&lt;br /&gt;vi = T/D/h/P = 50/9/6/8 = 0.11574&lt;/p&gt;
&lt;p&gt;So when you plan a 2 hour meeting for 4 people when you have let's say 30 issues left,&lt;br /&gt;ir = 30;&lt;p /&gt;And that would make r:&lt;/p&gt;
&lt;p&gt;r = ir-(vi*l*P)+(vi*l*p) = 30-(0.11574*2*8)+(0.11574*2*4) = 29.074&lt;/p&gt;
&lt;p&gt;You could verify this equation when you send all your people to the meeting, the &lt;em&gt;r&lt;/em&gt; be equal to &lt;em&gt;ir&lt;/em&gt;:&lt;/p&gt;
&lt;p&gt;r = ir-(vi*l*P)+(vi*l*P) = 30-(0.11574*2*8)+(0.11574*2*8) = 30&lt;/p&gt;
&lt;p&gt;If everyone on your team earns $50/hour, the cost of this 2 hour meeting with a distraction time of an ideal 1 hour would be,&lt;/p&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://getfile7.posterous.com/getfile/files.posterous.com/temp-2011-11-09/BqbyrjghHpwtmitcziJcfGnmGfqncyIkAhyweDoHdputeczmermBdcHgDycr/costexpanded.gif.scaled1000.gif"&gt;&lt;img alt="Costexpanded" height="68" src="http://getfile0.posterous.com/getfile/files.posterous.com/temp-2011-11-09/BqbyrjghHpwtmitcziJcfGnmGfqncyIkAhyweDoHdputeczmermBdcHgDycr/costexpanded.gif.scaled600.gif" width="600" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;Cost = (400*(2*1))*(1+(1/(1+30))) = $825.81&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://alternateillusion.com/cost-of-a-meeting"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://alternateillusion.com/cost-of-a-meeting#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=FrcbyybVPgk:kwZ6cUqygdY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=FrcbyybVPgk:kwZ6cUqygdY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?i=FrcbyybVPgk:kwZ6cUqygdY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=FrcbyybVPgk:kwZ6cUqygdY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?i=FrcbyybVPgk:kwZ6cUqygdY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=FrcbyybVPgk:kwZ6cUqygdY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/alternateillusion/PfqJ/~4/FrcbyybVPgk" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1525535/gravatar.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/36jwATlnaaQx</posterous:profileUrl>
        <posterous:firstName>Marton</posterous:firstName>
        <posterous:lastName>Meszaros</posterous:lastName>
        <posterous:nickName>meza</posterous:nickName>
        <posterous:displayName>Marton Meszaros</posterous:displayName>
      </posterous:author>
      <media:content type="image/gif" height="87" width="472" url="http://getfile3.posterous.com/getfile/files.posterous.com/temp-2011-11-09/BEFutsddnseAqjqGeeCvpfhkHxarDoxnmDzHdyiaHBmDzDwlwojEazEvrhaJ/cost.gif">
        <media:thumbnail height="87" width="472" url="http://getfile4.posterous.com/getfile/files.posterous.com/temp-2011-11-09/BEFutsddnseAqjqGeeCvpfhkHxarDoxnmDzHdyiaHBmDzDwlwojEazEvrhaJ/cost.gif.scaled500.gif" />
      </media:content>
      <media:content type="image/gif" height="32" width="418" url="http://getfile0.posterous.com/getfile/files.posterous.com/temp-2011-11-09/cifqqxzmmshpAnxeHzFdHmwkFnfJwgHmffwudzmhFyyfisJffspJmmHpoens/costdeltai.gif">
        <media:thumbnail height="32" width="418" url="http://getfile1.posterous.com/getfile/files.posterous.com/temp-2011-11-09/cifqqxzmmshpAnxeHzFdHmwkFnfJwgHmffwudzmhFyyfisJffspJmmHpoens/costdeltai.gif.scaled500.gif" />
      </media:content>
      <media:content type="image/gif" height="87" width="767" url="http://getfile9.posterous.com/getfile/files.posterous.com/temp-2011-11-09/BqbyrjghHpwtmitcziJcfGnmGfqncyIkAhyweDoHdputeczmermBdcHgDycr/costexpanded.gif">
        <media:thumbnail height="57" width="500" url="http://getfile4.posterous.com/getfile/files.posterous.com/temp-2011-11-09/BqbyrjghHpwtmitcziJcfGnmGfqncyIkAhyweDoHdputeczmermBdcHgDycr/costexpanded.gif.scaled500.gif" />
      </media:content>
    <feedburner:origLink>http://alternateillusion.com/cost-of-a-meeting</feedburner:origLink></item>
    <item>
      <pubDate>Thu, 03 Nov 2011 11:00:00 -0700</pubDate>
      <title>ASAP Driven Development</title>
      <link>http://feedproxy.google.com/~r/alternateillusion/PfqJ/~3/l9wbYtO0x08/asap-driven-development</link>
      <guid isPermaLink="false">http://alternateillusion.com/asap-driven-development</guid>
      <description>&lt;p&gt;
	&lt;p&gt;&lt;span&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;img alt="Asap" height="212" src="http://getfile8.posterous.com/getfile/files.posterous.com/temp-2011-11-03/DGCtCGBFuszqlnxqacFnEzqiiqJCzkeArGoooiHIocdokmyyCtJlvonBdbxH/asap.png.scaled600.png" width="223" /&gt;
&lt;/div&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Today,  I want to talk about the term we made up in times when we believed that  it described the way we work: ASAP Driven Development (ASAPDD). Sadly  the term As Soon As Possible is abused. It should mean that  "whenever you have free resources", but it's commonly misinterpreted as  "now".&lt;/p&gt;
&lt;div class="wiki"&gt;If I'd to place it in the context of Agile, I would derive it from Kanban with one slight modification: &lt;span style="font-style: italic;"&gt;the task you're working on is only important until the next task's priority doesn't exceed the current one's&lt;/span&gt;.  In extreme cases where business is completely aware of what the costs  of switching tasks without finishing them are, it might work. But in  cases which I've seen, the stakeholders didn't even know that this is  happening. Even more, the task switch didn't mean that you don't have to  finish the one you just put behind. That's still top priority, but the  new one is even more important. It took me quite a lot of time to truly  understand what is going on, I'll drive you through my observations.&lt;p /&gt;
&lt;h2&gt;Symptoms:&lt;/h2&gt;
If I had to describe the symptoms in one  word, I'd say: pain. What hurts in ASAPDD gone terribly wrong? As a  developer, you never know how much time you have before you're forced to  work on something else. If you don't know how much time you have, you  have to finish as soon as possible - meaning the simplest and fastest  possible way, while ignoring all professional needs - in order to flag  something finished. If you can't finish before you receive a new task,  then you'll have 2 tasks on you to finish ASAP, and so on, and so on. Of  course you can say no to a new task, but that would leave you without a  job. Given this situation if you know that you most likely have to put  your style, cleanness and reputation aside to do your everyday job, it  hurts and undermines your motivation ... if you care about such things  of course.&lt;br /&gt; But what about managers? I had the &lt;span style="font-style: italic;"&gt;luck&lt;/span&gt; to be a manager in such environment too. You're told by your superior  that the stakeholders do not care, and you can't communicate negative  things towards them. You're told that whatever they want, is to be done.  Given this, you have to promise that you'll get the task done, and you  must tell the same to the developers resulting in a new 'top priority  issue'. You'll say that this is even more urgent than the others. If  not, the other tasks then must be completed by yesterday in order to get  work done on the new one. What happens when the programmers raise their  flags about a task and you tend to agree with them? You'll end up as a  messenger between sides, but you can't be truly honest with the product  side, and you'll have to convince the team to be passive-aggressive and  do as they are told. You can try to defend your team against insane  requirements, but say hello to bonuses and appreciation. You'll be the  guy who always says no and argues, while there's the other ones who  understand the tasks and get them done. This is a true enemy to  creativity and innovation. As you might guessed, the side-effect of such  "pain" is fluctuation. People get under-motivated, fed up, exhausted,  laid off or they just simply quit.&lt;p /&gt;
&lt;h2&gt;Cause:&lt;/h2&gt;
I tired really hard to understand what's going  on, so that I could do things to fix it in my own circle of influence.  Clearly there was a crack in the flow of communication. But why?  Whenever top management or the product team came up with something, they  were hardly told that it can't be done, or can't be done in a week, or  simply that they should come up with smaller chunks of functionality.  They believed that when they feed the development team any input, they  get the output they wanted in a short period of time without any further  interactions. Nobody said truly no to them in order to properly  schedule or break apart a task. Nobody communicated the need to  finalize, stabilize previous features. If they were demoable, they were  done. Even if someone did say no, then the top management came and  pushed the feature into development regardless the raised flags.  Inspecting the pain from the bottom, I saw that even if we told our  managers that we can't do something or that we think it wouldn't be any  good to the product at all, they pushed it on us without defending our  professional opinion. Even if our managers did try to defend us, their  superiors denied help. Even if the superiors tried to help, the CTO  wanted to impress the CEO so much, that he didn't help. Even if the CTO  was convinced, the CEO was the one who seemed to have no common sense.  Finally if even he thought that we're in trouble, the solution was to  "hire more resources", 'cause the feature is so important, that it must  be done. So as the previous ones. I couldn't blame the CEO though, he  was hardly ever aware of the fact that we're having hard times  completing tasks. Why should he even think that hiring more people isn't  the cure? He thought, that everything is going smoothly and that our  throughput is influenced by the number of people working. I'd say he  wasn't respected enough, and he was constantly lied to.&lt;br /&gt; Anyways, how could a feature be so important that it needs instant  development? Well, the sales made an insane promise and the money's  already spent on shiny new golf clubs? Or did a newsflash somehow got  public weeks before planned describing nice new features which didn't  even get into development? Or simply nobody knew that we were not  remotely ready with our current work. Whatever the reason is, the  managers and the developers had to fix someone else's mistake. Mostly.&lt;p /&gt;
&lt;h2&gt;Cure:&lt;/h2&gt;
Why mostly? Because we as developers should have  stood up for ourselves and defend our own beliefs, profession and  credibility. We were too afraid that we could lose our jobs. So what  could have been done? Honesty, respect, professionalism and metrics.  Clearly it's much easier said than done, but let's see what we could  have done from both sides.&lt;br /&gt; We should have increased transparency by radiating the metrics of our  codebase. Telling everyone from top to bottom, that our codebase is  rotting, and if we won't have time to properly code a feature, the time  we'll spend on each following task will exponentially increase. We could  have told our superiors, that if they want to keep a sustainable  development, we should start caring about the health of our product. If  we could get our product and top management team to hear us out and try  to accept that we must re-calibrate our workflow, we might end up in an  adaptive system such as Kanban, so that they could re-prioritize the  upcoming tasks until the very last minute. If instead of staying quiet  we would respect our co-workers by telling the truth and giving honest  feedback, we would give our managers / leaders the ability to think of a  solution instead of leaving them in a belief that everything is fine.  I'm sure that they would try to make their own company work at any  cost... if they knew what to fix. Maybe we could have even helped them  by providing various solutions they could choose from? Ranting never  helps without providing a possible solution to the problem.&lt;br /&gt; What's to be done with the sales / marketing guru who constantly screws  up and ignites new ASAP developments? Help him out! Find out why he's  doing such stupid things. Does he even know he's not doing well? Does he  get any feedback, or just the premium after each deal? I even know that  the product team sometimes needs to test an idea and see if it's viable  or not. They can use the main development team to rapidly build things,  but instead of burning tons of $ on coding man-hour, try to do a paper  mockup and invite a control group. It's less expensive, and gets you  much closer to your customers. What happens when a rapidly developed  idea doesn't work out? The programmers have to revert weeks/months of  work. No matter what methodology you follow, that always introduces  motivation loss.&lt;br /&gt; To wrap it all up, I don't say you need to change organizational  structure to avoid ASAPDD. Just be honest and make sure people would  want to be honest with you. Accept feedback even if it's negative, and  think of it as a candidate to making things better. You won't get a  negative feedback unless the one who provides it doesn't believe that  you can do something about it.&lt;p /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Literature and help&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/Agile-Retrospectives-Making-Teams-Great/dp/0977616649/ref=sr_1_1?ie=UTF8&amp;amp;qid=1320315871&amp;amp;sr=8-1" title="(external link)" rel="nofollow" target="_blank"&gt;[book] Agile Retrospectives: Making Good Teams Great&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/Management-3-0-Developers-Developing-Addison-Wesley/dp/0321712471/ref=sr_1_1?ie=UTF8&amp;amp;qid=1320316031&amp;amp;sr=8-1" title="(external link)" rel="nofollow" target="_blank"&gt;[book] Management 3.0: Leading Agile Developers, Developing Agile Leaders&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/Kanban-Scrum-making-most-both/dp/0557138329/ref=wl_it_dp_o_npd?ie=UTF8&amp;amp;coliid=I37761GBKPYYTQ&amp;amp;colid=2OIXMZ3L8VUSB" title="(external link)" rel="nofollow" target="_blank"&gt;[book] Kanban and Scrum - making the most of both&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/User-Stories-Applied-Software-Development/dp/0321205685/ref=sr_1_1?ie=UTF8&amp;amp;qid=1320316149&amp;amp;sr=8-1" title="(external link)" rel="nofollow" target="_blank"&gt;[book] User Stories Applied: For Agile Software Development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/Kanban-Successful-Evolutionary-Technology-Business/dp/0984521402/ref=sr_1_1?ie=UTF8&amp;amp;qid=1320316186&amp;amp;sr=8-1" title="(external link)" rel="nofollow" target="_blank"&gt;[book] Kanban: Successful Evolutionary Change for Your Technology Business&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/Clean-Coder-Conduct-Professional-Programmers/dp/0137081073/ref=sr_1_1?ie=UTF8&amp;amp;qid=1320316234&amp;amp;sr=8-1" title="(external link)" rel="nofollow" target="_blank"&gt;[book] The Clean Coder: A Code of Conduct for Professional Programmers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://groups.google.com/forum/#%21forum/lonely-coaches-sodality" title="(external link)" rel="nofollow" target="_blank"&gt;[google group] Lonely Coaches Sodality&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;/ul&gt;
&lt;/div&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://alternateillusion.com/asap-driven-development"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://alternateillusion.com/asap-driven-development#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=l9wbYtO0x08:yLI2KpLYYTI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=l9wbYtO0x08:yLI2KpLYYTI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?i=l9wbYtO0x08:yLI2KpLYYTI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=l9wbYtO0x08:yLI2KpLYYTI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?i=l9wbYtO0x08:yLI2KpLYYTI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=l9wbYtO0x08:yLI2KpLYYTI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/alternateillusion/PfqJ/~4/l9wbYtO0x08" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1525535/gravatar.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/36jwATlnaaQx</posterous:profileUrl>
        <posterous:firstName>Marton</posterous:firstName>
        <posterous:lastName>Meszaros</posterous:lastName>
        <posterous:nickName>meza</posterous:nickName>
        <posterous:displayName>Marton Meszaros</posterous:displayName>
      </posterous:author>
      <media:content type="image/png" height="212" width="223" url="http://getfile7.posterous.com/getfile/files.posterous.com/temp-2011-11-03/DGCtCGBFuszqlnxqacFnEzqiiqJCzkeArGoooiHIocdokmyyCtJlvonBdbxH/asap.png">
        <media:thumbnail height="212" width="223" url="http://getfile8.posterous.com/getfile/files.posterous.com/temp-2011-11-03/DGCtCGBFuszqlnxqacFnEzqiiqJCzkeArGoooiHIocdokmyyCtJlvonBdbxH/asap.png.scaled500.png" />
      </media:content>
    <feedburner:origLink>http://alternateillusion.com/asap-driven-development</feedburner:origLink></item>
    <item>
      <pubDate>Tue, 25 Oct 2011 07:13:51 -0700</pubDate>
      <title>Thoughts on: The Future of Agile Development</title>
      <link>http://feedproxy.google.com/~r/alternateillusion/PfqJ/~3/k-JJPRq2Wck/thoughts-on-the-future-of-agile-development</link>
      <guid isPermaLink="false">http://alternateillusion.com/thoughts-on-the-future-of-agile-development</guid>
      <description>&lt;p&gt;
	&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://getfile1.posterous.com/getfile/files.posterous.com/temp-2011-10-25/dvcmqwoiddHadfqkcEfCermiborlcrbFfjmagbkskypqHbewlIfkehGhEhxH/bc519a6c.jpg.scaled1000.jpg"&gt;&lt;img alt="Bc519a6c" height="332" src="http://getfile4.posterous.com/getfile/files.posterous.com/temp-2011-10-25/dvcmqwoiddHadfqkcEfCermiborlcrbFfjmagbkskypqHbewlIfkehGhEhxH/bc519a6c.jpg.scaled600.jpg" width="600" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;I just read an article from &lt;a href="http://twitter.com/mdubakov"&gt;Michael Dubakov&lt;/a&gt; on &lt;a href="http://targetprocess.com/rightthing.html" target="_blank"&gt;The Future of Agile Development&lt;/a&gt;. I encourage you to follow the link and take the time to read it thoroughly, even more than once. It contains interesting facts for both managers and developers.&lt;/p&gt;
&lt;blockquote class="posterous_short_quote"&gt;
&lt;p&gt;&lt;strong&gt;Everyone should clearly understand what are we doing, why are we doing this, and why is it important at this very moment.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The thing I personally don't understand is why do we have to keep on repeating this statement over and over again? Why don't people see that without the knowledge of what we're building, we (as developers) can't decide on behalf of the final goal / values. I know that there might be a great deal of political bullshit up above, and some may think that holding back information makes them special, but this corrupts &lt;em&gt;any&lt;/em&gt; cooperation and not just software development.&lt;/p&gt;
&lt;blockquote class="posterous_short_quote"&gt;
&lt;p&gt;&lt;strong&gt;Developers must set themselves to lifelong learning.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It should be developers &lt;span style="font-family: mceinline;"&gt;&lt;strong&gt;and&lt;/strong&gt; managers&lt;/span&gt;. Both should have a profession which needs to be updated and evaluated constantly. By evaluation I mean mostly self-evaluation. You should be able to see whether you should stop or continue an activity. I understand that as a manager, micro-managing makes you feel invincible and you might be rewarded as the worker of the month, but think of what you're causing. You're stating, that you will tell everyone in the team what and when to do, discouraging them from becoming a self-organizing, proactive team of professionals. The time of command and conquer attitude is dawning, so if you want to stay on the top: learn! (You could start by reading &lt;a href="http://www.amazon.com/Management-3-0-Developers-Developing-Addison-Wesley/dp/0321712471/ref=sr_1_1" target="_blank"&gt;Management 3.0&lt;/a&gt;) As for developers, you should refer to &lt;a href="http://www.amazon.com/Clean-Coder-Conduct-Professional-Programmers/dp/0137081073" target="_blank"&gt;The Clean Coder&lt;/a&gt; book. It tells it all.&lt;/p&gt;
&lt;p&gt;Be keen on your work, and learn to say no especially when you're reputation is at stake.&lt;/p&gt;
&lt;p&gt;There's an evolution leap we could make if the industry truly recognizes the power of the craftsmen. We could influence the way they teach our profession and the skills which are required by HR. But until being able to show up a degree or write a piece of software in a single programming language without any care about style and tests is enough to become a highly paid developer, there's not much hope.&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://alternateillusion.com/thoughts-on-the-future-of-agile-development"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://alternateillusion.com/thoughts-on-the-future-of-agile-development#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=k-JJPRq2Wck:dBK-syAPMjQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=k-JJPRq2Wck:dBK-syAPMjQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?i=k-JJPRq2Wck:dBK-syAPMjQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=k-JJPRq2Wck:dBK-syAPMjQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?i=k-JJPRq2Wck:dBK-syAPMjQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=k-JJPRq2Wck:dBK-syAPMjQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/alternateillusion/PfqJ/~4/k-JJPRq2Wck" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1525535/gravatar.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/36jwATlnaaQx</posterous:profileUrl>
        <posterous:firstName>Marton</posterous:firstName>
        <posterous:lastName>Meszaros</posterous:lastName>
        <posterous:nickName>meza</posterous:nickName>
        <posterous:displayName>Marton Meszaros</posterous:displayName>
      </posterous:author>
      <media:content type="image/jpeg" height="443" width="800" url="http://getfile5.posterous.com/getfile/files.posterous.com/temp-2011-10-25/dvcmqwoiddHadfqkcEfCermiborlcrbFfjmagbkskypqHbewlIfkehGhEhxH/bc519a6c.jpg">
        <media:thumbnail height="277" width="500" url="http://getfile2.posterous.com/getfile/files.posterous.com/temp-2011-10-25/dvcmqwoiddHadfqkcEfCermiborlcrbFfjmagbkskypqHbewlIfkehGhEhxH/bc519a6c.jpg.scaled500.jpg" />
      </media:content>
    <feedburner:origLink>http://alternateillusion.com/thoughts-on-the-future-of-agile-development</feedburner:origLink></item>
    <item>
      <pubDate>Mon, 10 Oct 2011 05:53:00 -0700</pubDate>
      <title>Working efficiently while listening to music. (a reply to @unclebobmartin)</title>
      <link>http://feedproxy.google.com/~r/alternateillusion/PfqJ/~3/z7V5aYXuPL4/working-efficiently-while-listening-to-music</link>
      <guid isPermaLink="false">http://alternateillusion.com/working-efficiently-while-listening-to-music</guid>
      <description>&lt;p&gt;
	&lt;p&gt;I'm currently reading &lt;a href="http://www.amazon.com/Clean-Coder-Conduct-Professional-Programmers/dp/0137081073" title="The Clean Coder on Amazon" target="_blank"&gt;The Clean Coder&lt;/a&gt; book from &lt;a href="cleancoder.posterous.com" title="Uncle Bob's Blog" target="_blank"&gt;Uncle Bob&lt;/a&gt;. It's a must have on the (virtual) bookshelf for everyone who's in for self-retrospectives and continuous improvement. I could praise his work for pages, but the post is about working to music.&lt;/p&gt;
&lt;p&gt;Uncle Bob tells us about his experiences, which I think should be familiar to all who ever tried to craft to music.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;MUSIC&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;At Teradyne, in the late &amp;rsquo;70s, I had a private office. I was the system administrator &lt;br /&gt;of our PDP 11/60, and so I was one of the few programmers allowed to have a &lt;br /&gt;private terminal. That terminal was a VT100 running at 9600 baud and connected &lt;br /&gt;to the PDP 11 with 80 feet of RS232 cable that I had strung over the ceiling tiles &lt;br /&gt;from my office to the computer room.&lt;br /&gt;I had a stereo system in my office. It was an old turntable, amp, and floor &lt;br /&gt;speakers. I had a significant collection of vinyl, including Led Zeppelin, Pink &lt;br /&gt;Floyd, and &amp;hellip; . Well, you get the picture.&lt;br /&gt;I used to crank that stereo and then write code. I thought it helped my &lt;br /&gt;concentration. But I was wrong.&lt;br /&gt;One day I went back into a module that I had been editing while listening to the &lt;br /&gt;opening sequence of The Wall. The comments in that code contained lyrics &lt;br /&gt;from the piece, and editorial notations about dive bombers and crying babies.&lt;br /&gt;That&amp;rsquo;s when it hit me. As a reader of the code, I was learning more about the &lt;br /&gt;music collection of the author (me) than I was learning about the problem that &lt;br /&gt;the code was trying to solve.&lt;br /&gt;I realized that I simply don&amp;rsquo;t code well while listening to music. The music does &lt;br /&gt;not help me focus. Indeed, the act of listening to music seems to consume some &lt;br /&gt;vital resource that my mind needs in order to write clean and well-designed code.&lt;br /&gt;Maybe it doesn&amp;rsquo;t work that way for you. Maybe music helps you write code. I &lt;br /&gt;know lots of people who code while wearing earphones. I accept that the music &lt;br /&gt;may help them, but I am also suspicious that what&amp;rsquo;s really happening is that the &lt;br /&gt;music is helping them enter the Zone.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.objectmentor.com/omTeam/martin_r.html" target="_blank"&gt;Robert C. Martin&lt;/a&gt;, (May 23, 2011), &lt;a href="http://www.amazon.com/Clean-Coder-Conduct-Professional-Programmers/dp/0137081073" target="_blank"&gt;The Clean Coder&lt;/a&gt;, 63 &lt;br /&gt;(quoted with the author's permission)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I truly understand what he's talking about. Been there, done that. I wasn't happy that I couldn't listen to the music I really love, so I started debugging my working process to find a way which to a productive state of mind while listening to music. Preferably music I like.&lt;/p&gt;
&lt;p&gt;I pretty much consider my self a very eclectic person when it comes to music, but I do have &lt;em&gt;some&lt;/em&gt; cornerstones in my taste which can be identified clearly. These all influenced me in a way I'd never forget:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rap with &lt;span class="short_text"&gt;&lt;span class="hps"&gt;appreciable music&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Rap Metal&lt;/li&gt;
&lt;li&gt;Rap Rock&lt;/li&gt;
&lt;li&gt;Heavy Metal&lt;/li&gt;
&lt;li&gt;Punk Rock&lt;/li&gt;
&lt;li&gt;Doom Metal&lt;/li&gt;
&lt;li&gt;Gothic Metal&lt;/li&gt;
&lt;li&gt;EBM&lt;/li&gt;
&lt;li&gt;Industrial&lt;/li&gt;
&lt;li&gt;Electro&lt;/li&gt;
&lt;li&gt;Trance&lt;/li&gt;
&lt;li&gt;Goa&lt;/li&gt;
&lt;li&gt;Progressice House&lt;/li&gt;
&lt;li&gt;Hardstyle&lt;/li&gt;
&lt;li&gt;Rave&lt;/li&gt;
&lt;li&gt;Dance&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;At the time I started deliberately measuring my mood while listening to music, I was way into the Doom/Gothic metal. Delain, Nightwish, Lacuna Coil, Within Temptation, Haggard and etc. Even if you're not into metal, try bearing a few minutes of this track.&lt;/p&gt;
&lt;p&gt;&lt;iframe src="http://www.youtube.com/embed/2iTlu3STCdI?wmode=transparent" allowfullscreen frameborder="0" height="417" width="500"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;As it turned out, my musical education since I was a toddler enabled me to break down music to individual instruments and channels while listening to it. Haggard is a great example of a complex composition which triggers my brain to start decomposing it. Every time I hear it, it's a new adventure of musical discovery. So even that I love this tune very much, I had to ban it from the working hours.&lt;/p&gt;
&lt;p&gt;As I continued to experiment with more and more genres, a pattern started to form. Every tune with variable &lt;em&gt;beat rate, &lt;/em&gt;or with complex instrumental composition was sucking my focus away from work. I still didn't give up on the statement that I do want to enjoy what I'm hearing, so I stepped into another world which I was happy with. Dance/Pop/Radio-friendly stuff. You know, all those lightweight music which can go on for hours without you noticing them on the radio. While you're not even aware of those at the mall or a hairdresser, they have an effect on your subconscious (as it is meant to spread at that level). You find yourself humming the tune and forming the lyrics with your lips. You might not feel distracted, yet you are extremely unproductive.&lt;/p&gt;
&lt;p&gt;&lt;iframe src="http://www.youtube.com/embed/NVRreyfxGGo?wmode=transparent" allowfullscreen frameborder="0" height="417" width="500"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;I started seeking online radio stations, but I had a hard time finding one which played acceptable music for my taste all day. Whenever I tuned into one which was playing something cool, it got worse short after. I had days when I listened to &lt;a href="http://www.youtube.com/results?search_query=infected+mushroom&amp;amp;aq=0&amp;amp;oq=infected+m" title="Infected Mushroom videos" target="_blank"&gt;Infected Mushroom&lt;/a&gt; all day just to keep me going. When I tuned into a psytrance station to get more, I found myself listening to some really annoying crap. Those Infected Mushroom-ish days were my most productive days I had in years. What I really liked about them is that though it gave me quite an energy-boost due to that 138-150 BPM speed, the high sounds kept me from going into the flow too deep. Sometimes I got lost for some seconds in the music which was enough for my brain to think about what I just did on the screen.&lt;/p&gt;
&lt;p&gt;&lt;iframe src="http://www.youtube.com/embed/0H7hBjzjsls?wmode=transparent" allowfullscreen frameborder="0" height="417" width="500"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;So I went looking for high-energy music, but I didn't have the stamina to collect work-compatible goa enough to fill even a day without repeats.&lt;/p&gt;
&lt;p&gt;The best psytrance radio station I found was the one on &lt;a href="http://di.fm" target="_blank"&gt;di.fm&lt;/a&gt;. I started looking around in their stations when I got annoyed way too many times, and suddenly I found the station which kept me going for over than 3 years now: &lt;a href="http://www.di.fm/classictrance/" target="_blank"&gt;Classic Trance Channel&lt;/a&gt;. Not many of you may know that I was a trance dj for quite some time back in my past, and this station plays all the great music from that era. I know these songs so much, that I don't even need to think about them. The only problem was that I still got distracted by the euphoria each song caused as memories associated with the tune started to take over my thoughts. I was pretty happy with these "distractions" though, I felt like two worlds of my soul have finally developed a common interface. (The DJ and the coder)&lt;/p&gt;
&lt;p&gt;It was not so long ago when I accidentally tuned into another station and didn't realize it for several days. It was the &lt;a href="http://www.di.fm/trance/" target="_blank"&gt;Trance Channel&lt;/a&gt;.It plays some nice psy, progressive and classic tunes, old and new which just got released on beatport.&lt;/p&gt;
&lt;p&gt;&lt;iframe src="http://www.youtube.com/embed/2n_woWno9l4?wmode=transparent" allowfullscreen frameborder="0" height="417" width="500"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;Guess what! I even heard a song coming from the EBM/Industrial world. I did shed a tear at that moment.&lt;/p&gt;
&lt;p&gt;Why did I settle with this genre?&lt;/p&gt;
&lt;p&gt;Since I started caring about my health, I am aware of how the heart rate influences my well-being. I know that there's a scientific rate which is the healthiest to one's body. It's the 60-70% of your maximum heart rate, which is 220 minus your age. With my current age:&lt;/p&gt;
&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;((220-26)/100)*65 = 126,1&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;And guess what beat-range trance operates on?&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Trance&lt;/strong&gt; is a genre of &lt;a href="http://en.wikipedia.org/wiki/Electronic_dance_music" title="Electronic dance music"&gt;electronic dance music&lt;/a&gt; that developed in the 1990s;&lt;sup class="reference"&gt;&lt;a href="http://en.wikipedia.org/wiki/Trance_music#cite_note-snomanmanual-2"&gt;&lt;span&gt;[&lt;/span&gt;3&lt;span&gt;]&lt;/span&gt;&lt;/a&gt;&lt;/sup&gt;&lt;sup&gt;:251&lt;/sup&gt; generally characterized by a tempo of between 125 and 150 &lt;a href="http://en.wikipedia.org/wiki/Beats_per_minute" title="Beats per minute" class="mw-redirect"&gt;bpm&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;via &lt;a href="http://en.wikipedia.org/wiki/Trance_music" target="_blank"&gt;Wikipedia&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Basically listening to trance music tunes my body into perfect balance and pulls my productivity way up. Of course, the beat itself should be enough to reach that, and here comes the musical taste to play. The vocals and the pads in trance music let me escape the flow if I wanted it to. I can always close my eyes for a few seconds, get lost in the music and re-think what I just wrote on the screen. Of course nothing beats pairing with the right partner, but for times when I work alone, there's music.&lt;/p&gt;
&lt;p&gt;You may ask why I'm so keen on escaping the flow, as it is a super-productive state of mind. Yes, and no. If you have tests and relatively short pomodoros, there's nothing wrong with 1-2 flowing cycles. But not more. The explanation is to be read in &lt;a href="http://www.amazon.com/Clean-Coder-Conduct-Professional-Programmers/dp/0137081073" target="_blank"&gt;The Clean Coder&lt;/a&gt;. :)&lt;/p&gt;
&lt;p&gt;p.s.: Thanks to &lt;a href="http://twitter.com/#!/unclebobmartin" title="Uncle Bob on twitter" target="_blank"&gt;@unclebobmartin&lt;/a&gt; for letting me quote an entire section!&lt;/p&gt;
&lt;p&gt;update1: &lt;a href="http://www.ehow.com/about_6553059_music-affect-heart-rate_.html" target="_blank"&gt;Why Does Music Affect Your Heart Rate?&lt;/a&gt; article on ehow.com&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://alternateillusion.com/working-efficiently-while-listening-to-music"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://alternateillusion.com/working-efficiently-while-listening-to-music#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=z7V5aYXuPL4:SP3b4rYakc0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=z7V5aYXuPL4:SP3b4rYakc0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?i=z7V5aYXuPL4:SP3b4rYakc0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=z7V5aYXuPL4:SP3b4rYakc0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?i=z7V5aYXuPL4:SP3b4rYakc0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=z7V5aYXuPL4:SP3b4rYakc0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/alternateillusion/PfqJ/~4/z7V5aYXuPL4" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1525535/gravatar.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/36jwATlnaaQx</posterous:profileUrl>
        <posterous:firstName>Marton</posterous:firstName>
        <posterous:lastName>Meszaros</posterous:lastName>
        <posterous:nickName>meza</posterous:nickName>
        <posterous:displayName>Marton Meszaros</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://alternateillusion.com/working-efficiently-while-listening-to-music</feedburner:origLink></item>
    <item>
      <pubDate>Thu, 06 Oct 2011 02:55:03 -0700</pubDate>
      <title>What should have you learned from Steve Jobs?</title>
      <link>http://feedproxy.google.com/~r/alternateillusion/PfqJ/~3/qohs0CuP9XY/what-should-have-you-learnt-from-steve-jobs</link>
      <guid isPermaLink="false">http://alternateillusion.com/what-should-have-you-learnt-from-steve-jobs</guid>
      <description>&lt;p&gt;
	&lt;p style="text-align: center;"&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;img alt="Applenosteve" height="320" src="http://posterous.com/getfile/files.posterous.com/temp-2011-10-06/jijvHldEikAtqbxExICttrEurkfvqluaotHaCzhAgFwAjdHlmnGsgjDrjDpy/applenosteve.jpg.scaled600.jpg" width="320" /&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;I'm no Apple fan. I've tried several Apple products, but I wasn't satisfied at all. I'm just not their target everyday tech noob. I like  to fiddle around with every little aspect of my systems. No hard  feelings, we're not a good match, that's all.&lt;/p&gt;
&lt;p&gt;Despite my incompatibility with the Apple philosophy, I truly admire  Steve Jobs' absolute professional way of thinking. He gave the world  some super-simple user interfaces by realizing that software is built  for users. Users, who are most unlikely nerds. His stubborn and  sometimes indecent attitude drove out those features which seam so  obvious ever since, that it feels like you always had it.&lt;/p&gt;
&lt;p&gt;So what I learned from him and think that every person involved in software craftsmanship should learn also? &lt;strong&gt;You produce for users&lt;/strong&gt;. The one and only important thing to keep in mind while creating a feature is that it &lt;em&gt;must&lt;/em&gt; be communicating it's intent and the value for your user. Nobody will want to use stuff they don't need. Nobody will use something if it's more complicated than what they can use. On the other hand, if your users feel that they are overlooked, you'll earn a bad reputation.&lt;/p&gt;
&lt;p&gt;I feel that Apple products are less configurable than I'd like them to be, and they want me to use them the way they think I need to use them. I hate that, but for that genius targeting, I don't feel that Apple could be blamed. We're no match, I'm not their &lt;em&gt;user&lt;/em&gt;. They produced for their users, that's all.&lt;/p&gt;
&lt;p&gt;If we combine this theory with Agile thoughts, you can easily come to the core genius of Jobs:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Grab yourself a feature from the perspective of a User, which has business value for you&lt;/li&gt;
&lt;li&gt;Identify the value and intent of that feature and marketing it well to both business and users so they truly understand it&lt;/li&gt;
&lt;li&gt;Make sure it can be reached and used the most convenient way for the target user&lt;/li&gt;
&lt;li&gt;Ensure that the functionality serves the intent&lt;/li&gt;
&lt;li&gt;Don't build anything more than that&lt;/li&gt;
&lt;li&gt;Never ever break any of the rules above&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Rings bells?&lt;/p&gt;
&lt;p&gt;The way I see it, Steve Jobs did nothing else, than kept these rules without exception, and was a demanding user of his own products. He produced for those, who use Apple products and on the way he made us question the presence of overcomplicated interfaces.&lt;/p&gt;
&lt;p&gt;I'm hating that my social sites are spammed with "RIP Steve" messages, but I found one which made me write this article:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If you want to honor Steve, don't mourn. Do your best work every day. Live your life to the fullest. Never settle.  His spirit lives on.&lt;br /&gt;via &lt;a href="http://twitter.com/#!/sdw/status/121737638960046081" target="_blank"&gt;&lt;span class="tweet-user-block-full-name"&gt;Sebastiaan de With&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://alternateillusion.com/what-should-have-you-learnt-from-steve-jobs"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://alternateillusion.com/what-should-have-you-learnt-from-steve-jobs#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=qohs0CuP9XY:v5H5H5SfcdA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=qohs0CuP9XY:v5H5H5SfcdA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?i=qohs0CuP9XY:v5H5H5SfcdA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=qohs0CuP9XY:v5H5H5SfcdA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?i=qohs0CuP9XY:v5H5H5SfcdA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=qohs0CuP9XY:v5H5H5SfcdA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/alternateillusion/PfqJ/~4/qohs0CuP9XY" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1525535/gravatar.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/36jwATlnaaQx</posterous:profileUrl>
        <posterous:firstName>Marton</posterous:firstName>
        <posterous:lastName>Meszaros</posterous:lastName>
        <posterous:nickName>meza</posterous:nickName>
        <posterous:displayName>Marton Meszaros</posterous:displayName>
      </posterous:author>
      <media:content type="image/jpeg" height="320" width="320" url="http://getfile0.posterous.com/getfile/files.posterous.com/temp-2011-10-06/jijvHldEikAtqbxExICttrEurkfvqluaotHaCzhAgFwAjdHlmnGsgjDrjDpy/applenosteve.jpg">
        <media:thumbnail height="320" width="320" url="http://getfile3.posterous.com/getfile/files.posterous.com/temp-2011-10-06/jijvHldEikAtqbxExICttrEurkfvqluaotHaCzhAgFwAjdHlmnGsgjDrjDpy/applenosteve.jpg.scaled500.jpg" />
      </media:content>
    <feedburner:origLink>http://alternateillusion.com/what-should-have-you-learnt-from-steve-jobs</feedburner:origLink></item>
    <item>
      <pubDate>Wed, 05 Oct 2011 03:32:49 -0700</pubDate>
      <title>BDD in all layers</title>
      <link>http://feedproxy.google.com/~r/alternateillusion/PfqJ/~3/zlSRK_kpiXA/bdd-in-all-layers</link>
      <guid isPermaLink="false">http://alternateillusion.com/bdd-in-all-layers</guid>
      <description>&lt;p&gt;
	&lt;p&gt;I'm working on a project in my free time where I have the chance and time to play around with different aspects of my job. At the current phase, I'm doing everything by myself. I'm the client and the dev. So the first thing I wanted to do is to write some requirements.&lt;/p&gt;
&lt;p&gt;I want the business logic represented on various clients. This means, that all &lt;strong&gt;features&lt;/strong&gt; I write, should be implemented in every &lt;em&gt;interface&lt;/em&gt; of the product(s).&lt;/p&gt;
&lt;p&gt;As a dev, I know that I'll have a collection of simple objects for the core concept. I'm pretty sure I'd want to build a RESTful API to let others access this logic.&lt;/p&gt;
&lt;p&gt;As business, I want to build a Rails and an Android app for my users to play around with. I'd want to let other developers contribute their own clients for other platforms, but I want all features to be fully available on all platforms, 'cause I want to offer the same thing for everyone. I absolutely don't want to write the specs more than once though.&lt;/p&gt;
&lt;p&gt;So after fiddling around with this a bit, I came up with a git repository for feature files, which describe all the high-end business requirements. These are loaded as submodules (or whatever you want) to each layer of the app. Of course, the driver for these test will differ for each. I mean that for the plain old objects, I'll only include and execute the code itself. For the RESTful API, I'll have some curl-ish HTTP client communicating in raw messages. For the Rails app, I'll have a webdriver for example.&lt;/p&gt;
&lt;p&gt;Again, this is only for those critical (core) features that &lt;strong&gt;must&lt;/strong&gt; be identical and working with all clients.&lt;/p&gt;
&lt;p&gt;For the record, I created a .gitignore file which permits only feature files, directories, readme and the gitignore file itself:&lt;/p&gt;
&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;*.*
!README
!*.feature
!*.gitignore&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://alternateillusion.com/bdd-in-all-layers"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://alternateillusion.com/bdd-in-all-layers#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=zlSRK_kpiXA:KVzKDan68bw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=zlSRK_kpiXA:KVzKDan68bw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?i=zlSRK_kpiXA:KVzKDan68bw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=zlSRK_kpiXA:KVzKDan68bw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?i=zlSRK_kpiXA:KVzKDan68bw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=zlSRK_kpiXA:KVzKDan68bw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/alternateillusion/PfqJ/~4/zlSRK_kpiXA" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1525535/gravatar.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/36jwATlnaaQx</posterous:profileUrl>
        <posterous:firstName>Marton</posterous:firstName>
        <posterous:lastName>Meszaros</posterous:lastName>
        <posterous:nickName>meza</posterous:nickName>
        <posterous:displayName>Marton Meszaros</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://alternateillusion.com/bdd-in-all-layers</feedburner:origLink></item>
    <item>
      <pubDate>Tue, 04 Oct 2011 14:17:30 -0700</pubDate>
      <title>You don't need to worry about readability with scripting languages!?</title>
      <link>http://feedproxy.google.com/~r/alternateillusion/PfqJ/~3/r9HxE4TwgDk/you-dont-need-to-worry-about-readability-with</link>
      <guid isPermaLink="false">http://alternateillusion.com/you-dont-need-to-worry-about-readability-with</guid>
      <description>&lt;p&gt;
	&lt;p&gt;This wasn't my first discussion on the topic. Not even my first team which had a member declaring, that &lt;em&gt;"with dynamically typed (script) languages, you shouldn't bother with patterns and clean code. It's easy and dynamic!"&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;It blows my brain every single time. Especially when I have this argue, and with the script language of choice I start TDD-ing (even if I have never seen it before). Then this other member comes into play and blows it all up 'cause &lt;em&gt;"we need to get it done quick"&lt;/em&gt;. Okay I say. My part is all tested, I'm confident that it works, hook it up with yours and we're done.&lt;/p&gt;
&lt;p&gt;Time goes by, and the first change requests start knocking on the door. It's not too complex, shouldn't take more than a couple of hours... I might finish until lunch. And than I realize that I've spent hours looking at an (mostly) untestable big bowl of giant spaghetti. Because of &lt;em&gt;"doing it quick"&lt;/em&gt;, I have to spend days instead of minutes with every change I have to make. Was it really worth it?&lt;/p&gt;
&lt;p&gt;I also stumbled upon &lt;a href="http://cleancoder.posterous.com/patterns-of-reality" target="_blank"&gt;Uncle Bob's reaction to the same topic&lt;/a&gt;.&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://alternateillusion.com/you-dont-need-to-worry-about-readability-with"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://alternateillusion.com/you-dont-need-to-worry-about-readability-with#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=r9HxE4TwgDk:ObYql_qy1qo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=r9HxE4TwgDk:ObYql_qy1qo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?i=r9HxE4TwgDk:ObYql_qy1qo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=r9HxE4TwgDk:ObYql_qy1qo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?i=r9HxE4TwgDk:ObYql_qy1qo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=r9HxE4TwgDk:ObYql_qy1qo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/alternateillusion/PfqJ/~4/r9HxE4TwgDk" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1525535/gravatar.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/36jwATlnaaQx</posterous:profileUrl>
        <posterous:firstName>Marton</posterous:firstName>
        <posterous:lastName>Meszaros</posterous:lastName>
        <posterous:nickName>meza</posterous:nickName>
        <posterous:displayName>Marton Meszaros</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://alternateillusion.com/you-dont-need-to-worry-about-readability-with</feedburner:origLink></item>
    <item>
      <pubDate>Tue, 04 Oct 2011 06:18:58 -0700</pubDate>
      <title>Separation of blogs</title>
      <link>http://feedproxy.google.com/~r/alternateillusion/PfqJ/~3/3W8dLom_5zk/a-new-era</link>
      <guid isPermaLink="false">http://alternateillusion.com/a-new-era</guid>
      <description>&lt;p&gt;
	&lt;p&gt;So I'll just decouple my personal blog from the professional, and abandon wordpress... Hopefully for ever. No hard feelings, wordpress served well for years, but it's becoming a hassle to maintain it. I was looking for ways to scale it, load-balance it, make it a cloud based application. I was even temped to use a SPOFless, distributed, transparent filesystem just to be able to properly *cloud it*. Nevertheless, it's not worth it. Probably if my blog would have houndreds of active users and publishers, I would have continued the battle. But I just want to write my mind out.&lt;/p&gt;
&lt;p&gt;Why here? Why Posterous? Because I've been to a github meetup once, and ended up drinking with &lt;a href="http://posterous.com/users/d4W0G#activities/page/1" target="_blank"&gt;Sachin Agarwal&lt;/a&gt;&amp;nbsp;and &lt;a href="http://posterous.com/users/Q1vcENpLNL#activities/page/1" target="_blank"&gt;Christopher Burnett&lt;/a&gt;. Yeah, I could probably tell that (true) story as my main motivation, but that's not why I chose Posterous. I'm following &lt;a href="http://blog.crisp.se/author/henrikkniberg" target="_blank"&gt;Henrik Kniberg&lt;/a&gt;&amp;nbsp;(by the way, check out his stuff!), and he did a research which came in handy:&amp;nbsp;&lt;a href="http://bigfamilytrip.posterous.com/and-the-winner-is" target="_blank"&gt;http://bigfamilytrip.posterous.com/and-the-winner-is&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://posterous.com/getfile/files.posterous.com/temp-2011-10-04/ecoEkpHDzuihftJcJAhubvlCspwullGaopCHlrplDEgxwAwxnxeHICgDjtlG/Screen_Shot_2011-09-19_at_23.50.24.png.scaled1000.png"&gt;&lt;img alt="Screen_shot_2011-09-19_at_23" height="463" src="http://posterous.com/getfile/files.posterous.com/temp-2011-10-04/ecoEkpHDzuihftJcJAhubvlCspwullGaopCHlrplDEgxwAwxnxeHICgDjtlG/Screen_Shot_2011-09-19_at_23.50.24.png.scaled600.png" width="600" /&gt;&lt;/a&gt;
&lt;/div&gt;
I'm not sure if I will migrate the old stuff from the original site or not. Some are out-dated, some can be added easily. Probably I'll add the latter... Sooner or later :)&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://alternateillusion.com/a-new-era"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://alternateillusion.com/a-new-era#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=3W8dLom_5zk:lTB2EFlReeo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=3W8dLom_5zk:lTB2EFlReeo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?i=3W8dLom_5zk:lTB2EFlReeo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=3W8dLom_5zk:lTB2EFlReeo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?i=3W8dLom_5zk:lTB2EFlReeo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=3W8dLom_5zk:lTB2EFlReeo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/alternateillusion/PfqJ/~4/3W8dLom_5zk" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1525535/gravatar.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/36jwATlnaaQx</posterous:profileUrl>
        <posterous:firstName>Marton</posterous:firstName>
        <posterous:lastName>Meszaros</posterous:lastName>
        <posterous:nickName>meza</posterous:nickName>
        <posterous:displayName>Marton Meszaros</posterous:displayName>
      </posterous:author>
      <media:content type="image/png" height="620" width="803" url="http://getfile6.posterous.com/getfile/files.posterous.com/temp-2011-10-04/ecoEkpHDzuihftJcJAhubvlCspwullGaopCHlrplDEgxwAwxnxeHICgDjtlG/Screen_Shot_2011-09-19_at_23.50.24.png">
        <media:thumbnail height="386" width="500" url="http://getfile4.posterous.com/getfile/files.posterous.com/temp-2011-10-04/ecoEkpHDzuihftJcJAhubvlCspwullGaopCHlrplDEgxwAwxnxeHICgDjtlG/Screen_Shot_2011-09-19_at_23.50.24.png.scaled500.png" />
      </media:content>
    <feedburner:origLink>http://alternateillusion.com/a-new-era</feedburner:origLink></item>
    <item>
      <pubDate>Wed, 16 Feb 2011 15:31:00 -0800</pubDate>
      <title>Transitioning from working software to quality software</title>
      <link>http://feedproxy.google.com/~r/alternateillusion/PfqJ/~3/q6LFE8mBwb4/transitioning-from-working-software-to-qualit</link>
      <guid isPermaLink="false">http://alternateillusion.com/transitioning-from-working-software-to-qualit</guid>
      <description>&lt;p&gt;
	&lt;div style="clear: both; float: none;"&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;img alt="Media_https3amazonaws_wmmcr" height="256" src="http://posterous.com/getfile/files.posterous.com/import-zsua/eEzqJzeoFpimsudktFFapxbnvGbABxugauHdHIIrjyoEfwobCvdyehAiwipG/media_https3amazonaws_wmmCr.png.scaled600.png" width="300" /&gt;
&lt;/div&gt;
Me and my co-workers has put together a presentation about software metrics and the meanings of the numbers. It's intent is to expose the benefits of measuring multiple aspects of the development besides revenue. The slide should be open-source and a matter of discussion. All remarks, tweets, shares and ideas are welcome!
&lt;div&gt;&lt;br /&gt;
&lt;div style="clear: both; float: none;"&gt;
&lt;div style=""&gt;&lt;strong style="display: block; margin: 12px 0 4px;"&gt;&lt;a href="http://www.slideshare.net/vsbmeza/transitioning-to-quality-software" title="Transitioning to quality software"&gt;Transitioning to quality software&lt;/a&gt;&lt;/strong&gt;
&lt;object height="355" width="425"&gt;
&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=transitioningfromworkingsoftwareto-110216085546-phpapp02&amp;amp;rel=0&amp;amp;stripped_title=transitioning-to-quality-software&amp;amp;userName=vsbmeza" /&gt;
&lt;param name="allowFullScreen" value="true" /&gt;
&lt;param name="allowScriptAccess" value="always" /&gt; &lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=transitioningfromworkingsoftwareto-110216085546-phpapp02&amp;amp;rel=0&amp;amp;stripped_title=transitioning-to-quality-software&amp;amp;userName=vsbmeza" type="application/x-shockwave-flash" height="355" width="425"&gt;&lt;/embed&gt;
&lt;/object&gt;
&lt;div style="padding: 5px 0 12px;"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/vsbmeza"&gt;M&amp;aacute;rton M&amp;eacute;sz&amp;aacute;ros&lt;/a&gt;.&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://alternateillusion.com/transitioning-from-working-software-to-qualit"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://alternateillusion.com/transitioning-from-working-software-to-qualit#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=q6LFE8mBwb4:5j1tA960rqg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=q6LFE8mBwb4:5j1tA960rqg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?i=q6LFE8mBwb4:5j1tA960rqg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=q6LFE8mBwb4:5j1tA960rqg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?i=q6LFE8mBwb4:5j1tA960rqg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=q6LFE8mBwb4:5j1tA960rqg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/alternateillusion/PfqJ/~4/q6LFE8mBwb4" height="1" width="1"/&gt;</description>
      <media:content type="image/png" height="256" width="300" url="http://getfile0.posterous.com/getfile/files.posterous.com/import-zsua/eEzqJzeoFpimsudktFFapxbnvGbABxugauHdHIIrjyoEfwobCvdyehAiwipG/media_https3amazonaws_wmmCr.png">
        <media:thumbnail height="256" width="300" url="http://getfile5.posterous.com/getfile/files.posterous.com/import-zsua/eEzqJzeoFpimsudktFFapxbnvGbABxugauHdHIIrjyoEfwobCvdyehAiwipG/media_https3amazonaws_wmmCr.png.scaled500.png" />
      </media:content>
    <feedburner:origLink>http://alternateillusion.com/transitioning-from-working-software-to-qualit</feedburner:origLink></item>
    <item>
      <pubDate>Fri, 22 Oct 2010 22:00:00 -0700</pubDate>
      <title>Just read: Lisa Crispin and Janet Gregory - Agile Testing</title>
      <link>http://feedproxy.google.com/~r/alternateillusion/PfqJ/~3/SYVLD3EwubA/just-read-lisa-crispin-and-janet-gregory-agil</link>
      <guid isPermaLink="false">http://alternateillusion.com/just-read-lisa-crispin-and-janet-gregory-agil</guid>
      <description>&lt;p&gt;
	&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;img alt="Media_https3amazonaws_tftsb" height="300" src="http://posterous.com/getfile/files.posterous.com/import-zsua/ohxvczdBmGECsrJjzumnkszCssEakqvlkvybFgvJcJDlbtvIzAJvHFGuJepc/media_https3amazonaws_tFtsb.jpg.scaled600.jpg" width="226" /&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;blockquote&gt;
&lt;h2&gt;Product Details&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt; &lt;strong&gt;Paperback:&lt;/strong&gt; 576 pages&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Publisher:&lt;/strong&gt; Addison-Wesley Professional; 1 edition (January 9, 2009)&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Language:&lt;/strong&gt; English&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;ISBN-10:&lt;/strong&gt; 0321534468&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;ISBN-13:&lt;/strong&gt; 978-0321534460&lt;/li&gt;
&lt;li&gt; &lt;strong&gt; Product Dimensions: &lt;/strong&gt; 9.1 x 6.9 x 1.4 inches&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Shipping Weight:&lt;/strong&gt; 1.8 pounds&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;For developers / testers not new to the agile world this book can be the most depressive piece of art. It tells a story of a way of development you know is out there, but most not yet have reached.&amp;nbsp; &lt;a href="http://twitter.com/lisacrispin"&gt;Lisa Crispin&lt;/a&gt; and &lt;a href="http://twitter.com/janetgregoryca"&gt;Janet Gregory&lt;/a&gt; share their experiences through personal stories and examples from others.&lt;/p&gt;
&lt;blockquote&gt;There are some questions the authors want to answer: 
&lt;ul&gt;
&lt;li&gt;As a tester, what is my role on an agile team?&lt;/li&gt;
&lt;li&gt;How do I transition from a traditional phased/gated development cycle to agile?&lt;/li&gt;
&lt;li&gt;How do we get testers engaged with the rest of the agile development team?&lt;/li&gt;
&lt;li&gt;What tools do I need?&lt;/li&gt;
&lt;li&gt;Who does what testing on an agile team?&lt;/li&gt;
&lt;li&gt;How can testing "keep up" with short iterations?&lt;/li&gt;
&lt;li&gt;How do we know if we're doing a good job of testing? How can we improve?&lt;/li&gt;
&lt;li&gt;What do testers do the first few days of an iteration, before any stories are done?&lt;/li&gt;
&lt;li&gt;None of our testing is automated. Where do we start, and how do we find time to do automation?&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;Did I get answers to all this? Yes I did! There's a way of thinking that I was never aware of as a developer. I can now look through the eyes of a tester and my design is driven by the phrase: "Ok, but how would I test this?" How would I present that I have done what I was told to? How can I be sure to create what the customer wants me to.  Besides giving a throughout view upon the work of an agile tester we get to know the fundamental elements of SCRUM.&lt;/p&gt;
&lt;h2&gt;Editorial Reviews&lt;/h2&gt;
&lt;h3&gt;Review&lt;/h3&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://alternateillusion.com/just-read-lisa-crispin-and-janet-gregory-agil"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://alternateillusion.com/just-read-lisa-crispin-and-janet-gregory-agil#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=SYVLD3EwubA:5K7TcfLagrk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=SYVLD3EwubA:5K7TcfLagrk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?i=SYVLD3EwubA:5K7TcfLagrk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=SYVLD3EwubA:5K7TcfLagrk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?i=SYVLD3EwubA:5K7TcfLagrk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=SYVLD3EwubA:5K7TcfLagrk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/alternateillusion/PfqJ/~4/SYVLD3EwubA" height="1" width="1"/&gt;</description>
      <media:content type="image/jpeg" height="300" width="226" url="http://getfile9.posterous.com/getfile/files.posterous.com/import-zsua/ohxvczdBmGECsrJjzumnkszCssEakqvlkvybFgvJcJDlbtvIzAJvHFGuJepc/media_https3amazonaws_tFtsb.jpg">
        <media:thumbnail height="300" width="226" url="http://getfile4.posterous.com/getfile/files.posterous.com/import-zsua/ohxvczdBmGECsrJjzumnkszCssEakqvlkvybFgvJcJDlbtvIzAJvHFGuJepc/media_https3amazonaws_tFtsb.jpg.scaled500.jpg" />
      </media:content>
    <feedburner:origLink>http://alternateillusion.com/just-read-lisa-crispin-and-janet-gregory-agil</feedburner:origLink></item>
    <item>
      <pubDate>Wed, 20 Oct 2010 16:32:59 -0700</pubDate>
      <title>Jailing bugs</title>
      <link>http://feedproxy.google.com/~r/alternateillusion/PfqJ/~3/7NCzzRZKm-E/jailing-bugs</link>
      <guid isPermaLink="false">http://alternateillusion.com/jailing-bugs</guid>
      <description>&lt;p&gt;
	&lt;div class='p_embed p_image_embed'&gt;
&lt;img alt="Media_https3amazonaws_iaewo" height="225" src="http://posterous.com/getfile/files.posterous.com/import-zsua/DJAqiycpItfyjakjGdzHmGbnrpcHhegaDfeglanxzxhqJAFptsqyHszyubtE/media_https3amazonaws_IAewo.jpg.scaled600.jpg" width="300" /&gt;
&lt;/div&gt;
Handling bugs is never an easy task. Some are not even meant to be logged while some can not be fixed without blowing up the whole system. Some of the books I've read described great ways to deal with defects. Most suggest to record them to a DTS, write some reproduction steps and wait for the programmer team to fix it. This approach works well and gives a good numbers to generate trends. I might be a bit obsessed with automation and TDD though, so I've started using something else.
&lt;h2&gt;What is a bug in this context?&lt;/h2&gt;
&lt;em&gt;A bug is a piece of &lt;strong&gt;behavior&lt;/strong&gt; that &lt;strong&gt;doesn't work as expected&lt;/strong&gt; from the &lt;strong&gt;user's point of view&lt;/strong&gt;. &lt;/em&gt;

The key points in the definition above are that we're only talking about defects that can be reproduced from the user interface only. Why? Because no one cares about the unseen.
&lt;h2&gt;So you've caught a bug!&lt;/h2&gt;
Great! You probably have some notes about how to recreate the defect. You are aware of what it should be doing instead of what it is doing now. You'll probably record it to a bug tracker, but try this:
&lt;h2&gt;Create an automated test!&lt;/h2&gt;
All levels of testing require inputs and expectations. Even the smallest micro-test that drive core methods rely on expected output from a known input. In the current scenario you'll have steps as inputs and you have expectations how your user interface should respond to those. For a primitive demonstration lets look at the following bug report:
&lt;blockquote&gt;
&lt;h3&gt;Description:&lt;/h3&gt;
A logged in user of the system cannot change the registered e-mail address!
&lt;h3&gt;Steps to reproduce:&lt;/h3&gt;
&lt;ol&gt;
	&lt;li&gt;Open the site.&lt;/li&gt;
	&lt;li&gt;Log into the site.&lt;/li&gt;
	&lt;li&gt;Click the "Account Settings" link.&lt;/li&gt;
	&lt;li&gt;Change the e-mail address via the settings form.&lt;/li&gt;
	&lt;li&gt;Click "Save" button.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Expected behavior:&lt;/h3&gt;
The pre-populated e-mail field should contain the new e-mail.
&lt;h3&gt;Current behavior:&lt;/h3&gt;
The new e-mail address is not saved, the old one is visible after saving the form.&lt;/blockquote&gt;
In your automated test script you should be able to easily re-create the steps above. The interesting part are the expectations. The just enough assertions to consider the bug fixed depends on the complexity of the error. In our case it's a pretty straight-forward conclusion: &lt;em&gt;assert that the e-mail field after submitting the data holds the e-mail address we've entered before.&lt;/em&gt;

Having test like these is pretty nice if you make them part of your regression suite. It helps you target error prone parts of your system and if such test case is present you can be sure you'll be notified if the bug resurrects.
&lt;h2&gt;But how to handle these before the bug is fixed?&lt;/h2&gt;
Create a test suite for bugs. With TestNG you can easily manage test groups. I prefer having a group named &lt;em&gt;Bugs &lt;/em&gt;and one called &lt;em&gt;Regression. &lt;/em&gt;The latter contains only bugs that are fixed. The tests in the former are executed via a nightly run for example. Each run will report the &lt;strong&gt;number of tests failed&lt;/strong&gt; only in this case it will mean: &lt;strong&gt;the number of bugs still alive!&lt;/strong&gt; If you hook these up with a CI server you can get nice little trends showing the number of living bugs over time.

It works for us! Leave your thoughts if you have tried this approach, I'm extremely curious!
&lt;h3&gt;How many bugs live in your system?&lt;/h3&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://alternateillusion.com/jailing-bugs"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://alternateillusion.com/jailing-bugs#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=7NCzzRZKm-E:2qyzKOzorfM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=7NCzzRZKm-E:2qyzKOzorfM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?i=7NCzzRZKm-E:2qyzKOzorfM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=7NCzzRZKm-E:2qyzKOzorfM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?i=7NCzzRZKm-E:2qyzKOzorfM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=7NCzzRZKm-E:2qyzKOzorfM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/alternateillusion/PfqJ/~4/7NCzzRZKm-E" height="1" width="1"/&gt;</description>
      <media:content type="image/jpeg" height="225" width="300" url="http://getfile9.posterous.com/getfile/files.posterous.com/import-zsua/DJAqiycpItfyjakjGdzHmGbnrpcHhegaDfeglanxzxhqJAFptsqyHszyubtE/media_https3amazonaws_IAewo.jpg">
        <media:thumbnail height="225" width="300" url="http://getfile9.posterous.com/getfile/files.posterous.com/import-zsua/DJAqiycpItfyjakjGdzHmGbnrpcHhegaDfeglanxzxhqJAFptsqyHszyubtE/media_https3amazonaws_IAewo.jpg.scaled500.jpg" />
      </media:content>
    <feedburner:origLink>http://alternateillusion.com/jailing-bugs</feedburner:origLink></item>
    <item>
      <pubDate>Tue, 03 Aug 2010 12:02:26 -0700</pubDate>
      <title>Clean Tdd Cheat sheet</title>
      <link>http://feedproxy.google.com/~r/alternateillusion/PfqJ/~3/4xAN-I7hzPE/clean-tdd-cheat-sheet</link>
      <guid isPermaLink="false">http://alternateillusion.com/clean-tdd-cheat-sheet</guid>
      <description>&lt;p&gt;
	&lt;div class='p_embed p_image_embed'&gt;
&lt;img alt="Media_https3amazonaws_qgiwm" height="212" src="http://posterous.com/getfile/files.posterous.com/import-zsua/FeubIvEhxBvpdhtgJvuHfgAfxvbgmajqsujlfnarDjHclaGxxhDJHwhllkGu/media_https3amazonaws_qGiwm.png.scaled600.png" width="300" /&gt;
&lt;/div&gt;
Just found this great cheatsheet on twitter by &lt;a href="http://twitter.com/nickfloyd/statuses/20174112840"&gt;@nickfloyd&lt;/a&gt;.

Use it wise and be the proud creator of lots of nice clean code!

&lt;a href="http://s3.amazonaws.com/alternateillusion.com/uploads/2010/08/Clean_TDD_Cheat_Sheet_V1.1.pdf"&gt;download pdf&lt;/a&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://alternateillusion.com/clean-tdd-cheat-sheet"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://alternateillusion.com/clean-tdd-cheat-sheet#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=4xAN-I7hzPE:BhGcQZioyR8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=4xAN-I7hzPE:BhGcQZioyR8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?i=4xAN-I7hzPE:BhGcQZioyR8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=4xAN-I7hzPE:BhGcQZioyR8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?i=4xAN-I7hzPE:BhGcQZioyR8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=4xAN-I7hzPE:BhGcQZioyR8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/alternateillusion/PfqJ/~4/4xAN-I7hzPE" height="1" width="1"/&gt;</description>
      <media:content type="image/png" height="212" width="300" url="http://getfile0.posterous.com/getfile/files.posterous.com/import-zsua/FeubIvEhxBvpdhtgJvuHfgAfxvbgmajqsujlfnarDjHclaGxxhDJHwhllkGu/media_https3amazonaws_qGiwm.png">
        <media:thumbnail height="212" width="300" url="http://getfile6.posterous.com/getfile/files.posterous.com/import-zsua/FeubIvEhxBvpdhtgJvuHfgAfxvbgmajqsujlfnarDjHclaGxxhDJHwhllkGu/media_https3amazonaws_qGiwm.png.scaled500.png" />
      </media:content>
    <feedburner:origLink>http://alternateillusion.com/clean-tdd-cheat-sheet</feedburner:origLink></item>
    <item>
      <pubDate>Mon, 02 Aug 2010 15:48:41 -0700</pubDate>
      <title>We're not superheroes - Invisible to the eye</title>
      <link>http://feedproxy.google.com/~r/alternateillusion/PfqJ/~3/7uTfs84QSso/were-not-superheroes-invisible-to-the-eye</link>
      <guid isPermaLink="false">http://alternateillusion.com/were-not-superheroes-invisible-to-the-eye</guid>
      <description>&lt;p&gt;
	&lt;blockquote&gt;
&lt;div class='p_embed p_image_embed'&gt;
&lt;img alt="Media_https3amazonaws_pncho" height="440" src="http://posterous.com/getfile/files.posterous.com/import-zsua/fnJihfxIopjnpcEIJyGywkotbAciFsmpmzAjyzbIducxqCDnlgndvExBCsnw/media_https3amazonaws_pncho.png.scaled600.png" width="274" /&gt;
&lt;/div&gt;


We're not superheroes

I was reading bits of Coders at work, a book of interviews to famous programmers. I didn't like it very much: here's why.

The first thing I noticed is that many questions are biographical. I do not care about knowing if Ken Thompson, which built Unix, worked on a PDP-10 or a PDP-11 or a PDP-7. By the way, I do not even know how those things look like: I was born in 1988.

Besides that, &lt;strong&gt;this kind of books tells you how to live like a superhero coder, but most of us just aren't (me too).&lt;/strong&gt;

Thompson could work out the design of software in his mind for a month before starting coding, I can't (or I can waste less time by writing something in code).

Knuth could design and code LaTeX in pencil and write for six months before do any testing. I can't (or I can, but I would be much more efficient with a quick feedback loop like Test-Driven Development's one.)

Zawinski could pick up rolls of duct tape and make Netscape work in six months (picking up also a lot of technical debt and vanishing from the market in the following years). I prefer working software over comprehensive documentation but not over sustainable development.

So we're not superheroes:&lt;strong&gt; test suites, source control, Continuos Integration are our bat-gadgets&lt;/strong&gt; which enable us to deliver software while working for a living and not living for work, like Ken Thompson and his 28-hour days or Bill Gates and his nights at school programming. Let the people with the superpowers shoot webs all night long, while we go back to Wayne Manor and throw a party. At least Batman hasn't a day job: poor's Peter Parker must live a miserable life.

Published by Giorgio

via &lt;a href="http://giorgiosironi.blogspot.com/2010/08/were-not-superheroes.html"&gt;We're not superheroes - Invisible to the eye&lt;/a&gt;.&lt;/blockquote&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://alternateillusion.com/were-not-superheroes-invisible-to-the-eye"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://alternateillusion.com/were-not-superheroes-invisible-to-the-eye#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=7uTfs84QSso:glPgN3nyNwU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=7uTfs84QSso:glPgN3nyNwU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?i=7uTfs84QSso:glPgN3nyNwU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=7uTfs84QSso:glPgN3nyNwU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?i=7uTfs84QSso:glPgN3nyNwU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=7uTfs84QSso:glPgN3nyNwU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/alternateillusion/PfqJ/~4/7uTfs84QSso" height="1" width="1"/&gt;</description>
      <media:content type="image/png" height="440" width="274" url="http://getfile3.posterous.com/getfile/files.posterous.com/import-zsua/fnJihfxIopjnpcEIJyGywkotbAciFsmpmzAjyzbIducxqCDnlgndvExBCsnw/media_https3amazonaws_pncho.png">
        <media:thumbnail height="440" width="274" url="http://getfile1.posterous.com/getfile/files.posterous.com/import-zsua/fnJihfxIopjnpcEIJyGywkotbAciFsmpmzAjyzbIducxqCDnlgndvExBCsnw/media_https3amazonaws_pncho.png.scaled500.png" />
      </media:content>
    <feedburner:origLink>http://alternateillusion.com/were-not-superheroes-invisible-to-the-eye</feedburner:origLink></item>
    <item>
      <pubDate>Mon, 02 Aug 2010 07:32:41 -0700</pubDate>
      <title>Just read: Elisabeth and Eric Freeman – Head First Design Patterns</title>
      <link>http://feedproxy.google.com/~r/alternateillusion/PfqJ/~3/2g_dFLIxl4U/just-read-elisabeth-and-eric-freeman-head-fir</link>
      <guid isPermaLink="false">http://alternateillusion.com/just-read-elisabeth-and-eric-freeman-head-fir</guid>
      <description>&lt;p&gt;
	&lt;div class='p_embed p_image_embed'&gt;
&lt;img alt="Media_https3amazonaws_cqyna" height="300" src="http://posterous.com/getfile/files.posterous.com/import-zsua/FopqyndItydIAClamrmDEjybievgvytHnfnkFyoEFsrpowBlBoEkhdajCxwy/media_https3amazonaws_CqynA.jpg.scaled600.jpg" width="259" /&gt;
&lt;/div&gt;



&lt;blockquote&gt;
&lt;h2&gt;Product Details&lt;/h2&gt;
&lt;ul&gt;
	&lt;li&gt;
&lt;strong&gt;Paperback:&lt;/strong&gt; 688 pages&lt;/li&gt;
	&lt;li&gt;
&lt;strong&gt;Publisher:&lt;/strong&gt; O'Reilly Media; 1 edition (October 25, 2004)&lt;/li&gt;
	&lt;li&gt;
&lt;strong&gt;Language:&lt;/strong&gt; English&lt;/li&gt;
	&lt;li&gt;
&lt;strong&gt;ISBN-10:&lt;/strong&gt; 0596007124&lt;/li&gt;
	&lt;li&gt;
&lt;strong&gt;ISBN-13:&lt;/strong&gt; 978-0596007126&lt;/li&gt;
	&lt;li&gt;
&lt;strong&gt; Product Dimensions: &lt;/strong&gt; 9.2 x 8 x 1.4 inches&lt;/li&gt;
	&lt;li&gt;
&lt;strong&gt;Shipping Weight:&lt;/strong&gt; 2.8 pounds&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

Not as bad as it may look by the cover! Elisabeth Freeman relies on the feminine way of association. There are a lot of pictures, arrows, speech bubbles, acts and life-examples describing the patterns. If you have a good imagination and can easily recall pieces of information by keywords like pizza and duck, then this book is for you. If you want a reference-book of design patterns that you can hit up while coding, look for something else. There is one thing you must read on page 526, the MVC song:
&lt;a href="http://csl.ensm-douai.fr/noury/uploads/20/ModelViewController.mp3"&gt;MVC song&lt;/a&gt;


&lt;blockquote&gt;
&lt;h2&gt;Editorial Reviews&lt;/h2&gt;
&lt;h3&gt;Review&lt;/h3&gt;
&lt;div&gt;This is a gimmicky book that actually works for once. It is an  intelligent and well thought-out discussion of Java design patterns, and  if you dont know what a design pattern is then this is an excellent way  to find out. It is also an interested discussion of object-oriented  design. I found that the authors often anticipated my reaction to their  initial explanations and asked the questions that I would have asked had  it been a lecture. - Mike James, VSJ, April 2005&lt;/div&gt;
&lt;h3&gt;Product Description&lt;/h3&gt;
You're not alone.

At any given moment, somewhere in the world  someone struggles with the same software design problems you have. You  know you don't want to reinvent the wheel (or worse, a flat tire), so  you look to Design Patterns--the lessons learned by those who've faced  the same problems. With Design Patterns, you get to take advantage of  the best practices and experience of others, so that you can spend your  time on... something else. Something more challenging. Something more  complex. Something more fun.

You want to learn about the  patterns that matter--why to use them, when to use them, how to use them  (and when NOT to use them). But you don't just want to see how patterns  look in a book, you want to know how they look "in the wild".  In their  native environment. In other words, in real world applications. You  also want to learn how patterns are used in the Java API, and how to  exploit Java's built-in pattern support in your own code.

You  want to learn the real OO design principles and why everything your boss  told you about inheritance might be wrong (and what to do instead).   You want to learn how those principles will help the next time you're up  a creek without a design paddle pattern.

Most importantly,  you want to learn the "secret language" of Design Patterns so that you  can hold your own with your co-worker (and impress cocktail party  guests) when he casually mentions his stunningly clever use of Command,  Facade, Proxy, and Factory in between sips of a martini. You'll easily  counter with your deep understanding of why Singleton isn't as simple as  it sounds, how the Factory is so often misunderstood, or on the real  relationship between Decorator, Facade and Adapter.

With Head  First Design Patterns, you'll avoid the embarrassment of thinking  Decorator is something from the "Trading Spaces" show. Best of all, in a  way that won't put you to sleep!  We think your time is too important  (and too short) to spend it struggling with academic texts.

If  you've read a Head First book, you know what to expect -  a  visually-rich format designed for the way your brain works. Using the  latest research in neurobiology, cognitive science, and learning theory,  Head First Design Patterns will load patterns into your brain in a way  that sticks. In a way that lets you put them to work immediately. In a  way that makes you better at solving software design problems, and  better at speaking the language of patterns with others on your team.&lt;/blockquote&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://alternateillusion.com/just-read-elisabeth-and-eric-freeman-head-fir"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://alternateillusion.com/just-read-elisabeth-and-eric-freeman-head-fir#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=2g_dFLIxl4U:_FMIb5mguPQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=2g_dFLIxl4U:_FMIb5mguPQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?i=2g_dFLIxl4U:_FMIb5mguPQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=2g_dFLIxl4U:_FMIb5mguPQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?i=2g_dFLIxl4U:_FMIb5mguPQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=2g_dFLIxl4U:_FMIb5mguPQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/alternateillusion/PfqJ/~4/2g_dFLIxl4U" height="1" width="1"/&gt;</description>
      <media:content type="image/jpeg" height="300" width="259" url="http://getfile5.posterous.com/getfile/files.posterous.com/import-zsua/FopqyndItydIAClamrmDEjybievgvytHnfnkFyoEFsrpowBlBoEkhdajCxwy/media_https3amazonaws_CqynA.jpg">
        <media:thumbnail height="300" width="259" url="http://getfile0.posterous.com/getfile/files.posterous.com/import-zsua/FopqyndItydIAClamrmDEjybievgvytHnfnkFyoEFsrpowBlBoEkhdajCxwy/media_https3amazonaws_CqynA.jpg.scaled500.jpg" />
      </media:content>
    <feedburner:origLink>http://alternateillusion.com/just-read-elisabeth-and-eric-freeman-head-fir</feedburner:origLink></item>
    <item>
      <pubDate>Sun, 25 Jul 2010 16:26:19 -0700</pubDate>
      <title>Just read: Mike Cohn - User Stories Applied</title>
      <link>http://feedproxy.google.com/~r/alternateillusion/PfqJ/~3/g-e8sN0aVb8/just-read-mike-cohn-user-stories-applied</link>
      <guid isPermaLink="false">http://alternateillusion.com/just-read-mike-cohn-user-stories-applied</guid>
      <description>&lt;p&gt;
	&lt;div class='p_embed p_image_embed'&gt;
&lt;img alt="Media_https3amazonaws_ebimo" height="300" src="http://posterous.com/getfile/files.posterous.com/import-zsua/BaBHwowBorhptkjBuEGodJnqjvqqpCeBpiFGDlqemtBGlAwsxBnawxmcilEl/media_https3amazonaws_eBimo.jpg.scaled600.jpg" width="226" /&gt;
&lt;/div&gt;

&lt;blockquote&gt;
&lt;h2&gt;Product Details&lt;/h2&gt;
&lt;ul&gt;
	&lt;li&gt;
&lt;strong&gt;Paperback:&lt;/strong&gt; 304 pages&lt;/li&gt;
	&lt;li&gt;
&lt;strong&gt;Publisher:&lt;/strong&gt; Addison-Wesley Professional (March 11, 2004)&lt;/li&gt;
	&lt;li&gt;
&lt;strong&gt;Language:&lt;/strong&gt; English&lt;/li&gt;
	&lt;li&gt;
&lt;strong&gt;ISBN-10:&lt;/strong&gt; 0321205685&lt;/li&gt;
	&lt;li&gt;
&lt;strong&gt;ISBN-13:&lt;/strong&gt; 978-0321205681&lt;/li&gt;
	&lt;li&gt;
&lt;strong&gt; Product Dimensions: &lt;/strong&gt; 9.1 x 7 x 0.7 inches&lt;/li&gt;
	&lt;li&gt;
&lt;strong&gt;Shipping Weight:&lt;/strong&gt; 1.2 pounds&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
I was holding this book in my hands a few times before I actually started reading it. I didn't believe that a book can actually get me into a mood that extreme development and agile means to me, but I was wrong. This book should be read by everyone who is envolved in software development. I believe that this approach could be aplied to other aspects of life, but that's just my opinion. We will be referring to this book in the &lt;a href="http://alternateillusion.com/munchkin-articles/"&gt;Munchkin&lt;/a&gt; project, it gave us a lot of great ideas!
&lt;blockquote&gt;
&lt;h2&gt;Editorial Reviews&lt;/h2&gt;
&lt;h3&gt;Product Description&lt;/h3&gt;
&lt;div&gt;The concept of user stories has its roots as one of the main tenets of  Extreme Programming. In simple terms, user stories represent an  effective means of gathering requirements from the customer (roughly  akin to use cases). This book describes user stories and demonstrates  how they can be used to properly plan, manage, and test software  development projects. The book highlights both successful and  unsuccessful implementations of the concept, and provides sets of  questions and exercises that drive home its main points. After absorbing  the lessons in this book, readers will be able to introduce user  stories in their organizations as an effective means of determining  precisely what is required of a software application.&lt;/div&gt;
&lt;h3&gt;From the Back Cover&lt;/h3&gt;
Agile requirements: discovering what your users really want. With this book, you will learn to:
&lt;ul&gt;
	&lt;li&gt;Flexible, quick and practical requirements that work&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;Save time and develop better software that meets users' needs&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;Gathering user stories -- even when you can't talk to users&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;How user stories work, and how they differ from use cases, scenarios, and traditional requirements&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;Leveraging user stories as part of planning, scheduling, estimating, and testing&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;Ideal for Extreme Programming, Scrum, or any other agile methodology&lt;/li&gt;
&lt;/ul&gt;
----------------------------------------------------------------------------------------------------------

Thoroughly reviewed and eagerly anticipated by the agile community, &lt;em&gt;User Stories Applied&lt;/em&gt; offers a requirements process that saves time, eliminates rework, and leads directly to better software.

The  best way to build software that meets users' needs is to begin with  "user stories": simple, clear, brief descriptions of functionality that  will be valuable to real users. In &lt;em&gt;User Stories Applied&lt;/em&gt;, Mike  Cohn provides you with a front-to-back blueprint for writing these user  stories and weaving them into your development lifecycle.

You'll  learn what makes a great user story, and what makes a bad one. You'll  discover practical ways to gather user stories, even when you can't  speak with your users. Then, once you've compiled your user stories,  Cohn shows how to organize them, prioritize them, and use them for  planning, management, and testing.
&lt;ul&gt;
	&lt;li&gt;User role modeling: understanding what users have in common, and where they differ&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;Gathering stories: user interviewing, questionnaires, observation, and workshops&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;Working with managers, trainers, salespeople and other "proxies"&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;Writing user stories for acceptance testing&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;Using stories to prioritize, set schedules, and estimate release costs&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;Includes end-of-chapter practice questions and exercises&lt;/li&gt;
&lt;/ul&gt;
User  Stories Applied will be invaluable to every software developer, tester,  analyst, and manager working with any agile method: XP, Scrum... or  even your own home-grown approach.&lt;/blockquote&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://alternateillusion.com/just-read-mike-cohn-user-stories-applied"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://alternateillusion.com/just-read-mike-cohn-user-stories-applied#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=g-e8sN0aVb8:A0FtuKM1RNs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=g-e8sN0aVb8:A0FtuKM1RNs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?i=g-e8sN0aVb8:A0FtuKM1RNs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=g-e8sN0aVb8:A0FtuKM1RNs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?i=g-e8sN0aVb8:A0FtuKM1RNs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=g-e8sN0aVb8:A0FtuKM1RNs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/alternateillusion/PfqJ/~4/g-e8sN0aVb8" height="1" width="1"/&gt;</description>
      <media:content type="image/jpeg" height="300" width="226" url="http://getfile9.posterous.com/getfile/files.posterous.com/import-zsua/BaBHwowBorhptkjBuEGodJnqjvqqpCeBpiFGDlqemtBGlAwsxBnawxmcilEl/media_https3amazonaws_eBimo.jpg">
        <media:thumbnail height="300" width="226" url="http://getfile6.posterous.com/getfile/files.posterous.com/import-zsua/BaBHwowBorhptkjBuEGodJnqjvqqpCeBpiFGDlqemtBGlAwsxBnawxmcilEl/media_https3amazonaws_eBimo.jpg.scaled500.jpg" />
      </media:content>
    <feedburner:origLink>http://alternateillusion.com/just-read-mike-cohn-user-stories-applied</feedburner:origLink></item>
    <item>
      <pubDate>Tue, 20 Jul 2010 16:16:45 -0700</pubDate>
      <title>Just read: Chris Snyder &amp; Michael Southwell – Pro PHP Security</title>
      <link>http://feedproxy.google.com/~r/alternateillusion/PfqJ/~3/oc7tQ8P5UHw/just-read-chris-snyder-michael-southwell-pro</link>
      <guid isPermaLink="false">http://alternateillusion.com/just-read-chris-snyder-michael-southwell-pro</guid>
      <description>&lt;p&gt;
	&lt;div class='p_embed p_image_embed'&gt;
&lt;img alt="Media_https3amazonaws_ggpkq" height="300" src="http://posterous.com/getfile/files.posterous.com/import-zsua/jbubgkcxdftfdxwHuaJhAgrmjiEyDFGHdFjcJCCvHkattFfrDFAsflxxuexE/media_https3amazonaws_ggpkq.jpg.scaled600.jpg" width="226" /&gt;
&lt;/div&gt;

&lt;blockquote&gt;
&lt;h2&gt;Product Details&lt;/h2&gt;
&lt;ul&gt;
	&lt;li&gt;
&lt;strong&gt;Paperback:&lt;/strong&gt; 528 pages&lt;/li&gt;
	&lt;li&gt;
&lt;strong&gt;Publisher:&lt;/strong&gt; Apress; 1st ed. 2005. Corr. 2nd printing edition  (August 29, 2005)&lt;/li&gt;
	&lt;li&gt;
&lt;strong&gt;Language:&lt;/strong&gt; English&lt;/li&gt;
	&lt;li&gt;
&lt;strong&gt;ISBN-10:&lt;/strong&gt; 1590595084&lt;/li&gt;
	&lt;li&gt;
&lt;strong&gt;ISBN-13:&lt;/strong&gt; 978-1590595084&lt;/li&gt;
	&lt;li&gt;
&lt;strong&gt; Product Dimensions: &lt;/strong&gt; 9.2 x 7.4 x 1.2 inches&lt;/li&gt;
	&lt;li&gt;
&lt;strong&gt;Shipping Weight:&lt;/strong&gt; 2 pounds&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
I was expecting to have much heureka moments reading this book, but I was let down. Being good in encryption doesn't mean you're good at building secure websites. You shouldn't read this if you have experiences with xss, sql injection and apache with virtual hosts. If you have such knowledge, only read the first 20 or so pages. Pity for this book, I hope I'll find one covering the topic much more &lt;i&gt;pro&lt;/i&gt;
&lt;blockquote&gt;
&lt;h2&gt;Editorial Reviews&lt;/h2&gt;
&lt;h3&gt;Product Description&lt;/h3&gt;
&lt;em&gt;Pro PHP Security&lt;/em&gt; is one of the first books  devoted solely to PHP security. It will serve as your complete guide  for taking defensive and proactive security measures within your PHP  applications. (And the methods discussed are compatible with PHP  versions 3, 4, and 5.)&lt;p&gt;The knowledge you'll  gain from this comprehensive guide will help you prevent attackers from  potentially disrupting site operation or destroying data. And you'll  learn about various security measures, for example, creating and  deploying "captchas," validating e-mail, fending off SQL injection  attacks, and preventing cross-site scripting attempts.
&lt;/p&gt;
&lt;h3&gt;About the Author&lt;/h3&gt;
Michael Southwell is a retired English professor who has been  developing websites for more than 10 years in the small business,  nonprofit, and educational areas, with special interest in problems of  accessibility. He has authored and co-authored 8 books and numerous  articles about writing, writing and computers, and writing education.&lt;/blockquote&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://alternateillusion.com/just-read-chris-snyder-michael-southwell-pro"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://alternateillusion.com/just-read-chris-snyder-michael-southwell-pro#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=oc7tQ8P5UHw:rWGKgkZifPM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=oc7tQ8P5UHw:rWGKgkZifPM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?i=oc7tQ8P5UHw:rWGKgkZifPM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=oc7tQ8P5UHw:rWGKgkZifPM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?i=oc7tQ8P5UHw:rWGKgkZifPM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=oc7tQ8P5UHw:rWGKgkZifPM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/alternateillusion/PfqJ/~4/oc7tQ8P5UHw" height="1" width="1"/&gt;</description>
      <media:content type="image/jpeg" height="300" width="226" url="http://getfile7.posterous.com/getfile/files.posterous.com/import-zsua/jbubgkcxdftfdxwHuaJhAgrmjiEyDFGHdFjcJCCvHkattFfrDFAsflxxuexE/media_https3amazonaws_ggpkq.jpg">
        <media:thumbnail height="300" width="226" url="http://getfile4.posterous.com/getfile/files.posterous.com/import-zsua/jbubgkcxdftfdxwHuaJhAgrmjiEyDFGHdFjcJCCvHkattFfrDFAsflxxuexE/media_https3amazonaws_ggpkq.jpg.scaled500.jpg" />
      </media:content>
    <feedburner:origLink>http://alternateillusion.com/just-read-chris-snyder-michael-southwell-pro</feedburner:origLink></item>
    <item>
      <pubDate>Fri, 09 Jul 2010 09:46:25 -0700</pubDate>
      <title>Just read: Leonard Richardson &amp; Sam Ruby - RESTful web services</title>
      <link>http://feedproxy.google.com/~r/alternateillusion/PfqJ/~3/uRM2I4_yNkc/just-read-leonard-richardson-sam-ruby-restful</link>
      <guid isPermaLink="false">http://alternateillusion.com/just-read-leonard-richardson-sam-ruby-restful</guid>
      <description>&lt;p&gt;
	&lt;div class='p_embed p_image_embed'&gt;
&lt;img alt="Media_https3amazonaws_hlrag" height="300" src="http://posterous.com/getfile/files.posterous.com/import-zsua/GIEhBgwtuGczgxvlgfdqlkBxssqzddGmBvmhAslqjddpjwDqxAzuIqBhnbmu/media_https3amazonaws_HlraG.jpg.scaled600.jpg" width="228" /&gt;
&lt;/div&gt;

&lt;blockquote&gt;
&lt;h2&gt;Product Details&lt;/h2&gt;
&lt;ul&gt;
	&lt;li&gt;
&lt;strong&gt;Paperback:&lt;/strong&gt; 448 pages&lt;/li&gt;
	&lt;li&gt;
&lt;strong&gt;Publisher:&lt;/strong&gt; O'Reilly Media; 1 edition (May 8, 2007)&lt;/li&gt;
	&lt;li&gt;
&lt;strong&gt;Language:&lt;/strong&gt; English&lt;/li&gt;
	&lt;li&gt;
&lt;strong&gt;ISBN-10:&lt;/strong&gt; 0596529260&lt;/li&gt;
	&lt;li&gt;
&lt;strong&gt;ISBN-13:&lt;/strong&gt; 978-0596529260&lt;/li&gt;
	&lt;li&gt;
&lt;strong&gt; Product Dimensions: &lt;/strong&gt; 9.1 x 7 x 1 inches&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
I didn't really like the way were too over-descriptive. The knowledge inside the book is definitely makes it worth to read it. It made me actually get thinking the way of RESTful services. I got answers to all my questions about REST, and now I'm actually building a webservice the way the book told me to. If you can filter efficiently through a big mass of text, this book is for you!

You can see a quite big preview on &lt;a href="http://books.google.com/books?id=XUaErakHsoAC&amp;amp;printsec=frontcover&amp;amp;dq=restful+web+services&amp;amp;hl=hu&amp;amp;ei=o-w2TKmAJJ2nsQbiuqzvBg&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=book-thumbnail&amp;amp;resnum=1&amp;amp;ved=0CDAQ6wEwAA#v=onepage&amp;amp;q&amp;amp;f=false"&gt;google books&lt;/a&gt;
&lt;blockquote&gt;
&lt;div&gt;
&lt;h2&gt;Editorial Reviews&lt;/h2&gt;
&lt;div&gt;
&lt;h3&gt;Book Description&lt;/h3&gt;
&lt;div&gt;Web services for the real world&lt;/div&gt;
&lt;h3&gt;Product Description&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;

"Every developer working with the Web needs to read this  book." -- David Heinemeier Hansson, creator of the Rails framework

"RESTful Web Services finally provides a practical roadmap for  constructing services that embrace the Web, instead of trying to route  around it." -- Adam Trachtenberg, PHP author and EBay Web Services  Evangelist

You've built web sites that can be used by humans.  But can you also build web sites that are usable by machines? That's  where the future lies, and that's what &lt;em&gt;RESTful Web Services&lt;/em&gt; shows  you how to do. The World Wide Web is the most popular distributed  application in history, and Web services and mashups have turned it into  a powerful distributed computing platform. But today's web service  technologies have lost sight of the simplicity that made the Web  successful. They don't work like the Web, and they're missing out on its  advantages.

This book puts the "Web" back into web services. It  shows how you can connect to the programmable web with the technologies  you already use every day. The key is REST, the architectural style  that drives the Web. This book:
&lt;ul&gt;
	&lt;li&gt;Emphasizes the power of basic  Web technologies -- the HTTP application protocol, the URI naming  standard, and the XML markup language&lt;/li&gt;
	&lt;li&gt;Introduces the  Resource-Oriented Architecture (ROA), a common-sense set of rules for  designing RESTful web services&lt;/li&gt;
	&lt;li&gt;Shows how a RESTful design is  simpler, more versatile, and more scalable than a design based on Remote  Procedure Calls (RPC)&lt;/li&gt;
	&lt;li&gt;Includes real-world examples of RESTful  web services, like Amazon's Simple Storage Service and the Atom  Publishing Protocol&lt;/li&gt;
	&lt;li&gt;Discusses web service clients for popular  programming languages&lt;/li&gt;
	&lt;li&gt;Shows how to implement RESTful services  in three popular frameworks -- Ruby on Rails, Restlet (for Java), and  Django (for Python)&lt;/li&gt;
	&lt;li&gt;Focuses on practical issues: how to design  and implement RESTful web services and clients&lt;/li&gt;
&lt;/ul&gt;
This is the  first book that applies the REST design philosophy to real web services.  It sets down the best practices you need to make your design a success,  and the techniques you need to turn your design into working code. You  can harness the power of the Web for programmable applications: you just  have to work with the Web instead of against it. This book shows you  how.

&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;a href="http://www.amazon.com/gp/product/product-description/0596529260/ref=dp_proddesc_0?ie=UTF8&amp;amp;n=283155&amp;amp;s=books"&gt;See  all Editorial Reviews&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://alternateillusion.com/just-read-leonard-richardson-sam-ruby-restful"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://alternateillusion.com/just-read-leonard-richardson-sam-ruby-restful#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=uRM2I4_yNkc:Li9SitKeo10:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=uRM2I4_yNkc:Li9SitKeo10:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?i=uRM2I4_yNkc:Li9SitKeo10:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=uRM2I4_yNkc:Li9SitKeo10:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?i=uRM2I4_yNkc:Li9SitKeo10:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=uRM2I4_yNkc:Li9SitKeo10:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/alternateillusion/PfqJ/~4/uRM2I4_yNkc" height="1" width="1"/&gt;</description>
      <media:content type="image/jpeg" height="300" width="228" url="http://getfile1.posterous.com/getfile/files.posterous.com/import-zsua/GIEhBgwtuGczgxvlgfdqlkBxssqzddGmBvmhAslqjddpjwDqxAzuIqBhnbmu/media_https3amazonaws_HlraG.jpg">
        <media:thumbnail height="300" width="228" url="http://getfile5.posterous.com/getfile/files.posterous.com/import-zsua/GIEhBgwtuGczgxvlgfdqlkBxssqzddGmBvmhAslqjddpjwDqxAzuIqBhnbmu/media_https3amazonaws_HlraG.jpg.scaled500.jpg" />
      </media:content>
    <feedburner:origLink>http://alternateillusion.com/just-read-leonard-richardson-sam-ruby-restful</feedburner:origLink></item>
    <item>
      <pubDate>Fri, 11 Jun 2010 10:02:48 -0700</pubDate>
      <title>Xml Serialization with java - SimpleXml</title>
      <link>http://feedproxy.google.com/~r/alternateillusion/PfqJ/~3/d4MbRO0XG_w/xml-serialization-with-java-simplexml</link>
      <guid isPermaLink="false">http://alternateillusion.com/xml-serialization-with-java-simplexml</guid>
      <description>&lt;p&gt;
	&lt;div class='p_embed p_image_embed'&gt;
&lt;img alt="Media_https3amazonaws_bbpdi" height="599" src="http://posterous.com/getfile/files.posterous.com/import-zsua/aupeqydngHIriJeDmysHxwBazmbihnfHEhBGeFymvqzBAzntjvvyECanxkhp/media_https3amazonaws_bBpDi.png.scaled600.png" width="322" /&gt;
&lt;/div&gt;
For those of you out there who have problem implementing some complex xmls i have a good example for you:

Xml :
[cc lang="xml" lines="auto"]


	
		
			&lt;div name="Carthago1"&gt;
				Teszt1
			&lt;/div&gt;
			&lt;div name="Carthago2"&gt;
				Teszt2
			&lt;/div&gt;
		
		
			&lt;div name="Carthago2"&gt;
				Teszt2
			&lt;/div&gt;
			&lt;div name="Carthago2"&gt;
				Teszt3
			&lt;/div&gt;
		
	

[/cc]

And this is your Class Hierarchy representing it:

[cc lang="java" lines="auto" escaped="true"]
@Root
public class UIElement
{
  @ElementList(name="Elements")
  public List divContainers;
}

@Root
public class DivContainer
{
  @ElementList(name="DivContainer", inline=true)
  public List divs;

  @Attribute
  public String name;
}

@Root(name="Div")
public class Div
{
  @Element(name="test")
  public String test;

  @Attribute(name="name", required=false)
  public String name;
}
[/cc]

And the serialize code:

[cc lang="java" lines="auto" escaped="true"]
public void testXml()
{
  Serializer serializer = new Persister();
  File source = new File("c:\\tmp\\test.xml");
  UIElement ui = null;

  try
  {
    ui = serializer.read(UIElement.class, source);
  } catch (Exception e)
  {
    e.printStackTrace();
  }

  for (DivContainer divc : ui.divContainers)
  {
    for (Div div : divc.divs)
    {
      System.out.println("Value of test: " + div.test);
    }
  }
}
[/cc]

You have to look out for two things... First note the @Root under Div tag. That is necessary there. Writing in the attribute name there is necessary too. Also the 'inline' tag. Without them it wont work.

Gergely.
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://alternateillusion.com/xml-serialization-with-java-simplexml"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://alternateillusion.com/xml-serialization-with-java-simplexml#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=d4MbRO0XG_w:RdYEnBz500o:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=d4MbRO0XG_w:RdYEnBz500o:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?i=d4MbRO0XG_w:RdYEnBz500o:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=d4MbRO0XG_w:RdYEnBz500o:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?i=d4MbRO0XG_w:RdYEnBz500o:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?a=d4MbRO0XG_w:RdYEnBz500o:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/alternateillusion/PfqJ?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/alternateillusion/PfqJ/~4/d4MbRO0XG_w" height="1" width="1"/&gt;</description>
      <media:content type="image/png" height="599" width="322" url="http://getfile2.posterous.com/getfile/files.posterous.com/import-zsua/aupeqydngHIriJeDmysHxwBazmbihnfHEhBGeFymvqzBAzntjvvyECanxkhp/media_https3amazonaws_bBpDi.png">
        <media:thumbnail height="599" width="322" url="http://getfile8.posterous.com/getfile/files.posterous.com/import-zsua/aupeqydngHIriJeDmysHxwBazmbihnfHEhBGeFymvqzBAzntjvvyECanxkhp/media_https3amazonaws_bBpDi.png.scaled500.png" />
      </media:content>
    <feedburner:origLink>http://alternateillusion.com/xml-serialization-with-java-simplexml</feedburner:origLink></item>
  </channel>
</rss>

