<?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:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>MichaelMinella.com</title>
	<link>http://www.michaelminella.com/components/com_mojo</link>
	<description>Michael's notes on development as he does it.</description>
	<pubDate>Sat, 14 Nov 2009 13:35:18 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.0</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/Michaelminellacom" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>Day 1 of No Fluff Just Stuff</title>
		<link>http://feedproxy.google.com/~r/Michaelminellacom/~3/_L8BUr1z7qU/54.html</link>
		<comments>http://www.michaelminella.com/blog/54.html#comments</comments>
		<pubDate>Sat, 14 Nov 2009 13:35:18 +0000</pubDate>
		<dc:creator>mminella</dc:creator>
		
	<category>Uncategorized</category>
		<guid isPermaLink="false">/?p=69</guid>
		<description><![CDATA[Yes, it&#8217;s that time of the year again.  I&#8217;m spending this weekend at No Fluff Just Stuff to improve myself.  When I reviewed the speakers and topics for this year, I&#8217;ll be honest, I was disappointed.  I&#8217;ve been going to the show now for the past four years and learn something new [...]]]></description>
			<content:encoded><![CDATA[	<p>Yes, it&#8217;s that time of the year again.  I&#8217;m spending this weekend at <a href="http://www.nofluffjuststuff.com">No Fluff Just Stuff</a> to improve myself.  When I reviewed the speakers and topics for this year, I&#8217;ll be honest, I was disappointed.  I&#8217;ve been going to the show now for the past four years and learn something new every time.  However, over the past four years, the topics haven&#8217;t changed much.  Groovy, check.  Some form of code smell talk.  Yup.  GWT and JSF, got those too.  But those topics have all been there for the past four years.  The really only new topic for this year was a track on semantic web.  And I&#8217;ll be honest, I&#8217;m even more disappointed about that track (albeit for a different reason).  The reason for that disappointment is because I know where that track came from.  We were doing semantic web when I was at Sears over two years ago.  Yes, we were writing SPARQL, we were using OWL, etc.  Back then some of my coworkers thought it would be cool to hear someone talk about those topics.  I tried to convince them that instead of listening to others, we have the experience and we should be the ones up there doing the talking.  Alas, that entire group will be in attendance of a talk that they should have been giving last year instead of someone else doing it this year.  </p>
<p>In any case, yesterday I went to talks by two legends: Ted Neward and Brian Goetz.  I&#8217;m sure I don&#8217;t need to give either any form of introduction (and if I do, leave my blog now, go do some Googling, learn a bit and come back ;) ).  I listened to Brian talk about concurrency and memory models and I heard Ted talk about classloaders and give the keynote called Iconoclasm.   I&#8217;ll spare you reading many paragraphs.  They were all excellent.  When you go to a Brian Goetz talk, it&#8217;s like being back in college.  You have <b>the</b> expert on concurrency and how Java works at a low level geeking out on topics he loves.  Even though his topics cover hard stuff, he does them with passion.  Ted is just an all around cool guy who is a great speaker and also incredibly knowledgable about languages in general (He also does Microsoft stuff&#8230;no one&#8217;s perfect).  Overall, I was pleased with the sessions yesterday.</p>
<p>With that being said, looking ahead to today, I&#8217;m honestly lost.  After going through the slides for some talks with potential, they seem to have less potential.  We&#8217;ll see what happens.  As always, let&#8217;s hear from you!  Questions about sessions or speakers, let me know in the comments!
</p>

<p><a href="http://feedads.g.doubleclick.net/~a/PeEMoYMM7Yy6a-PUBqKNshuh6ho/0/da"><img src="http://feedads.g.doubleclick.net/~a/PeEMoYMM7Yy6a-PUBqKNshuh6ho/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/PeEMoYMM7Yy6a-PUBqKNshuh6ho/1/da"><img src="http://feedads.g.doubleclick.net/~a/PeEMoYMM7Yy6a-PUBqKNshuh6ho/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.michaelminella.com/components/com_mojo/wp-feed.php?feed=rss2&amp;p=69</wfw:commentRss>
		<feedburner:origLink>http://www.michaelminella.com/blog/54.html</feedburner:origLink></item>
		<item>
		<title>Agile in the real world part I - The personal card wall</title>
		<link>http://feedproxy.google.com/~r/Michaelminellacom/~3/K_TCD25ayx0/53.html</link>
		<comments>http://www.michaelminella.com/blog/53.html#comments</comments>
		<pubDate>Thu, 03 Sep 2009 21:40:46 +0000</pubDate>
		<dc:creator>mminella</dc:creator>
		
	<category>Uncategorized</category>
		<guid isPermaLink="false">/?p=66</guid>
		<description><![CDATA[The first item we are going to tackle in the adoption of agile principals is the card wall.  What is it?  What problem does it solve?  How do I get my organization to use it?
Let&#8217;s take a step back.  How do you currently track the status of a project?  Microsoft [...]]]></description>
			<content:encoded><![CDATA[<p>The first item we are going to tackle in the adoption of agile principals is the card wall.  What is it?  What problem does it solve?  How do I get my organization to use it?</p>
<p>Let&#8217;s take a step back.  How do you currently track the status of a project?  Microsoft Project or some related piece of software?  Excel (*gasp*)?  There are a number of issues with this approach:</p>
<ol>
<li><b>Project status is not publicly available.</b><br/>When the progress of a project is stored in a software product like Project or Excel, it is easily hidden or is at least difficult to access.  This encourages things to be hidden.  Things to be changed.</li>
<li><b>It&#8217;s hard to use</b><br/>The implementation of project planning is, in essence, a very simple process.  It is the alignment of resources and tasks against time (the hard part is the alignment piece).  Why do project management tools need to be so complex to essentially display timelines?</li>
<li><b>Developers can&#8217;t take ownership of what they work on.</b><br/>Typically when projects are tracked using software products as stated above, they are maintained by a lead or manager cutting the developer out of the process of delegation of tasks.</li>
<li><b>Collaboration across tasks doesn&#8217;t occur.</b><br/>Developers don&#8217;t use Project.  Developers despise Excel.  Because of that, they usually don&#8217;t look at it.  So they don&#8217;t get a big picture of the project flow and prevents the implementation of operational efficiencies that could occur with simple reordering of tasks.</li>
</ol>
<p>Card walls attempt to address the above issues.  </p>
<h1>Project status is not publicly available</h1>
<p>A card wall is the ultimate way to communicate project status to the entire team.  You have a wall of cards divided into three or four categories: Ready for development, in development, in QA and in production (with the fourth one optional.  There are some other nuance options that you can add in, but we won&#8217;t go into that here.).  To obtain project status, all a person needs to do is look at the wall.  If the card isn&#8217;t in the ready for development yet, the story has not yet been written (it&#8217;s in the BA&#8217;s hands).  If it&#8217;s in development, typically you&#8217;ll have a picture or name associated with the card.  This makes it quite clear who is working on the functionality.  If it&#8217;s in QA, development is complete and it&#8217;s being tested.  If it&#8217;s in production&#8230;well, I&#8217;ll let you figure that one out.  </p>
<h1>Project software is hard to use</h1>
<p>Well you could go to Excel or Project training and spend thousands of dollars.  However, I prefer spending that money on better things, like high quality developers.  Instead of paying for licenses for Project and training, etc.  Cards are intuitive.  People <i>get</i> the card wall.  When the BA has completed a story for development, they put a card on the wall with the name of the story.  When a developer is prepared for a new story, they choose the card to take and move it into development under their name or picture.  When they are complete with the story they turn the story over to QA by moving the card to in QA.  Once it moves to production, typically the project manager will move the card to production.  Developers don&#8217;t need to worry  tabout what drive the Project file is on or if someone else is in the Excel file.  Cards, scotch tape and a wall.  If you can&#8217;t figure that out, you probably can&#8217;t write the code to implement it anyways.</p>
<h1>Developers can&#8217;t take ownership of what they work on</h1>
<p>This is one of the most important in my opinion.  The traditional way to assign tasks was exactly that.  A project manager assigned tasks to developers and they worked on them.  However, which are you more likely to work your hardest on:</p>
<ul>
<li>A list of things your spouse gives you to do.</li>
<li>Something on the list that you created that needs to be done.</li>
</ul>
<p>You are more likely to put your all into things you choose.  By allowing developers to work on things that they choose as they complete tasks empowers them to learn more about the application.  This prevents the funnel problem.  The funnel problem is when there is one person that knows how to work on a particular part of a system.  Developers tend to spread their knowledge around the application which benefits everyone.  Finally, there is an empowering psychological event that occurs when someone take a card they were working on and moves it.  The job well done.  The beginning of a new endeavor.  We don&#8217;t experience this enough at work and this is a simple way to do so.</p>
<h1>Collaboration across tasks doesn&#8217;t occur</h1>
<p>I consider this reason a tie with the previous one with regards to importance.  When we use Project or Excel or most other project management tools, the people in the trenches loose site of the big picture.  If you are a project manager that is working on a project that is expected to last a year with 30 developers, you may pass out copies of the project plan to each developer.  But what I&#8217;ve seen in most cases is that project managers pass out the piece of the task list that pertains to the person you are giving it to.  By doing this, blinders are being put on the team with each person being forced to focus on their own small corner of the world.  But what if developer A worked on something that developer B will be working on in two weeks and developer A knows that he had to do something unusual to get things to work.  If he knows that B is going to be working in his old code, he can share the knowledge he gained when working on it the first time.  This cross task collaboration has huge productivity benefits that should not be ignored.</p>
<h1>So how do I do it where I work?</h1>
<p>So now that you have an understanding on why you would want to use a card wall, how do you get one past the IKEA Police on your team?  You don&#8217;t have a wall you are allowed to use.  You don&#8217;t run the project so you can&#8217;t get others to maintain cards.  As with anything in life, work with what you can control.  In this case, you can control how you work.  </p>
<p>A little background.  I work for a large IT organization (about 1000 employees out of about 2000 total for the company) in a very old school, risk adverse company.  Until very recently the word Agile might as well have been a four letter word.  It was crazyness.  I work in a cube.  The typical cubical with a desk on two sides, a tall cabinent for hanging my jacket and a cabinet above my desk along one side.</p>
<p>So with Agile and any of it&#8217;s practices viewed as insanity, I decided to change what I could and that was how I worked.  I had a list of tasks that I knew I had to complete.  I purchased a deck of index cards and setup a makeshift card wall on the doors of the over desk cabinet.  Since I was the only person the cards were for, I didn&#8217;t need a large amount of real-estate.  I put my tasks into the ready for dev section.  The card I was working on moved to the in dev section and any cards I completed were moved to complete.</p>
<p>So I worked like this for the life of a three month project.  It didn&#8217;t take long for managers to notice the wall of index cards hanging in my cube.  Some of my co workers made fun (I was out of the office one day due to food poisoning&#8230;.I came back to a card in the complete section that said &#8220;food poisoning&#8221;).  Managers, however noticed.  Anytime they asked what my status was, I directed them to my card wall.  I made sure to point out that any time they wanted to know exactly where I was on the project, all they had to do was take a look.  You know what happened?  They stopped asking.</p>
<p>They stopped asking me what I was working on or where I was on something because they already knew.  They knew how fast I was moving cards, they knew how many and which cards I had moved.  They knew exactly where the project was in a glance.</p>
<p>The manager I directly report to loved the idea.  We started expanding it by creating a tech debt wall.  Now, I have to come clean here.  We still are not 100% past the IKEA Police.  Our building operations staff still doesn&#8217;t want the cards to be visible in the office.  So instead of putting them on a wall, we have ours on a window.  In fact, if you stand outside our building and look up, you can see my boss&#8217;s cube because the window in his cube is covered in index cards.  </p>
<p>From the tech debt wall, we have finally expanded it to full project management.  The project I am currently working on is scheduled to go live in April.  The card wall is not the only reason for this success, but it has contributed to it, but we are months ahead of schedule.  Many months (5 to be exact).  The agile principals discussed here and what I will covered in the future posts are the primary reason for that.  </p>
<h1>Conclusion</h1>
<p>So that&#8217;s it.  Over this post, I covered why a card wall is useful for project management as well as how I took a small amount of rebellion and harassment and proved that it can be a very valuable resource management tool.  What are your experiences with card walls?  Do you have your own version of the IKEA Police?  Share your experiences in the comments!
</p>

<p><a href="http://feedads.g.doubleclick.net/~a/BqBDpHABwvTDxDVrEwqGq9GXNzg/0/da"><img src="http://feedads.g.doubleclick.net/~a/BqBDpHABwvTDxDVrEwqGq9GXNzg/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/BqBDpHABwvTDxDVrEwqGq9GXNzg/1/da"><img src="http://feedads.g.doubleclick.net/~a/BqBDpHABwvTDxDVrEwqGq9GXNzg/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.michaelminella.com/components/com_mojo/wp-feed.php?feed=rss2&amp;p=66</wfw:commentRss>
		<feedburner:origLink>http://www.michaelminella.com/blog/53.html</feedburner:origLink></item>
		<item>
		<title>Agile in the real world - Introduction</title>
		<link>http://feedproxy.google.com/~r/Michaelminellacom/~3/sl26_VXo434/52.html</link>
		<comments>http://www.michaelminella.com/blog/52.html#comments</comments>
		<pubDate>Wed, 02 Sep 2009 20:54:06 +0000</pubDate>
		<dc:creator>mminella</dc:creator>
		
	<category>Uncategorized</category>
		<guid isPermaLink="false">/?p=64</guid>
		<description><![CDATA[Agile adoption in the real world.  Not many people can fathom walking up to their manager and saying &#8220;I want to completely change everything we do about software development.  I want to write almost twice as much code as I currently do with no more functionality.  I want to pair program.  [...]]]></description>
			<content:encoded><![CDATA[<p>Agile adoption in the real world.  Not many people can fathom walking up to their manager and saying &#8220;I want to completely change everything we do about software development.  I want to write almost twice as much code as I currently do with no more functionality.  I want to pair program.  I want to take away cubicles and make everyone work at conference tables.  I want to demo what we&#8217;ve done for the business every week.&#8221;  However, in many companies, proposing that you want to begin developing software using Agile processes sounds exactly like what I said.  My intent over the next few posts is to show you a way to introduce the concepts of Agile without having to look like the nut job on the team or move mountains.  </p>
<p>I&#8217;m sure you&#8217;re thinking, &#8220;Yeah, right.  I&#8217;ve read tons of those articles before and they work about as well as something I would buy from <a href="http://en.wikipedia.org/wiki/Billy_Mays">Billy Mays</a>.&#8221;  Everything we will talk about over the coming weeks are things I have seen be effective in a large, Fortune 500 corporations.  However, before we dive into the specifics, I wanted to spend this post defining what I said we were going to talk about&#8230;agile practices in the real world.</p>
<p>&#8220;Agile practices&#8221;.  That means paired programming and writing on the walls and stuff, right?  Wrong.  For this blog, agile stands for four main principals (from the <a href="http://agilemanifesto.org/">Agile Manifesto</a>):</p>
<ul>
<li><strong>Individuals and interactions</strong> over process and tools</li>
<li><strong>Working software</strong> over comprehensive documentation</li>
<li><strong>Customer collaboration</strong> over contract negotiation</li>
<li><strong>Responding to change</strong> over following a plan</li>
</ul>
<p>This blog will discuss how to implement the above four tenants in a large corporation.</p>
<p>&#8220;in the real world&#8221;.  This means that the CIO has not come down from on high and decreed that agile is the new required practice and all projects shall be agile going forward.  This rarely happens (and would make adoption much more easy) so let&#8217;s assume it hasn&#8217;t happened for you (if it had, you wouldn&#8217;t be reading this anyways).  No, instead we are going to assume that you, Joe dev or other lower level employee can see where agile can be useful and want to apply it to make your life and your customer&#8217;s lives better.</p>
<p>I have gone both routes.  I have had buy in from the very top and I&#8217;ve had management that disdained the word &#8220;agile&#8221; much less supported a test project.  In both cases, you can be successful with agile.  I&#8217;ve also seen the same approaches fail horribly because those implementing the process didn&#8217;t know the why behind what they were implementing.  I will be sure to cover this as well.  Please note, implementing practices without knowing why you are implementing them is a recipe for disaster.  Any practice you implement should start with &#8220;What problem is this change attempting to solve?&#8221;.  </p>
<p>A word of caution.  Change the way I will describe is slow.  However, with each step, the next becomes easier.  I look forward to sharing my experiences with you.  I also look forward to the comments you leave.
</p>

<p><a href="http://feedads.g.doubleclick.net/~a/cFBkixmkii_aGxwrWXmZ-R7Zzbw/0/da"><img src="http://feedads.g.doubleclick.net/~a/cFBkixmkii_aGxwrWXmZ-R7Zzbw/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/cFBkixmkii_aGxwrWXmZ-R7Zzbw/1/da"><img src="http://feedads.g.doubleclick.net/~a/cFBkixmkii_aGxwrWXmZ-R7Zzbw/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.michaelminella.com/components/com_mojo/wp-feed.php?feed=rss2&amp;p=64</wfw:commentRss>
		<feedburner:origLink>http://www.michaelminella.com/blog/52.html</feedburner:origLink></item>
		<item>
		<title>COBOL Flashbacks</title>
		<link>http://feedproxy.google.com/~r/Michaelminellacom/~3/T80NPpUSHQc/51.html</link>
		<comments>http://www.michaelminella.com/blog/51.html#comments</comments>
		<pubDate>Fri, 21 Aug 2009 21:29:27 +0000</pubDate>
		<dc:creator>mminella</dc:creator>
		
	<category>Uncategorized</category>
		<guid isPermaLink="false">/?p=65</guid>
		<description><![CDATA[Ahhh, COBOL.  So for those of you who don&#8217;t know me personally, I went to Northern Illinois University for my undergrad.  NIU is a mainframe school.  Yes, I spent most of my days sitting in front of a PC running MVS Batch submitting COBOL and Assembler jobs to the school mainframe (as [...]]]></description>
			<content:encoded><![CDATA[<p>Ahhh, COBOL.  So for those of you who don&#8217;t know me personally, I went to <a href="http://www.niu.edu" target="blank">Northern Illinois University</a> for my undergrad.  NIU is a mainframe school.  Yes, I spent most of my days sitting in front of a PC running MVS Batch submitting COBOL and Assembler jobs to the school mainframe (as a side note, my first programming language was mainframe Assembler at <a href="http://www.cod.edu" target="_blank">College of DuPage</a>).</p>
<p>I&#8217;m currently working on a project to move batch processing from the mainframe to Java.  I&#8217;m actually very excited about it.  We&#8217;re playing with some very cool technologies (Spring Batch, Terracotta for some grid computing, etc).  However, I currently am a bit ahead of schedule so I don&#8217;t have specs (*gasp).  Since I spent my former years working in COBOL (including my internship at ComEd), I asked for the program that I will be converting first so I could sift through it myself.  303 dead trees later, I have alot of reading ahead of myself.</p>
<p>Printing out the program made me a bit nostalgic for the days of college so I did some quick Googling to see if they still use MVS Batch.  They do and I found the documentation for it.  Very impressive.  It starts with turning on the computer!  Check it out:  <a href="http://www.cs.niu.edu/mvs/mvsbat.html" target="blank">http://www.cs.niu.edu/mvs/mvsbat.html</a>.
</p>

<p><a href="http://feedads.g.doubleclick.net/~a/x1v1E3T5EI5Uhtj2bkw6RC1b4bU/0/da"><img src="http://feedads.g.doubleclick.net/~a/x1v1E3T5EI5Uhtj2bkw6RC1b4bU/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/x1v1E3T5EI5Uhtj2bkw6RC1b4bU/1/da"><img src="http://feedads.g.doubleclick.net/~a/x1v1E3T5EI5Uhtj2bkw6RC1b4bU/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.michaelminella.com/components/com_mojo/wp-feed.php?feed=rss2&amp;p=65</wfw:commentRss>
		<feedburner:origLink>http://www.michaelminella.com/blog/51.html</feedburner:origLink></item>
		<item>
		<title>Apache Struts 2 Web Application Development is out!</title>
		<link>http://feedproxy.google.com/~r/Michaelminellacom/~3/0xOc1Ts1cuU/50.html</link>
		<comments>http://www.michaelminella.com/blog/50.html#comments</comments>
		<pubDate>Wed, 24 Jun 2009 15:33:51 +0000</pubDate>
		<dc:creator>mminella</dc:creator>
		
	<category>Uncategorized</category>
		<guid isPermaLink="false">/?p=63</guid>
		<description><![CDATA[I am pleased to announce that the book I was a reviewer for, Apache Struts 2 Web Application Development by Dave Newton is finally out!  It is available on amazon here: http://www.amazon.com.  Published by Packt Publishing, it is a good overview of the Struts 2 web framework.  One thing that Dave did [...]]]></description>
			<content:encoded><![CDATA[<p><img src="./images/contentImages/struts2.jpg" alt="Struts 2" style="float:left;"/>I am pleased to announce that the book I was a reviewer for, Apache Struts 2 Web Application Development by Dave Newton is finally out!  It is available on amazon here: <a href="http://tinyurl.com/koq3n6">http://www.amazon.com</a>.  Published by <a href="http://www.packtpub.com/">Packt Publishing</a>, it is a good overview of the Struts 2 web framework.  One thing that Dave did better than any author of other web framework books I&#8217;ve read is the coverage of JavaScript.  He covers JavaScript very thuroughly.  Not only covering what the framework provides (which actually isn&#8217;t much) but core JavaScript concepts and jQuery.  Overall, this is a solid Struts 2 book with the advantage of being a good JavaScript book.  I encourage you to check it out!
</p>

<p><a href="http://feedads.g.doubleclick.net/~a/9hijGPSvTHvVr8N6JDETC-EKPDM/0/da"><img src="http://feedads.g.doubleclick.net/~a/9hijGPSvTHvVr8N6JDETC-EKPDM/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/9hijGPSvTHvVr8N6JDETC-EKPDM/1/da"><img src="http://feedads.g.doubleclick.net/~a/9hijGPSvTHvVr8N6JDETC-EKPDM/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.michaelminella.com/components/com_mojo/wp-feed.php?feed=rss2&amp;p=63</wfw:commentRss>
		<feedburner:origLink>http://www.michaelminella.com/blog/50.html</feedburner:origLink></item>
		<item>
		<title>Java Classpath Debugging with verbose Arguement</title>
		<link>http://feedproxy.google.com/~r/Michaelminellacom/~3/nW32E85zezg/49.html</link>
		<comments>http://www.michaelminella.com/blog/49.html#comments</comments>
		<pubDate>Sat, 16 May 2009 03:24:25 +0000</pubDate>
		<dc:creator>mminella</dc:creator>
		
	<category>Uncategorized</category>
		<guid isPermaLink="false">/?p=60</guid>
		<description><![CDATA[Today I came across a useful tidbit for debugging classpaths.  A little background:  I was attempting to write a unit test using the PowerMock framework to mock a static method.  When I went to execute the test, I received an exception that I had two versions of org.apache.commons.logging.Log in my classpath.  [...]]]></description>
			<content:encoded><![CDATA[<p>Today I came across a useful tidbit for debugging classpaths.  A little background:  I was attempting to write a unit test using the <a href="http://code.google.com/p/powermock/">PowerMock</a> framework to mock a static method.  When I went to execute the test, I received an exception that I had two versions of org.apache.commons.logging.Log in my classpath.  Looking over my classpath, it&#8217;s no wonder.  Like most projects, the list of libraries in this project reads more like a history of the project than what it actually uses.  Multiple copies of the same jar file&#8230;multiple verisions of the same libraries&#8230;just a mess (don&#8217;t get me started on dependency management&#8230;that&#8217;s a topic for another day).</p>
<p>So with the help of Google I discovered the <code>-verbose:class</code> JVM parameter.  Ever wonder what classes are being loaded in your JVM?  Ever wonder who is loading that mysterious class?  This is the parameter for you.  This option outputs a list of classes loaded and from where.  In my case, <a href="http://code.google.com/p/powermock/">PowerMock</a> was loading Log and so was a copy of the commons-logging jar file I had in my project.  What are some debugging tips you&#8217;ve used in the past that may not be every day knowledge?  Leave it in the comments!
</p>

<p><a href="http://feedads.g.doubleclick.net/~a/E7MAq_fiHsawgThQw_5RtvwnRb0/0/da"><img src="http://feedads.g.doubleclick.net/~a/E7MAq_fiHsawgThQw_5RtvwnRb0/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/E7MAq_fiHsawgThQw_5RtvwnRb0/1/da"><img src="http://feedads.g.doubleclick.net/~a/E7MAq_fiHsawgThQw_5RtvwnRb0/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.michaelminella.com/components/com_mojo/wp-feed.php?feed=rss2&amp;p=60</wfw:commentRss>
		<feedburner:origLink>http://www.michaelminella.com/blog/49.html</feedburner:origLink></item>
		<item>
		<title>Paired Programming…automating human tasks.</title>
		<link>http://feedproxy.google.com/~r/Michaelminellacom/~3/UMWlFl7oKHk/48.html</link>
		<comments>http://www.michaelminella.com/blog/48.html#comments</comments>
		<pubDate>Tue, 28 Apr 2009 20:50:32 +0000</pubDate>
		<dc:creator>mminella</dc:creator>
		
	<category>Uncategorized</category>
		<guid isPermaLink="false">/?p=41</guid>
		<description><![CDATA[I miss pairing (or the practice of paired programming).  Those who have never tried paired programming commonly look at the practice as a waste of resources.  Two people doing the work of one&#8230;or so it seems.  However, there are so many things that pairing brings to the table.  One of those [...]]]></description>
			<content:encoded><![CDATA[<p>I miss pairing (or the practice of paired programming).  Those who have never tried paired programming commonly look at the practice as a waste of resources.  Two people doing the work of one&#8230;or so it seems.  However, there are so many things that pairing brings to the table.  One of those is that when you pair program, things you would have to do anyways just happen.  They get automated automatically (pun kind of intended).  So let&#8217;s take a look at paired programming as a way to automate things you are going to do anyways (or prevent from happening).</p>
<ul>
<li><em>Automating of issue solving.</em><br/><br />
As technologists, we face scenarios on a regular basis where we have to work through something that we haven&#8217;t done before, haven&#8217;t done in a while or just aren&#8217;t sure what the best way to do it is.  When this occurs, our productivity can come to a crawl as we research the solution.  With two developers, the likely hood that: a) one of the devs knows the answer or b) they can research the answer quicker cuts down on the time spent churning on a single issue.<br/><br/>
</li>
<li><em>Knowledge transfer automation.</em><br/><br />
This is related to the item above.  When you work side by side with someone, you learn together.  If one person knows something, they teach the other and vice versa.  By rotating pairs, this transfer of knowledge happens automatically across your team.  This limits the creation of SMEs and prevents bottle necks that occur when only one person knows a particular technology or part of the system.<br/><br/>
</li>
<li><em>Automatic distraction repellant.</em><br/><br />
When was the last time you were working in your cube and someone walked up just to talk?  Unfortunately, (although no one will admit it) this happens way to often in the business world.  This painful disruption of thought as well as the time taken away from development is a huge drain on productivity.  However, when two or more people are already working together, people become less likely to interrupt.  Those casual &#8220;Hey, did you catch the game last night?&#8221; conversations seem to just go away.  People, by nature, are less likely to interrupt a pair of developers working than just a single developer.  Just another place where there is power in numbers.
</li>
</ul>
<p>So how about it?  On paper this makes sense.  Those who have tried it seem to agree.  However, why is it that this practice seems about as likely to go mainstream as cutting overtime (which many studies have proven actually makes developers less productive&#8230;a topic for a different day)?  What are your experiences with paired programming?  What&#8217;s good, what&#8217;s bad?  Share your thoughts in the comments!
</p>

<p><a href="http://feedads.g.doubleclick.net/~a/KqT_LhuVjBR50WC-55LWvn4AsAg/0/da"><img src="http://feedads.g.doubleclick.net/~a/KqT_LhuVjBR50WC-55LWvn4AsAg/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/KqT_LhuVjBR50WC-55LWvn4AsAg/1/da"><img src="http://feedads.g.doubleclick.net/~a/KqT_LhuVjBR50WC-55LWvn4AsAg/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.michaelminella.com/components/com_mojo/wp-feed.php?feed=rss2&amp;p=41</wfw:commentRss>
		<feedburner:origLink>http://www.michaelminella.com/blog/48.html</feedburner:origLink></item>
		<item>
		<title>Prototype’s Element.insert</title>
		<link>http://feedproxy.google.com/~r/Michaelminellacom/~3/AOAXyAFjRuU/47.html</link>
		<comments>http://www.michaelminella.com/blog/47.html#comments</comments>
		<pubDate>Wed, 15 Apr 2009 21:52:20 +0000</pubDate>
		<dc:creator>mminella</dc:creator>
		
	<category>Uncategorized</category>
		<guid isPermaLink="false">/?p=58</guid>
		<description><![CDATA[So today I was working on a small item that I figured would be pretty straight forward&#8230;until I went to Prototype&#8217;s documentation.  I want to say that overall, I really like Prototype&#8217;s doc site.  Overall, it is laid out well and 95% of the time has exactly what I need.  Unfortunately, this [...]]]></description>
			<content:encoded><![CDATA[<p>So today I was working on a small item that I figured would be pretty straight forward&#8230;until I went to Prototype&#8217;s documentation.  I want to say that overall, I really like Prototype&#8217;s doc site.  Overall, it is laid out well and 95% of the time has exactly what I need.  Unfortunately, this is one time where it didn&#8217;t.  I wanted to implement a simple select box with two arrow buttons next to it (up and down).  The goal was to allow users to order the options in the select box.  Below is the code I was using for moving an element up (down was similar):</p>
<pre>
function upOption() {
  if(!clicked) {
    clicked = true;
    options = $('selectId').childElements();

    for(var i = 0; i < options.length;) {
      element = options[i];
      if(element.selected &#038;&#038; (i - 1) >= 0 ) {
        options[i].remove();
        options.splice(i, 1);
        Element.insert(options[i - 1], {before: element});
      }

      i++;
    }
    clicked = false;
  }
};
</pre>
<p>Where I got stuck was on the Element.insert.  The documentation (as found <a href="http://www.prototypejs.org/api/element/insert">here</a>) states that &#8220;Inserts content before, after, at the top of, or at the bottom of element, as specified by the position property of the second argument. If the second argument is the content itself, insert will append it to element.&#8221;.  What does that mean?!?!</p>
<p>I&#8217;ll tell you what it means.  Element.insert takes two parameters, the element to insert the new content ajacent to and one of the following:</p>
<ul>
<li>The content to be inserted</li>
<li>A Hash with a single key that dictates where to put the content with the content as the value</li>
</ul>
<p>The example above is an example of the option with the hash.  What this does is it takes <code>options[i - 1]</code> and places <code>element</code> into the DOM as the first sibling above <code>options[i - 1]</code>.  What each option does is as follows:</p>
<ul>
<li>before: Places the element as the first sibling before the identified element in the DOM</li>
<li>after: Places the element as the first sibling after the identified element in the DOM</li>
<li>top: Places the element as the first child under the identified element in the DOM</li>
<li>bottom: Places the element as the last child under the identified element in the DOM</li>
</ul>
<p>If we use the example <code>Element.insert($('myList'), {XXX: new Element('p')});</code>, the new p element would show up in the corresponding place:</p>
<pre>
&lt;div id="container"&gt;
     <b>before</b>
     &lt;ul id=&#8221;myList&#8221;&gt;
          <b>top</b>
          &lt;li&gt;element 1&lt;/li&gt;
          &lt;li&gt;element 2&lt;/li&gt;
          &lt;li&gt;element 3&lt;/li&gt;
          <b>bottom</b>
     &lt;/ul&gt;
     <b>after</b>
&lt;/div&gt;
</pre>
<p>So there you have it.  Please feel free to point out any optimizations I could do in my method.  One I already know about but was unable to get working was removing the line <code>element = options[i];</code> and just use the element returned from the <code>remove()</code> function.  Unfortunately, I was unable to get that to work (as tested in IE7).  As always, I look forward to the comments!
</p>

<p><a href="http://feedads.g.doubleclick.net/~a/Lx5NmiNeTsz86h5qVQKIyzMqU3A/0/da"><img src="http://feedads.g.doubleclick.net/~a/Lx5NmiNeTsz86h5qVQKIyzMqU3A/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/Lx5NmiNeTsz86h5qVQKIyzMqU3A/1/da"><img src="http://feedads.g.doubleclick.net/~a/Lx5NmiNeTsz86h5qVQKIyzMqU3A/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.michaelminella.com/components/com_mojo/wp-feed.php?feed=rss2&amp;p=58</wfw:commentRss>
		<feedburner:origLink>http://www.michaelminella.com/blog/47.html</feedburner:origLink></item>
		<item>
		<title>Thanks to Joseph Hirn and Partial Mocks</title>
		<link>http://feedproxy.google.com/~r/Michaelminellacom/~3/ujCQFqyqOWg/46.html</link>
		<comments>http://www.michaelminella.com/blog/46.html#comments</comments>
		<pubDate>Wed, 25 Feb 2009 19:23:40 +0000</pubDate>
		<dc:creator>mminella</dc:creator>
		
	<category>Uncategorized</category>
		<guid isPermaLink="false">/?p=56</guid>
		<description><![CDATA[I just came from a brown bag session given by Joseph Hirn on unit testing.  He did an excellent job covering unit testing concepts as well as some great tools/tricks.  One that he pointed out that I think I will dive into on this site is the concept of Partial Mocks.
Partial Mocks are [...]]]></description>
			<content:encoded><![CDATA[<p>I just came from a brown bag session given by Joseph Hirn on unit testing.  He did an excellent job covering unit testing concepts as well as some great tools/tricks.  One that he pointed out that I think I will dive into on this site is the concept of Partial Mocks.</p>
<p>Partial Mocks are concept provided by EasyMock&#8217;s Class Extension package.  They allow for the mocking of a method over an entire class.  A tutorial coming soon.</p>
<p>Once again, I&#8217;d like to say great job to Joe and thanks for the free advertising ;)
</p>

<p><a href="http://feedads.g.doubleclick.net/~a/Vtd8TJtr5HVf3vW8cjSu8aXAsAc/0/da"><img src="http://feedads.g.doubleclick.net/~a/Vtd8TJtr5HVf3vW8cjSu8aXAsAc/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/Vtd8TJtr5HVf3vW8cjSu8aXAsAc/1/da"><img src="http://feedads.g.doubleclick.net/~a/Vtd8TJtr5HVf3vW8cjSu8aXAsAc/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.michaelminella.com/components/com_mojo/wp-feed.php?feed=rss2&amp;p=56</wfw:commentRss>
		<feedburner:origLink>http://www.michaelminella.com/blog/46.html</feedburner:origLink></item>
		<item>
		<title>A sound backup strategy.  Is that so hard?</title>
		<link>http://feedproxy.google.com/~r/Michaelminellacom/~3/6K7jwPfZPLg/45.html</link>
		<comments>http://www.michaelminella.com/blog/45.html#comments</comments>
		<pubDate>Fri, 20 Feb 2009 18:53:14 +0000</pubDate>
		<dc:creator>mminella</dc:creator>
		
	<category>Uncategorized</category>
		<guid isPermaLink="false">/?p=55</guid>
		<description><![CDATA[Ok, I&#8217;m confused.  This is 2009, correct?  The web is 19 years old.  Why do companies go into production at this point in time without ANY form of tested data backup plan?  I&#8217;ve seen two reports since the first of the year of companies folding due to the complete loss of [...]]]></description>
			<content:encoded><![CDATA[<p>Ok, I&#8217;m confused.  This is 2009, correct?  The web is 19 years old.  Why do companies go into production at this point in time without ANY form of tested data backup plan?  I&#8217;ve seen two reports since the first of the year of companies folding due to the complete loss of all user data.  </p>
<p>The first was the blogging platform Journalspace in January (they have since been picked up by a new owner&#8230;hopefully they have heard of off site backups).  Journalspace was using RAID as their backup.  The thought was that if one drive fails, we have a copy on drive two, so all will be good.  Fine in theory&#8230;if the only failure that occurs is a hardware one.  In Journalspace&#8217;s case, the data was wiped via software.  If you delete a file on purpose from drive one, it will be deleted as well from drive two.  A backup strategy, RAID is not.</p>
<p>Now we have the social bookmarking site Ma.gnolia.  Today they announced that their attempts to recover from a database server crash have been unsuccessful and all data has been lost.  In this case, instead of not having a backup strategy at all, they just had one that didn&#8217;t work.  I would now consider them poster children for testing your backup strategies.</p>
<p>Am I missing something?  As a user of services like these, these should serve as examples of why you shouldn&#8217;t trust your service providers and do your own backups.  Backup your WordPress or Blogger blogs.  Backup your del.icio.us and digg links.  What methods do you use to backup data that service providers store for you?  Let us know in the comments!
</p>

<p><a href="http://feedads.g.doubleclick.net/~a/fusnRTtVp43lVZvP07aWjIJOn58/0/da"><img src="http://feedads.g.doubleclick.net/~a/fusnRTtVp43lVZvP07aWjIJOn58/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/fusnRTtVp43lVZvP07aWjIJOn58/1/da"><img src="http://feedads.g.doubleclick.net/~a/fusnRTtVp43lVZvP07aWjIJOn58/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.michaelminella.com/components/com_mojo/wp-feed.php?feed=rss2&amp;p=55</wfw:commentRss>
		<feedburner:origLink>http://www.michaelminella.com/blog/45.html</feedburner:origLink></item>
	</channel>
</rss>
