<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5443367277892980924</id><updated>2011-12-31T14:10:53.321-10:00</updated><category term='Software Rumblings'/><category term='Life Performance'/><category term='Configuration Management'/><category term='Code Improvement'/><category term='Hackystat'/><category term='openmbp'/><category term='Java'/><category term='Books and Reading'/><category term='Life Hacking'/><title type='text'>Austen.Ito.Blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>63</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-6319932814569535966</id><published>2011-01-01T22:20:00.001-10:00</published><updated>2011-01-02T01:17:32.564-10:00</updated><title type='text'>A smart plan</title><content type='html'>Just when I thought my goals for 2011 were set, I listened to the &lt;a href="http://www.smartpassiveincome.com/"&gt;Smart Passive Income podcast&lt;/a&gt;.  Pat Flynn talked about having &lt;a href="http://en.wikipedia.org/wiki/SMART_criteria"&gt;SMART&lt;/a&gt; goals, that is specific, measurable, attainable, relevant, and time bound goals.  After taking a look at what I wrote in my &lt;a href="http://austenito.blogspot.com/2010/12/personal-update-end-of-2010.html"&gt;goals for 2011&lt;/a&gt;, I realize that I didn't really think though what I want to accomplish. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Learn Django&lt;/b&gt;&lt;br /&gt;Learning Django is some vague goal that I might get done.  Who knows when and how well I'll get I'll do it.  So to make a realistic goal, I'll change my goal to run through the entire &lt;a href="http://docs.djangoproject.com/en/dev/intro/tutorial01/"&gt;Writing your first Django app&lt;/a&gt; tutorial.  If I want to continue along Django, I can add another goal to this list.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Improve my online presence&lt;/b&gt;&lt;br /&gt;Vague goal #2.  What?  How am I going to improve my online presence?  I just did a quick search on "Improving my online presence" and I see the same things:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;write a blog&lt;/li&gt;&lt;li&gt;contribute to open source projects&lt;/li&gt;&lt;li&gt;participate in online help forums, i.e. Stack Overflow&lt;/li&gt;&lt;/ul&gt;I already have some technical goals in regards to open source projects and hacking, but blogging is once again a weak point.  So how about I quantify my blogging?  I want to have 18 posts by the end of this year not including this post.  That's 1.5 posts a month.  That's sounds like such a small number of posts, but I bet by the end of year I'll be struggling to get this goal in.  A nice timely, achievable goal. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Personal Finance&lt;/b&gt;&lt;br /&gt;Using cash only for non-recurring purchases is a great goal.  I like that goal a lot.  I'm already on my way to saving.  I also wanted to quantify my savings goals.  I need to put a monetary number on how much I want to save.  My emergency fund is a weak point I need to address.  I want to have $5000 by the end of 2011.  With what I have saved, that turns out to be $400 a month.  Ouch.  A lofty goal, but I worked it out and I can get it done.  Totally attainable.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I also have an addendum to my goals.  These are things that I've thought of in the past week.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Do the marathon&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;/b&gt;I'm going to be in the 1% that does the marathon in their lifetime.  Training starts at the end of January!&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Sky Diving on my birthday&lt;/b&gt;&lt;br /&gt;I'm going to make it happen!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;iPhone Hacking&lt;/b&gt;&lt;br /&gt;I've spent some time working on an iphone application that's really fun.  My brain hurts, but I'm going to continue working on it.  This part is measurable with the next item.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Average 7 hours a week on something I'm passionate about&lt;/b&gt;&lt;br /&gt;Whether it be iPhone hacking or blogging, I want to average 7 hours a week doing something I love.  7 hours a week isn't that much.  It's one hour a night.  Totally achievable.  I'm going to keep a log on google docs that keeps track of what I'm doing and when.  Reading blogs and things online doesn't count because I'm only consuming information.  I want to be a producer, one night at a time.&lt;br /&gt;&lt;br /&gt;Phew.  Now that sounds like a goal list.  Time to get to work!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-6319932814569535966?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/6319932814569535966/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=6319932814569535966' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/6319932814569535966'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/6319932814569535966'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2011/01/plan.html' title='A smart plan'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-1515178880932145944</id><published>2010-12-12T07:27:00.000-10:00</published><updated>2010-12-12T07:30:43.290-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life Performance'/><title type='text'>Personal Update: The end of 2010</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;One of the great things about having a blog is being able to look back at what you decided to do about your life and and measure how far you've come. &amp;nbsp;I dusted off my previous update, &amp;nbsp;&lt;a href="http://austenito.blogspot.com/2010/01/2010-things-to-get-done.html"&gt;2010 Things to Get Done&lt;/a&gt;&amp;nbsp;to determine if I executed on my action item list. &amp;nbsp;And with that, here is how I did.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Financial Goals&amp;nbsp;&lt;/b&gt;- Total, complete, epic fail. &amp;nbsp;Well almost. &amp;nbsp;I didn't stick to my budget, but I did manage to save for a couple of vacations.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Paying Myself First &lt;/b&gt;- Going to the gym in the morning before work lasted for about 4 months. &amp;nbsp;Then I had a week of going to sleep late and that killed the early morning gym fests. &amp;nbsp;I still go to the gym 5 times a week, but they are at the end of my day instead of the start.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Read One Library Book A Month &lt;/b&gt;- Sigh. &amp;nbsp;Fail again. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Play with Python &lt;/b&gt;- Nailed it. &amp;nbsp;I learned a bunch of Python by playing with the YouTube Rest API and the last.fm API. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Complete 2 Resume Updates &lt;/b&gt;- Half credit. &amp;nbsp;I did one.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Increase StackOverflow Reputation to 1000&lt;/b&gt; - Fail. &amp;nbsp;I got to 172. I also stopped frequenting SO unless I needed a question answered.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Rails Development&lt;/b&gt; - Failed. &amp;nbsp;I did some Rails hacking this year, but I didn't deploy my app. &amp;nbsp;I also canceled the domain I bought to deploy the app.&lt;br /&gt;&lt;br /&gt;How depressing. &amp;nbsp;My action item score is:&lt;br /&gt;&lt;br /&gt;Completed: 1&lt;br /&gt;Half Credit: 2&lt;br /&gt;Failed: 4&lt;br /&gt;&lt;br /&gt;On the surface, it appears that I had a horrible year. &amp;nbsp;I only completed one thing that I set out to do, made some progress on others, and totally dropped the ball on the rest. &amp;nbsp;But to prepare for this post, I did a resume update and found that the majority of my time was dedicated to work:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Worked on a bunch of interesting things like: GWT, Client/Server architectures, &amp;nbsp;Performance improvements.&lt;/li&gt;&lt;li&gt;Mentored an intern during the summer. &amp;nbsp;I learned a lot from him and I hopefully taught him a bunch of stuff.&lt;/li&gt;&lt;li&gt;Used a bunch of frameworks, technologies and tools like: ActiveMQ, Camel, JMS, Tomcat, Derby, Git, Mercurial&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Some things that I've learned and along the way, but aren't resume material are:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Making a conscious effort to listening to my team's suggestions and recommendations&lt;/li&gt;&lt;li&gt;Revisiting my software design and ideas the next day to double-check if it was actually a good idea&lt;/li&gt;&lt;li&gt;Being more open to new ways of accomplishing tasks&lt;/li&gt;&lt;li&gt;Read world news in the NY Times in addition to reading a lot of personal improvement, finance, and technology blogs.&lt;/li&gt;&lt;li&gt;I've become an avid yelper at&amp;nbsp;&lt;a href="http://aus.yelp.com/"&gt;aus.yelp.com&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;So maybe I didn't do so bad this year. &amp;nbsp;I may not have accomplished my action items I set at the beginning of the year, but I definitely didn't stagnate. &amp;nbsp;I feel like I should have done more, but at least I made some progress.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So where do I go from here?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This year I'm going to try something new. &amp;nbsp;I'm going to create two lists, an "Action item" list and a "Maybe do it this year" list.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Action Items&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Learn Django &lt;/b&gt;- To continue my software learning, I want to learn some Django. &amp;nbsp;I've done some Python work so now it's time to move my learning to the web. &amp;nbsp;I'm thinking of looking for an OSS Python web based project to contribute to.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Improve my online presence &lt;/b&gt;- My online image needs to improve. &amp;nbsp;I need to contribute to online technology forums, work on my linked in profile, and anything else that will increase my visibility.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Personal Finance &lt;/b&gt;- My yearly struggle with sticking to budget has made the action item list once again. This time I'm going to try paying with cash for everything except for gas and my monthly bills that are automatically charged. &amp;nbsp;It's sort of like the&amp;nbsp;&lt;a href="http://www.daveramsey.com/article/dave-ramseys-envelope-system/lifeandmoney_budgeting/"&gt;Envelope System&lt;/a&gt;, but I'm not going to bother with sorting my cash into physical envelopes.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Read More Books &lt;/b&gt;- I really love reading. &amp;nbsp;I just need to get off my butt and use the library more.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Visit Japan &lt;/b&gt;- I need to get to the homeland. &amp;nbsp;In order to go, I'm going to have to save, save, save.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;The Maybe List&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Take a side job &lt;/b&gt;- I really want to try working a part-time job on the side for fun. &amp;nbsp;Something like working at Starbucks or at a wine store. &amp;nbsp;I'm not sure it fits into my work schedule, but I have been toying with the idea.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Andddd go!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-1515178880932145944?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/1515178880932145944/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=1515178880932145944' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/1515178880932145944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/1515178880932145944'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2010/12/personal-update-end-of-2010.html' title='Personal Update: The end of 2010'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-8302397600070714125</id><published>2010-04-02T00:55:00.000-10:00</published><updated>2010-04-02T00:55:38.875-10:00</updated><title type='text'>Checkstyle:  It's Important</title><content type='html'>People have a love/hate relationship with &lt;a href="http://checkstyle.sourceforge.net/"&gt;Checkstyle&lt;/a&gt;. &amp;nbsp;Some people, myself included, are in the love camp. &amp;nbsp;We include it in our development process. &amp;nbsp;We strive for 0 checkstyle warnings. &amp;nbsp;We fear committing Checkstyle warnings because of the ensuing shame resulting from&amp;nbsp;&lt;a href="https://hudson.dev.java.net/"&gt;Hudson&lt;/a&gt;&amp;nbsp;unstable build emails. &amp;nbsp;Other people tend to hate checkstyle. &amp;nbsp;They think that checkstyle piles on work on the already piled on work stack. &lt;br /&gt;&lt;br /&gt;Here's why that's the wrong mindset to have.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Checkstyle enforces your team's agreed upon code style guidelines&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;Code style is very religious subject. &amp;nbsp;&lt;b&gt;Very Religious&lt;/b&gt;. &amp;nbsp;It creates just as many holy wars as the "My IDE is better than yours" argument. &amp;nbsp;But I think everyone can agree that having code style guidelines is a good thing. &amp;nbsp;It aids teams by keeping code uniform and easy to read. &amp;nbsp;Reading code is hard enough without having to weed through 20 different ways types of if-statements and for-loops.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;This one is easy. &amp;nbsp;You have style guidelines, let's make sure that everyone is following them. &amp;nbsp;It doesn't take much work to integrate Checkstyle into the daily build. &amp;nbsp;Enforcing code style is a good thing. &amp;nbsp;It really doesn't matter what the style is. &amp;nbsp;What matters is that everyone follows what rules the team has agreed upon.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;b&gt;Checkstyle forces you to write documentation&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;Developers hate writing documentation. &amp;nbsp;If you love writing code comments then you are a sick, sick person and you probably already love Checkstyle. &amp;nbsp;Feel free to stop reading. &amp;nbsp;Now for the rest of us, we often have a personal two-way connection to our source. &amp;nbsp;We know what it does. &amp;nbsp;At least we know what it does right now. &amp;nbsp;What about two weeks from now? &amp;nbsp;One month? &amp;nbsp;One year?&lt;br /&gt;&lt;br /&gt;Integrating Checkstyle into your development process forces you to stop and think. &amp;nbsp;It makes you question what your code does. &amp;nbsp;It can help validate your design. &amp;nbsp;Often times I find myself asking questions like:&lt;br /&gt;&lt;blockquote&gt;What exactly does this method do? &amp;nbsp;&lt;/blockquote&gt;&lt;blockquote&gt;What are it's invariants? &amp;nbsp;&lt;/blockquote&gt;&lt;blockquote&gt;Are their any special cases?&amp;nbsp;&lt;/blockquote&gt;&lt;blockquote&gt;Can I pass bogus values? &amp;nbsp;&lt;/blockquote&gt;&lt;blockquote&gt;What does this algorithm accomplish? &amp;nbsp;&lt;/blockquote&gt;The intricacies of your code exist in your head at this very moment. &amp;nbsp;Why not write it down? &amp;nbsp;Checkstyle makes it so.&lt;br /&gt;&lt;br /&gt;The argument against forcing developers to write documentation is that they will write useless comments. &amp;nbsp;This isn't a fault of Checkstyle, it's a fault of the developer. &amp;nbsp;Why aren't they writing good documentation? &amp;nbsp;Why aren't other developers getting on the bad documenter's case? &amp;nbsp;Is anyone else reviewing their code to make sure they aren't being sloppy? &amp;nbsp;Checkstyle doesn't do any of that. &amp;nbsp;Your team does.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;b&gt;Checkstyle isn't for you, it's for everyone else&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;I believe we all can agree that clear, concise, and well documented code helps other developers. &amp;nbsp;There is &amp;nbsp;a feeling of pure joy when you use a well-documented third party library. &amp;nbsp;Since all code you write will be used by other developers, shouldn't you impose the same documentation standards on yourself that you wish everyone else would follow? &lt;br /&gt;&lt;br /&gt;What about the argument of &lt;i&gt;"Why should I care about checkstyle? &amp;nbsp;I know how to document". &amp;nbsp;&lt;/i&gt;Even if it were true that you always wrote great documentation, 99.9% of us aren't like you. &amp;nbsp;We need help verifying that we are indeed following code style standards. &amp;nbsp;Checkstyle keeps us honest. &amp;nbsp;After all, we are developers and developers are lazy. &amp;nbsp;Sometimes we need a little prodding to keep ourselves disciplined.&lt;br /&gt;&lt;br /&gt;Checkstyle is just a tool. &amp;nbsp;If you don't use the tool correctly, then of course it's going to suck. &amp;nbsp;Used in the right way it's extremely powerful, even for something as seemingly trivial as code style.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-8302397600070714125?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/8302397600070714125/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=8302397600070714125' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/8302397600070714125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/8302397600070714125'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2010/04/checkstyle-its-important.html' title='Checkstyle:  It&apos;s Important'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-4256354945090563754</id><published>2010-03-27T01:11:00.002-10:00</published><updated>2010-03-27T01:15:36.908-10:00</updated><title type='text'>Developer Responsibilities</title><content type='html'>I think Eric Sink got it right. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ericsink.com/No_Programmers.html"&gt;We Need Developers, Not Programmers&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;In the article, he writes about needing developers who know how to be flexible and understand the software lifecycle instead of coders that are one trick ponies. &amp;nbsp;You know who I'm talking about. &amp;nbsp;Those programmers who know how to write some source and nothing else. &amp;nbsp;Improve the build environment? Work on continuos integration? &amp;nbsp;Unit test? &amp;nbsp;Write wikis to help the team? Mentor? &amp;nbsp;Contribute to the awesome company culture? Forget about it.&lt;br /&gt;&lt;br /&gt;Working for a small company, I completely agree with that statement. &amp;nbsp;I'm glad that I work at a company that allows me to have a hand in everything. &amp;nbsp;My tasks during the week range from development environment scripting to application deployment to middleware hacking to pretty front end stuff to ensuring code quality to maintaining our build server. &amp;nbsp;&lt;b&gt;Then&lt;/b&gt;&amp;nbsp;I get to write down what I've done to help out the rest of the team on our company wiki. &amp;nbsp;My hard work is rewarded with my #1 status&amp;nbsp;on the&amp;nbsp;&lt;a href="http://wiki.hudson-ci.org/display/HUDSON/The+Continuous+Integration+Game+plugin"&gt;Continuos Integration Game&lt;/a&gt;&amp;nbsp;leaderboard. &amp;nbsp;Having my hand in everything is awesome because&lt;br /&gt;&lt;br /&gt;&lt;b&gt;I'm learning tons everyday!&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;/b&gt;As a developer, that's something to strive for. Especially if you're a developer that's fresh out of school. &amp;nbsp;When you get out of college, you want to absorb as much as possible. &amp;nbsp;Can you do that at a big company? &amp;nbsp;Maybe. &amp;nbsp;Is it easier at a smaller company? &amp;nbsp;Totally. &lt;br /&gt;&lt;br /&gt;As a developer, you have a mound of responsibilities other than whipping out lines of source. &amp;nbsp;Specializing in something is great, but being an agile developer is much more useful to your peers. &amp;nbsp;If you understand the different aspects of software, you can apply your knowledge to challenges you face in every facet of development. &amp;nbsp;I've learned over the years that just being familiar with what people are talking is &lt;b&gt;HUGE&lt;/b&gt;. &amp;nbsp;It gives you a basis when you start learning new stuff on &lt;a href="http://www.google.com/"&gt;The Google&lt;/a&gt;. &amp;nbsp;The only way to get to that nice and comfy "I've heard of that before" place is to dive into as many new things as possible.&lt;br /&gt;&lt;br /&gt;Staying agile is important and a small company helps you do that. &amp;nbsp;It helps you and your team &lt;i&gt;get things done&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;And isn't that what it's all about? &lt;br /&gt;&lt;br /&gt;Solving problems, improving customers lives, and rocking out to an awesome product. &lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Lucida Grande'; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 11px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-4256354945090563754?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/4256354945090563754/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=4256354945090563754' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/4256354945090563754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/4256354945090563754'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2010/03/developer-responsibilities.html' title='Developer Responsibilities'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-1228932816965880730</id><published>2010-03-04T22:30:00.002-10:00</published><updated>2010-03-07T13:00:41.252-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Code Improvement'/><title type='text'>Hotkeys.  More productivity, More Awesome.</title><content type='html'>At a recent career fair, &lt;a href="http://kagawaa.blogspot.com/"&gt;Aaron Kagawa&lt;/a&gt; asked students the question,&lt;br /&gt;&lt;br /&gt;"&lt;i&gt;What is your favorite hotkey in Eclipse?&lt;/i&gt;"&lt;br /&gt;&lt;br /&gt;Sadly, not very many students had an answer. &amp;nbsp;&lt;a href="http://djplazaro.blogspot.com/"&gt;Joel Lazaro&lt;/a&gt;, a student&amp;nbsp;in Dr. Philip Johnson's 414 class, is on the right track and posted a useful link on &lt;a href="http://groups.google.com/group/uh-dorm-energy-competition-2010/browse_thread/thread/5a13ac6a7a299efa?pli=1"&gt;Eclipse shortcuts&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Being a productive developer means you trim the number of steps do your hacker tasks. &amp;nbsp;Why is this important? &amp;nbsp;Let's take a look at an extreme example, a daily task in Eclipse with and without hotkeys:&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;A simple task with hotkeys&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Ctrl-Shift-T to open Foo Class&lt;/li&gt;&lt;li&gt;Ctrl-O to find and move to another method&lt;/li&gt;&lt;li&gt;Write some code&lt;/li&gt;&lt;li&gt;Ctrl-Shift-Up/Down to move to the next method&lt;/li&gt;&lt;li&gt;Ctrl-D to delete a line&lt;/li&gt;&lt;li&gt;Control-F11 to run the code&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;b&gt;Now the same task without Hotkeys&lt;/b&gt;&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Grab the mouse&lt;/li&gt;&lt;li&gt;Open the package navigator and search for the package where Foo Class exists&lt;/li&gt;&lt;li&gt;Double-click to open the Foo Class&lt;/li&gt;&lt;li&gt;Scroll with the mouse to find the method to edit&lt;/li&gt;&lt;li&gt;Write some code&lt;/li&gt;&lt;li&gt;Grab the mouse&lt;/li&gt;&lt;li&gt;Move to the next method&lt;/li&gt;&lt;li&gt;Using the mouse, highlight the entire line to delete&lt;/li&gt;&lt;li&gt;Move the mouse to the 'Run Application' Button&lt;/li&gt;&lt;li&gt;Run the code&lt;/li&gt;&lt;/ol&gt;The main tasks to notice in the 'Without Hotkeys' example is the time spent searching and moving your hand to the mouse. &amp;nbsp;When a developer skips out on the hotkeys, productivity suffers. &amp;nbsp;Too much time is spent searching. &amp;nbsp;When the file to edit is located, more time is spent searching for the place to edit. &amp;nbsp;Once editing is done, it's back to the mouse to move someplace else. &amp;nbsp;Rinse and repeat. &amp;nbsp;*Yawn*&lt;br /&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;That isn't even the worst part. &amp;nbsp;The worst part is the productivity of the entire team suffers. &amp;nbsp;Less things get done because time is wasted. &amp;nbsp;When other developers try to help, even more of their time evaporates. &amp;nbsp;Let's take a&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Pair_programming"&gt;pair programming&lt;/a&gt;&amp;nbsp;example. &amp;nbsp;I&lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;t could be a formal session or an impromptu 'walk-by' to help someone out. &amp;nbsp;The navigator stands their idling while the driver opens a class or finds a method using the mouse. &amp;nbsp;Now the productivity of two people has flatlined. &amp;nbsp;If you're the driver,&amp;nbsp;&lt;i&gt;you're job is to drive fast&lt;/i&gt;.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;To better explain why hotkeys are so important, I'll reference the age-old analogy of a carpenter and his tools. &amp;nbsp;Think of a carpenter's toolbelt. &amp;nbsp;Pure genius right? It's inventor thought, "&lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;I'll wrap a piece of leather around carpenter's waist so they can grab their tools quickly rather than waste their time going back to their tool box.&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;" &amp;nbsp;Productivity went through the roof. &amp;nbsp;Carpenters pick the right tool without moving or looking down. &amp;nbsp;Commence carpenter &lt;a href="http://en.wikipedia.org/wiki/Flow_(psychology)"&gt;flow&lt;/a&gt; time.&lt;/span&gt;&lt;/div&gt;&lt;/b&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Hotkeys help developers to get "in the zone". &amp;nbsp;When you stop to find a class or method, there are more opportunities to break your train of thought. &amp;nbsp;Moving your hands off the keyboard and onto the mouse is like switching contexts. &lt;a href="http://www.joelonsoftware.com/articles/fog0000000022.html"&gt;Switching tasks&lt;/a&gt;&amp;nbsp;is bad.&lt;/div&gt;&lt;br /&gt;Are you ready to improve another skill in your toolset? &amp;nbsp;Take a look at&amp;nbsp;&lt;a href="http://stackoverflow.com/questions/98220/what-is-your-favorite-hot-key-in-eclipse"&gt;Developers favorite Eclipse hotkeys&lt;/a&gt;&amp;nbsp;or hit Ctrl-Shift-L in Eclipse to list the available hot keys. &amp;nbsp;If you use another IDE, take some time to learn about it's hotkeys, macros, and shortcuts.&lt;br /&gt;&lt;br /&gt;Still don't believe me? &amp;nbsp;Think using the mouse is ok?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://steve-yegge.blogspot.com/2008/09/programmings-dirtiest-little-secret.html"&gt;Steve Yegge says, "Non-touch-typists have to make sacrifices in order to sustain their productivity"&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Death to the mouse!&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-1228932816965880730?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/1228932816965880730/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=1228932816965880730' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/1228932816965880730'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/1228932816965880730'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2010/03/hotkeys-tool-of-awesome.html' title='Hotkeys.  More productivity, More Awesome.'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-4901753504698470684</id><published>2010-02-13T11:58:00.013-10:00</published><updated>2010-02-13T12:51:07.738-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Code Improvement'/><title type='text'>Getting Technically Started</title><content type='html'>&lt;i&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Where do I begin?&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;This question scared the crap out of me when I forayed into the job space straight out of the university. Everything was wild and unknown. I needed a tour guide yesterday.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;As a new grad, I tried a lot of things. I read books and blogs. Listened to podcasts. Worked on open source projects like&amp;nbsp;&lt;/span&gt;&lt;a href="http://code.google.com/p/hackystat/"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Hackystat&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&amp;nbsp;and personal projects like an&amp;nbsp;&lt;/span&gt;&lt;a href="http://github.com/jianshi/openmbp"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Open Microblogging Plaform&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&amp;nbsp;and a ping pong score tracker. I tried a bunch of different approaches to improving my technical life.&amp;nbsp;This blog's aim is to help you filter out the noise. &amp;nbsp;I'll write what worked for me with the hope that it can bootstrap your improvement outside of college.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;First things first&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;There are two articles are forever part of my hacker livelihood. Having read these two articles in Philip Johnson's software engineering class helped me define who I am and to understand what I need to do to contribute.&amp;nbsp;These two webpages. &amp;nbsp;Yes I said webpages not blogs. &amp;nbsp;It's crazy how old these articles are. &amp;nbsp;Notice the manual revision history at the top? &amp;nbsp;Crazy. &amp;nbsp;Nonetheless, the content is the stuff of legends.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;a href="http://catb.org/~esr/faqs/hacker-howto.html"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;How to Become a Hacker&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Defines who we are and how we get there. &amp;nbsp;We are hackers. &amp;nbsp;Be proud and proclaim it.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;a href="http://catb.org/~esr/faqs/smart-questions.html"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;How to Ask Smart Questions&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Asking dumb questions makes you dead weight. Hackers &lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;hate&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; dead weight. We want to spend time having fun chatting about the latest tech news, making paper airplanes, having Nerf gun fights, and if it's in the project plan, write some code. &amp;nbsp;We don't have the time or patience to answer stupid questions. &amp;nbsp;Remember the "&lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;There is no such thing as a stupid question&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;" line doesn't apply to our world. &amp;nbsp;There are stupid questions and it makes us angry.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;With that said, we geeks get it. &amp;nbsp;No one knows the answer to everything. &amp;nbsp;It's not humanly possible. &amp;nbsp;Robots, ninjas and zombies can do it, but not us lowly humans. &amp;nbsp;Geeks genuinely want to help people. &amp;nbsp;They want to explain a topic they're familiar with not only flex their intellectual guns, but to help you out.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Ask a smart question, get a smart answer. &amp;nbsp;Respect +1.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Ask a dumb question, lose respect. &amp;nbsp;Respect -100&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Respect is king amongst the Geeky.&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Blogs&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Blogs are an excellent knowledge resource. &amp;nbsp;StackOverflow has a thread on t&lt;/span&gt;&lt;a href="http://stackoverflow.com/questions/78955/what-are-the-best-programming-and-development-related-blogs"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;he best programming and development blogs&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&amp;nbsp;if you are interested, but here are the blogs that I've been following for quite some time:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.basilv.com/psd"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Basil Vandegriend: Professional Software Development&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codinghorror.com/blog/"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Coding Horror&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://headrush.typepad.com/creating_passionate_users/"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Creating Passionate Users&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&amp;nbsp;- It's a shame that this blog shutdown do someone stalking Kathy Sierra. &amp;nbsp;It's still worth it to go through the blog archives.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.joelonsoftware.com/"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Joel on Software&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.randsinrepose.com/"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Rands In Repose&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.reddit.com/r/joel/"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;reddit.com: Joel on Software - what's new online&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&amp;nbsp;- Kinda like a hacker version of digg&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://steve-yegge.blogspot.com/"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Steve Yegge's Blog Rants&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.google.com/reader/view/#"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Hacker News&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&amp;nbsp;- Up to date tech news&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.java.net/blog/kohsuke"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Kohsuke Kawaguchi's Blog&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&amp;nbsp;- The lead of&amp;nbsp;&lt;/span&gt;&lt;a href="https://hudson.dev.java.net/"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Hudson&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;. &amp;nbsp;This guy does some crazy stuff.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.google.com/reader/view/#"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Slashdot&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&amp;nbsp;- Geek news for geeky people like you and me&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://xkcd.com/"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;xkcd.com&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&amp;nbsp;- This isn't a blog, but every hacker should read xkcd. &amp;nbsp;Seriously.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;I also follow the blogs of people I've met at the university or through work. &amp;nbsp;They are all interesting as well.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://johnson-engineering-log.blogspot.com/"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Engineering Log&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&amp;nbsp;- The maintainer of the&amp;nbsp;&lt;/span&gt;&lt;a href="http://code.google.com/p/jupiter-eclipse-plugin/"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;jupiter-eclipse-plugin&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://kagawaa.blogspot.com/"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;HackyHawaii For Life by AK&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&amp;nbsp;- Hasn't been posting lately, but great advice for new grads.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://philipmjohnson.blogspot.com/"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;PMJ Engineering Log&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&amp;nbsp;- Philip Johnson's blog.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://excitedcuriosity.wordpress.com/"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Seize the Moment of Excited Curiosity for the Acquisition of Knowledge&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://sidsavara.com/"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;SidSavara.com&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&amp;nbsp;- A personal improvement/life hacker blog. &amp;nbsp;Cool dude, cool&amp;nbsp;blog.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Reading Code&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;As a hacker you want to get into the nitty gritty. &amp;nbsp;You want to jump into that source and show it who's boss. &amp;nbsp;You're going to write millions of lines of unit tested, bug free, elegant code. &amp;nbsp;But wait.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Do you enjoy reading other people's code? &amp;nbsp;No? &amp;nbsp;That's too bad because reading code is about 90% of your hacker life. &amp;nbsp;Maybe more. &amp;nbsp;There's API's, javadocs, code examples, and source digging among the countless other ways to read lines of code. &amp;nbsp;Rockstar programmers that&amp;nbsp;&lt;/span&gt;&lt;a href="http://forums.construx.com/blogs/stevemcc/archive/2008/03/27/productivity-variations-among-software-developers-and-teams-the-origin-of-quot-10x-quot.aspx"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;perform 10x better than others&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&amp;nbsp;rock at reading code. &amp;nbsp;For the rockstars, reading code should be like reading a book. &amp;nbsp;It needs to flow through your mind and paint a picture of what's happening. &amp;nbsp;It's said that you need to practice&amp;nbsp;&lt;/span&gt;&lt;a href="http://jameswharris.wordpress.com/2008/11/30/10000-hours-to-greatness/"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;10,000 hours to master something&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;. &amp;nbsp;I think you'll need even more to master code reading because everyone writes their code differently and most of it is bad. &amp;nbsp;You'll need to be able to quickly pick up favored patterns and apply it to your overall understanding of the code structure and usage.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;It might seem obvious, but you should get out there and read code. &amp;nbsp;It's actually really easy:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Step 1: Find an interesting project on SourceForge or Github. &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Step 2: Check out the source&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Step 3: Read the source.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Voila. &amp;nbsp;You are on your way to code reading mastery. &amp;nbsp;You could even take a step in your code writing mastery hour allotment by contributing to the project.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Writing Code&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;I don't need to write much here. &amp;nbsp;Practice, practice, practice. &amp;nbsp;I would suggest immediately starting with a new language because it promotes new ways of thinking. &amp;nbsp;You'll realize the importance of learning new languages once you apply a language design pattern from one language to another. &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;I started with&amp;nbsp;&lt;/span&gt;&lt;a href="http://rubyonrails.org/"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Ruby on Rails&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&amp;nbsp;because I was interested in web frameworks. &amp;nbsp;I've made a&amp;nbsp;&lt;/span&gt;&lt;a href="http://austenito.blogspot.com/2010/01/2010-things-to-get-done.html"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;resolution&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&amp;nbsp;to work with Python this year. &amp;nbsp;Pick something you find interesting and do some&amp;nbsp;&lt;/span&gt;&lt;a href="http://codekata.pragprog.com/"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Code Kata&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&amp;nbsp;or create yourself a side project.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;/span&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Blogging&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Blogging is an excellent tool. &amp;nbsp;I know that it's not for everyone, but I find that it continually improves my thinking and writing skills. &amp;nbsp;I brainstorm during my commute to work, the walk to Starbucks, the lonely period in the bathroom. &amp;nbsp;I think about interesting blog topics and if my readers (all 5 of them) would get it. &amp;nbsp;Blogging puts your thoughts into written form. &amp;nbsp;Sometimes it's hard to express what you mean until you try to explain it to someone else.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Another great thing about blogging is that it can help you with your&amp;nbsp;&lt;/span&gt;&lt;a href="http://austenito.blogspot.com/2008/10/periodic-resume-updates.html"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Periodic Resume Updates&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;. &amp;nbsp;You won't be able to remember what you've done over the past year, but having an activity log will help figure out what you should add to your resume or tell you that you aren't investing in yourself enough.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;/span&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Hang out with Hackers&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;The last point I have to make isn't really a skill, but rather something to help build on your hackerism. Find smart hackers and hang out with them. &amp;nbsp;In person would be best, whether it be your coworkers or people at other software companies. &amp;nbsp;It could even be online. It's similar to&amp;nbsp;&lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Pair_programming"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;pair programming&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&amp;nbsp;without any coding. Either of you can drive, but both learn from each other. Most geeks like to talk about geeky things like the latest and greatest tools. Find people that are on the bleeding edge and attach yourself to them. The bleeding edge is where you always want to be.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-4901753504698470684?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/4901753504698470684/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=4901753504698470684' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/4901753504698470684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/4901753504698470684'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2010/02/getting-technically-started.html' title='Getting Technically Started'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-4621146211160879763</id><published>2010-02-01T09:00:00.000-10:00</published><updated>2010-02-04T08:37:02.700-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life Hacking'/><title type='text'>Purpose.  It's that little flame.</title><content type='html'>&lt;object height="340" width="560"&gt;&lt;param name="movie" value="http://www.youtube.com/v/wDY2YWZHEBc&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/wDY2YWZHEBc&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Purpose from the Broadway musical Avenue Q. &amp;nbsp;Awesome.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;When I first started out writing this blog, I wanted it to be a place where I talked about the happenings in my technical life. &amp;nbsp;A good start I think. &amp;nbsp;Sometime this past week, three years into blogging on and off, I noticed something about the blogs that I read. &amp;nbsp;I'm so dense. &amp;nbsp;They all provide information that help me in some way. &amp;nbsp;Whether its explaining how I use a specific technique to improve my career, an interesting idea, or a novel concept, they all exist to lend a hand.&lt;br /&gt;&lt;br /&gt;I noticed that &lt;i&gt;a lot&lt;/i&gt; of my posts are a bunch of rants on what projects I'm working on, my love-hate relationship with certain technologies, or my personal improvement progress. &amp;nbsp;Maybe it's time to put a spin on what I blog. &amp;nbsp;Maybe I should write posts about how activities on projects flick on the lightbulb or create guides for tools I'm using. &amp;nbsp;Even reviews of tools and books would be helpful.&lt;br /&gt;&lt;br /&gt;Maybe I shouldn't care what others think about my blog because part of the reason for taking the time to write things down is to get my thoughts out of my head. &amp;nbsp;If I really cared about increasing my readership, there are a lot of other things I could do. &amp;nbsp;Tons of people reading my blog isn't my&amp;nbsp;&lt;b&gt;purpose&lt;/b&gt;. &lt;br /&gt;&lt;br /&gt;Helping others improve is a noble&amp;nbsp;&lt;b&gt;purpose&lt;/b&gt;. &amp;nbsp;It will be that little flame. &amp;nbsp;&lt;b&gt;&amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-4621146211160879763?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/4621146211160879763/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=4621146211160879763' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/4621146211160879763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/4621146211160879763'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2010/02/purpose-its-that-little-flame.html' title='Purpose.  It&apos;s that little flame.'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-2275811510749404537</id><published>2010-01-08T20:31:00.000-10:00</published><updated>2010-12-12T07:31:41.542-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life Performance'/><title type='text'>2010 Things to Get Done</title><content type='html'>In the spirit of new years I decided to do what everyone else is doing, create a list of things I want to accomplish this year, i.e., my New Year's Resolution. &amp;nbsp;I remember I created a &lt;a href="http://austenito.blogspot.com/2008/01/lists-are-fun.html"&gt;List of Things I Want to Do&lt;/a&gt; way back in 2008. &amp;nbsp;Let's see how I matched up 2 years later:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Improve my writing skills&lt;/li&gt;&lt;li&gt;Ruby/Apache Wicket and Hackystat&lt;/li&gt;&lt;li&gt;&lt;span style="color: red;"&gt;Practice Puzzles&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: red;"&gt;Play with Python&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Give a speech to a group about something technology&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;The things I didn't complete are in red. &amp;nbsp;How sad. &amp;nbsp;Two years later I still haven't tried out Python. &amp;nbsp;I think I have improved my writing skills a bit, but I had a blog hiatus in 2009. &amp;nbsp;Hopefully we will miss that episode this year. &amp;nbsp;I tried implementing a Hackystat UI using Ruby on Rails in 2008. &amp;nbsp;Other than mentoring a student for Google Summer of Code 2009, I haven't done any new work on Hackystat. &amp;nbsp;The &lt;a href="http://csdl.ics.hawaii.edu/"&gt;Collaborative Software Development Laboratory&lt;/a&gt; has started new work in the smart grid energy field. &amp;nbsp;It's an interesting area with mounds of real-world application potential. &amp;nbsp;I'm excited to see the direction they take their research. &amp;nbsp;Perhaps I might find an opportunity to contribute to their work.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I didn't create a list of things to get done in 2009, but I did have a &lt;a href="http://austenito.blogspot.com/2008/10/periodic-resume-updates.html"&gt;Periodic Resume Update&lt;/a&gt;&amp;nbsp;that talks about what I've done and where I'm headed. &amp;nbsp;It seems that I believed that Openmbp was the direction I was headed in 2009. &amp;nbsp;That idea has passed and now it's onto new things. &amp;nbsp;I'm a year older and starting to think about new things. &lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the past two years I was concerned with everything technology related. &amp;nbsp;I wanted to improve my hacking skills and learn new technologies. &amp;nbsp;Learning new technical skills is important, but I now believe that other aspects of life that should receive attention. &amp;nbsp;That's what I want to accomplish this year in addition to continuing my technological advancement pilgrimage. &amp;nbsp;I debated on creating a list by priority, but I decided that everything on this list should get &lt;b&gt;&lt;i&gt;done&lt;/i&gt;&lt;/b&gt;. &amp;nbsp;I ended up categorizing the items into financial, personal, and technological goals.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: x-large;"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;Financial Things to Get Done&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Stick to my budget &lt;/span&gt;-&lt;span style="font-weight: bold;"&gt;&amp;nbsp;&lt;span style="font-weight: normal;"&gt;I'm a failure at sticking to budgets. &amp;nbsp;I spend enormous amounts of time tracking where my money is going, set up a budget, and then buy a digital camera. &amp;nbsp;Or a snowboard. &amp;nbsp;Or a wine fridge. &amp;nbsp;Or some other thing that I probably should have saved up for first. &amp;nbsp;My new strategy is paying myself&amp;nbsp;financially and to use cash when possible. &amp;nbsp;Paying myself first financially means that I put money away before I start paying my bills or buying frivolous things. &amp;nbsp;Using cash helps me to be conscious of where my money is going. &amp;nbsp;Credit cards are evil and they own me. &amp;nbsp;&lt;span style="font-size: small;"&gt;(Hopefully not this year)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Save 10% of income &lt;/b&gt;- Paying myself first will allow me to accomplish the next two goals. &amp;nbsp;There are things I want to save up for in the future. &amp;nbsp;I can't purchase them unless I start saving now. &amp;nbsp;I think 10% is a reasonable number.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Save 5% of income for life's experiences&amp;nbsp;&lt;/b&gt;- For the past three years I've never saved money to spend on vacations or things I'm passionate about. &amp;nbsp;I was in the financial bias of saving as much as possible and would feel guilty if I decided to take a trip or spend some cash on something I took pleasure in. No more! &amp;nbsp;Over the past year I've become extremely interested in personal finance. &amp;nbsp;So like I always do when I want to find out more on a subject, I look for reading material, i.e. online blogs. &amp;nbsp;A recurring theme that I found that struck a cord with me was: &lt;i&gt;Spend money on things you value&lt;/i&gt;. &amp;nbsp;After all, money is just a tool to live life. &amp;nbsp;So this year I resolve to save money for that snowboarding trip or a trek to foreign country. &amp;nbsp;I'm going to save and spend with no remorse. &amp;nbsp;I'm going to live this time around.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size: x-large;"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;Personal Things to Get Done&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Continue to pay myself first &lt;/span&gt;- I recently wrote a blog&amp;nbsp;&lt;a href="http://austenito.blogspot.com/2009/11/paying-myself-first.html"&gt;paying myself first&lt;/a&gt;. &amp;nbsp;I want to continue to go to the gym in the morning. &amp;nbsp;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Read one library book a month&lt;/span&gt;&amp;nbsp;- I've been using the library for about a 1.5 months now and I'm going to say that I can't imagine my life without it. &amp;nbsp;I paid 10 dollars for a new library card and the first books I checked out were worth at least twice the library card fee! &amp;nbsp;I've found that I won't have the time to read, but I'm saving money instead of wasting it. I can always renew books I failed to read or just return them and check them out later. &amp;nbsp;The goal here is to continue to read. &amp;nbsp;One book a month is totally doable.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size: x-large;"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;Technical Things To Get Done&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Play with Python (Really)&lt;/b&gt;&amp;nbsp;- It's time to get off my ass off my crappy chair (My home chair. &amp;nbsp;My work chair rocks!) and learn a new language. &amp;nbsp;I wouldn't say I'm stagnating since I'm still absorbing Ruby and Rails, but I need to get some new code perspectives into my brain this year. &amp;nbsp;Python will be welcomed.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Complete 2 resume updates this year &lt;/span&gt;- The periodic resume updates are a good indicator of my current technical and personal development progress. &amp;nbsp;Stagnation equals Fail.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Increase my stackoverflow reputation to 1000!&lt;/span&gt;&amp;nbsp;- I think I'm the most excited about this thing to get done. &amp;nbsp;I've been frequenting&amp;nbsp;&lt;a href="http://stackoverflow.com/"&gt;Stack Overflow&lt;/a&gt;(SO)&amp;nbsp;for the past couple of weeks and have decided to join the game. &amp;nbsp;I want to raise my reputation points to a certain level before the end of the year. &amp;nbsp;Since it's a game with rules and points, my progress can be measured. &amp;nbsp;I want to have a goal of 1000 reputation points before 2011. &amp;nbsp;I'm at 96 right now. &amp;nbsp;An idea I had to use SO as a learning tool was to try to answer questions in unfamiliar areas. &amp;nbsp;For example, I'm not a pro Rails hacker, but I want to be. &amp;nbsp;So my task is to try to answer Rails questions even if they already have answers. &amp;nbsp;At the end of the day, reputation points don't matter, what I learn does.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Practice developing with Ruby on Rails&lt;/span&gt;&amp;nbsp;- It's still here. &amp;nbsp;Rails hacking. &amp;nbsp;It's fun, but I really need to get a move on. &amp;nbsp;I have a side project that I wanted to deploy by the end of 2009, but I failed. &amp;nbsp;Let's shoot for the end of 2010.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Phew. &amp;nbsp;That's a lot to accomplish. Onward!&lt;/div&gt;&lt;ul&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-2275811510749404537?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/2275811510749404537/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=2275811510749404537' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/2275811510749404537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/2275811510749404537'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2010/01/2010-things-to-get-done.html' title='2010 Things to Get Done'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-5171039129044461819</id><published>2009-12-21T08:43:00.000-10:00</published><updated>2010-01-06T08:04:57.631-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>My Mockito Tech Talk.  AKA: Conveying Information and Stuff</title><content type='html'>It seems that 3 weeks after writing&amp;nbsp;&lt;a href="http://austenito.blogspot.com/2009/11/paying-myself-first.html"&gt;Paying Myself First&lt;/a&gt;, I have already failed. &amp;nbsp;Well not completely.&lt;br /&gt;&lt;br /&gt;I haven't been writing down my thoughts in blog form because I've been preparing slides for a tech talk at work. &amp;nbsp;I've been wanting to give a talk about &lt;a href="http://mockito.org/"&gt;Mockito&lt;/a&gt;. &amp;nbsp;My project is on a transition point so I figured that it would be imperative to give a talk this month before we ramp up again in January.&lt;br /&gt;&lt;br /&gt;I suck at public speaking. &amp;nbsp;That process of reading your audience. &amp;nbsp;Conveying information. &amp;nbsp;All of that &lt;i&gt;stuff&lt;/i&gt;. &amp;nbsp;Who needs it right? &amp;nbsp;Hook me up with my IDE, give me a fridge full of diet mountain dew and get out of my way. &amp;nbsp;I got things to do. &lt;br /&gt;&lt;br /&gt;If only the world worked that way.&lt;br /&gt;&lt;br /&gt;Since I'm on this whole, let's work hard and do awesome kick, I've been looking at public speaking as an area to focus on. &amp;nbsp;After all, if I want to be able to lead software teams, I need to be able to be someone who is able to be informative and also know what the hell they are talking about. &amp;nbsp;I've done the whole Toastmasters thing before. &amp;nbsp;I like the concept, but I didn't like the structure and organization of the particular group I was a part of. &amp;nbsp;So without any outside help, I got to searching on how I could improve my slides and effectively present&amp;nbsp;a technical presentation to my peers.&lt;br /&gt;&lt;br /&gt;And the search began.&lt;br /&gt;&lt;br /&gt;I found this interesting PDF using the Google:&amp;nbsp;&lt;a href="http://www.home.hs-karlsruhe.de/~kech0001/ifs/ex-en/tech_exercises/Technical_English_presentations.pdf"&gt;Presentation Tips - How to Give a Technical Presentation&lt;/a&gt;. &amp;nbsp;It's main points were to break up your presentation into distinct beginning, middle, and end sections. &amp;nbsp;The normal presentation layout, which I totally brainfarted on. &amp;nbsp;My presentation sections were a mess. &amp;nbsp;I didn't show any importance, background, or motivation in the beginning. &amp;nbsp;I had no illustrations to help my audience during the meat of my presentation. &amp;nbsp;The end was the best part, most likely because the slides came to end. &lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;When I fixed my slides a bit, I changed my presentation's beginning&amp;nbsp;to grab my audience's attention with some facts about my project's level of code coverage.&amp;nbsp;The middle gave the basic functionality of Mockito such as mocking, stubbing and verifying. &amp;nbsp;I added some code examples and gave some background on when and why you would want to use Mockito's features. &amp;nbsp;There were a lot of questions that were brought up during this part of the talk. &amp;nbsp;Some were of mocking and stubbing use-cases and others were related to project specific usages. &amp;nbsp;I got a sense of confusion from the audience at this point. &amp;nbsp;I tried to use the List examples from the Mockito documentation, but that turned out to be a bit too high-level for a presentation. &amp;nbsp;Most of the developers didn't "get it". &lt;br /&gt;&lt;/div&gt;&lt;br /&gt;I finished off my presentation with a "real-world" Mockito example where I tested the behavior of a action class populating a stack. &amp;nbsp;The action class implemented ActionListener &amp;nbsp;and would operate on Stack's object interface. &amp;nbsp;I got good responses from this part of the presentation. &amp;nbsp;I think that developers had that "ah hah" moment when they could finally see Mockito in action from an IDE.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;Overall I think the talk went well. &amp;nbsp;It was very informal and the I was getting a good vibe. &amp;nbsp;The best part was the fun-ness factor. &amp;nbsp;I'd have to give it a 9 out of 10. &amp;nbsp;This was the most fun I have ever had during a tech talk. &amp;nbsp;One thing I noticed that might have increased the fun-ness factor was the room's size. &amp;nbsp;Due to scheduling conflicts we had to switch to another room where the developers were comfortably crammed together. &amp;nbsp;&lt;i&gt;Best move&lt;/i&gt; &lt;i&gt;ever&lt;/i&gt;. &amp;nbsp;I think that helped the talk out a lot because it made the presentation feel less like a presentation and more like a discussion. &amp;nbsp;I think I'll always have my talks in that room if it's possible.&lt;br /&gt;&lt;br /&gt;My team has already started to use Mockito to write their unit tests. &amp;nbsp;The real measure of success will be if the rest of the project's teams will start to drink some of that delicious Mockito Koolaid. &amp;nbsp;Oh yeah. &amp;nbsp;A coworker on another project likes the idea of Mockito and believe that he will use it for his tests. &amp;nbsp;Something interesting I ended up telling him was that:&lt;br /&gt;&lt;br /&gt;"If you already write tests, then you know the pain of trying to setup and build the dependencies of the object you are testing. &amp;nbsp;If you don't write tests then you'll be wondering what's the point".&lt;br /&gt;&lt;br /&gt;I hope they get it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-5171039129044461819?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/5171039129044461819/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=5171039129044461819' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/5171039129044461819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/5171039129044461819'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2009/12/my-mockito-tech-talk-aka-conveying.html' title='My Mockito Tech Talk.  AKA: Conveying Information and Stuff'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-4117536455850125205</id><published>2009-12-03T08:35:00.001-10:00</published><updated>2010-01-10T13:06:31.218-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Configuration Management'/><title type='text'>Baselines, Branching and Reviews!</title><content type='html'>We have come to a crossroads at work. &amp;nbsp;On the left we have our latest release. &amp;nbsp;On the right, we have the road leading to future changes, improvements, and success! &lt;br /&gt;&lt;br /&gt;Our latest release, lets call it FixLaterReleaseNow or FLRN for short, mainly consisted of developers committing to the trunk. &amp;nbsp;This caused developers to commit unfinished, broken code to the mainline. &amp;nbsp;When other developers would update, they would pull the broken code into their local workspace. &amp;nbsp;I'm not sure if this led to the code rot that manifested itself, but something was wrong. &amp;nbsp;Very very wrong.&lt;br /&gt;&lt;br /&gt;Perhaps there was a problem with our peer reviews. &amp;nbsp;We had little to none. &amp;nbsp;The only set of eyes looking at the code were the author's. &amp;nbsp;In FLRN we used the&amp;nbsp;&lt;a href="http://code.google.com/p/jupiter-eclipse-plugin/"&gt;Jupiter Eclipse Plugin&lt;/a&gt;&amp;nbsp;to facilitate our peer reviews. Jupiter is a great tool, but there were two major sticking points for us:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Some developers use IDEs other than Eclipse.&lt;/li&gt;&lt;li&gt;The turnover from setup -&amp;gt; moderation -&amp;gt; fixing review issues was way too long. &amp;nbsp;On average it probably took developers 1.5-2 days to complete the process.&lt;/li&gt;&lt;/ol&gt;I love Jupiter. &amp;nbsp;I've been talking with &lt;a href="http://blog.sakuda.us/"&gt;Julie&lt;/a&gt;, the current maintainer of Jupiter, about how we can improve the plugin. &amp;nbsp;That talk is for another blog on another day.&lt;br /&gt;&lt;br /&gt;There were &lt;a href="http://en.wikipedia.org/wiki/Fixing_Broken_Windows"&gt;broken windows&lt;/a&gt;&amp;nbsp;everywhere and no clean up crew to whip it into shape. &amp;nbsp;Something needed to change and fast. &amp;nbsp;We had no time in the FLRN codebase, but we have some time (a little) in the new release to get moving towards the proverbial Awesome Path.&lt;br /&gt;&lt;br /&gt;To get on track we have integrated&amp;nbsp;&lt;a href="http://www.atlassian.com/software/crucible/"&gt;Crucible&lt;/a&gt;, a code review tool from the great people at &lt;a href="http://www.atlassian.com/"&gt;Atlassian&lt;/a&gt;, into our development process. &amp;nbsp;It's a bit buggy and doesn't integrate with the other Atlassian products as we would like, but Crucible increases our review turnover. &amp;nbsp;It is much quicker to choose which files to review, comment on the source, and complete the review. &amp;nbsp;The reviews are persisted so other people can &amp;nbsp;checkout what happened in the review. What we are noticing is that developers are posting comments on lines of code and the author comes in and comments on his design decision. &amp;nbsp;You just don't get that kind of immediate feedback when using Jupiter. &lt;br /&gt;&lt;br /&gt;So back to the developers committing broken code to the trunk. &amp;nbsp;We don't want that. &amp;nbsp;We want code that has been reviewed by other developers who are working on similar feature sets to be committed to the trunk. &amp;nbsp;So my question is "How do we setup our branches?". &amp;nbsp;(Keep in mind that we use Subversion)&lt;br /&gt;&lt;br /&gt;We are currently thinking of having two lines. &amp;nbsp;The trunk, which contains "stable" code that developers can branch off of. &amp;nbsp;In this context, stable means that the feature is complete and somewhat tested. &amp;nbsp;There will be bugs, but we will iterate through them as we go.&lt;br /&gt;&lt;br /&gt;The second line will be our feature branch. &amp;nbsp;The feature branch can have many other branches contained in it. &amp;nbsp;This is where developers can work on their specific features without touching the main line. &amp;nbsp;In FLRN (Fix Later Release Now in case you forgot) developers would wait on committing their features because they were broken, or there would be a lot of rippling changes throughout the system, or because they wouldn't have any documentation which would cause our build to become unstable. &amp;nbsp;Now if we force developers to use the "Feature Branch" they can commit at any time without fear of breaking anyone else.&lt;br /&gt;&lt;br /&gt;Once the developers are ready to merge to the trunk, we can have other developers review their code. &amp;nbsp;This seems like a good idea. &amp;nbsp;Developers can commit early and often without breaking anyone. &amp;nbsp;They can get their code reviewed by their peers. &amp;nbsp;Everyone is happy.&lt;br /&gt;&lt;br /&gt;Perhaps in the make believe place of No Bugs Land.&lt;br /&gt;&lt;br /&gt;Complications arise when more than one developer is touching the same file. &amp;nbsp;What if two developers finish their features but are using the same file. &amp;nbsp;Do we merge their changes? &amp;nbsp;Can we combine their features into a separate branch and then create a review? &amp;nbsp;That might work.&lt;br /&gt;&lt;br /&gt;We definately need some review and merging management. &amp;nbsp;The problem we want to avoid is having a backlog of reviews. &amp;nbsp;For example, Developer A might be working on file X. &amp;nbsp;He finishes and requests a review for it. &amp;nbsp;Later that day Developer B finishes his feature which includes file X. &amp;nbsp;He requests a review for his code. &amp;nbsp;We now have a problem because there are two revisions of file X to review. &amp;nbsp;If we don't merge both Developer A and Developer B's changes, we will have to review Developer A's changes, merge the changes, then review Developer B's changes. &amp;nbsp;I feel the Horribleness!&lt;br /&gt;&lt;br /&gt;I'm wondering how people handle different code baselines in their development environments. &amp;nbsp;I'm going to have to do a bit of research, but this article by Jeff Atwood is a good starting point:&amp;nbsp;&lt;a href="http://www.codinghorror.com/blog/archives/000968.html"&gt;Coding Horror: Software Branching&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;(Edit: It seems that Jeff Atwood got his information from&amp;nbsp;&lt;a href="http://www.cmcrossroads.com/bradapp/acme/branching/"&gt;Streamed Lines: Branching Patterns for Software Development&lt;/a&gt;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-4117536455850125205?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/4117536455850125205/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=4117536455850125205' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/4117536455850125205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/4117536455850125205'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2009/12/baselines-branching-and-reviews.html' title='Baselines, Branching and Reviews!'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-5016843333831403136</id><published>2009-11-19T08:07:00.003-10:00</published><updated>2010-01-10T12:54:03.240-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life Hacking'/><title type='text'>I am Japanese.  Use the Library.</title><content type='html'>Do you remember the old Hawaii State Public Library Commericial where kids would say?&lt;br /&gt;&lt;blockquote&gt;I am Hawaiian Chinese. &amp;nbsp;I am Hawaiian Portuguese. &amp;nbsp;Please use the library.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Well I'm not Hawaiian, but&amp;nbsp;I've decided that I'm going to give the library a chance. &amp;nbsp;Up until this point, I told myself that I don't want to use the library. &amp;nbsp;It's such a hassle. &amp;nbsp;Waste of time, energy, resources, and space.&lt;br /&gt;&lt;br /&gt;I've been reading in personal finance blogs like the&amp;nbsp;&lt;a href="http://www.thesimpledollar.com/"&gt;The Simple Dollar&lt;/a&gt;&amp;nbsp;about the benefits of using the library. A few of my friends have started or are already using the library. &amp;nbsp;One of even suggested I help to improve the library's borrow/renewal web UI. &amp;nbsp;An interesting side project.&lt;br /&gt;&lt;br /&gt;But I had my doubts. &lt;br /&gt;&lt;ul&gt;&lt;li&gt;I know they don't carry the latest technology books&lt;/li&gt;&lt;li&gt;Driving to and from the library sucks&lt;/li&gt;&lt;li&gt;Will they have the book I'm looking for?&lt;/li&gt;&lt;li&gt;I really like to write in my books&lt;/li&gt;&lt;li&gt;I'm one of those people that have to have to book just in case there is that one time I _really_ want to find something in a book I bought 5 years ago.&lt;/li&gt;&lt;li&gt;I bet the hours are inconvenient.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;So before I even went down to the library I checked their hours:&amp;nbsp;&lt;a href="http://www.librarieshawaii.org/locations/hours.htm"&gt;Hawaii Public State Library Hour of Operation&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Woah. &amp;nbsp;They have decent hours. &amp;nbsp;They are even open till 8 PM on some days. &lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So I headed down one day after work.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here is what I found:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;If my book is at another branch, I can submit a request online to ship the book to the branch of my choosing.&lt;/li&gt;&lt;li&gt;It really doesn't take that much time to drive to the library.&lt;/li&gt;&lt;li&gt;The selection isn't the greatest.&lt;/li&gt;&lt;li&gt;They still don't carry the latest technology books. &amp;nbsp;&lt;/li&gt;&lt;li&gt;I still can't write in the books.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;I was quite pleased with my library visit. &amp;nbsp;I had to purchase a new library card because I must have thrown my old card away. &amp;nbsp;When was I ever going to use the library again? &amp;nbsp;So that was $10. &amp;nbsp;It was funny because I had a .90 fine... from 2001. &amp;nbsp;It's been 8 years and they still kept a record of returning a book late. &amp;nbsp;Damn them.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;But it's okay. &amp;nbsp;I spent $10.90 on my library visit, but I get to have an unlimited amount of books. &amp;nbsp;The money I save from not having to buy books definitely out weighs the time it takes to drive to and from the library. &amp;nbsp;If I reserve my books online I can further reduce the time I spend at the library. &amp;nbsp;Not to mention that I'm saving space because I don't have to store the books. &amp;nbsp;After years of buying books, I notice that my room is cluttered with books that I've read once.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Even if the library doesn't have the technical books that will keep me up to date, I still can purchase those books online at Amazon. &amp;nbsp;I add highlighting, notes to my tech books so it's not a huge deal to buy them. &amp;nbsp;I'm thinking I should try to buy them used instead of new. &amp;nbsp;I don't need the new, clean version of the book. &amp;nbsp;The content is the same.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The library is awesome!&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;It's too bad they don't have any funding. &amp;nbsp;When I checked out my books, the librarian handed me a flier that told me about their furlough days. &amp;nbsp;On the other side of the flier there was an article about a fundraiser to support the library. &amp;nbsp;They are obviously in a financial bind.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;I'm not sure how to help them. &amp;nbsp;I think donations would help the problem, but would it fix it? &amp;nbsp;Maybe if more people used the library? &amp;nbsp;Who knows, but I'm hoping the library never goes away.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-5016843333831403136?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/5016843333831403136/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=5016843333831403136' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/5016843333831403136'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/5016843333831403136'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2009/11/i-am-japanese-use-library.html' title='I am Japanese.  Use the Library.'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-6645883727965120632</id><published>2009-11-14T10:58:00.000-10:00</published><updated>2010-12-12T06:23:15.046-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life Hacking'/><title type='text'>Paying Myself First</title><content type='html'>Wow.  My last post was back in May.  It's been a while since I've made time for this blog thing, but it's been a good sabbatical. &amp;nbsp;I'm reemerging on the interweb for the third time and hopefully here to stay. &amp;nbsp;I want to stay committed and vigilant, as we all know how difficult it is to be an active blogger. &amp;nbsp;My plan of posting twice a week turned into posting once a week, which then turned into not posting. &amp;nbsp;Plan failure. &amp;nbsp;But I have a new and improved plan!&lt;br /&gt;&lt;br /&gt;One day I had a 6 AM gym session with a friend. &amp;nbsp;It changed my life. &amp;nbsp;My schedule used to look like this:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;9:00 AM &amp;nbsp; Wake up&lt;/li&gt;&lt;li&gt;9:05 AM &amp;nbsp; Go to Work&lt;/li&gt;&lt;li&gt;7:00 PM &amp;nbsp; &amp;nbsp;Read blogs, Side Project Work&lt;/li&gt;&lt;li&gt;10:00 PM &amp;nbsp;Hit the Gym&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;By the time I started working on my personal improvement tasks I would be tired and unfocused. I was amazed at how one morning gym session would make the rest of my day was incredible. &amp;nbsp;I felt great. &amp;nbsp;I didn't need to have 6 cups of coffee or some sugar to get through the day. &amp;nbsp;My metabolism was in overdrive. &amp;nbsp;I couldn't believe how awesome it was to start your day off with a workout.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So I changed my schedule:&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;5:45 AM &amp;nbsp;Hit the Gym&lt;/li&gt;&lt;li&gt;7:45 AM &amp;nbsp;Read blogs, Learn some cool stuff&lt;/li&gt;&lt;li&gt;7:00 PM &amp;nbsp; Watch video blogs, listen to podcasts, take a break&lt;/li&gt;&lt;li&gt;10:30 PM Sleep&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Then one morning I found a blog that talked about&amp;nbsp;&lt;a href="http://www.getrichslowly.org/blog/2008/06/16/personal-finance-made-easy-pay-yourself-first/"&gt;Paying Yourself First&lt;/a&gt;. &amp;nbsp;What an excellent idea. &amp;nbsp;I've always struggled with spending too much at the beginning of the month or when I get my paycheck. &amp;nbsp;This is a great idea. &amp;nbsp;Pay myself first. &lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Light Bulb.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My updated scheduled:&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;5:45 AM &amp;nbsp;Hit the Gym&lt;/li&gt;&lt;li&gt;&lt;span style="color: red;"&gt;7:45 AM &amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style="color: red;"&gt;Write a blog&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;&lt;li&gt;7:00 PM &amp;nbsp;&amp;nbsp;Read blogs, Learn some cool stuff, Work on side projects,&amp;nbsp;Watch video blogs, Listen to podcasts, Take a Break&lt;/li&gt;&lt;li&gt;10:30 PM Sleep&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;So my new goal is to do some writing before I head to work. &amp;nbsp;I don't have to write a complete blog or always try to finish existing blog. &amp;nbsp;My goal is to &lt;i&gt;jot down my ideas&lt;/i&gt;. &amp;nbsp;If I can write down what I'm thinking about I should be able to get a blog out every week.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I honestly rather do my side project hacking in the morning when I'm the freshest, but I don't have enough time between my gym session and when I need to leave for the job. &amp;nbsp;Once the tasking at work calms down a bit, I should be able to resume my Rails hacking.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A while ago I read an article by Sid Savara,&amp;nbsp;&lt;a href="http://sidsavara.com/personal-development/more-important-than-money-paying-myself-first-with-my-time"&gt;Paying Myself First With My Time&lt;/a&gt;. &amp;nbsp;I didn't buy into it then. &amp;nbsp;How could I wake up early and start my day like that? &amp;nbsp;Crazy Talk.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;_Best Idea Ever_.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;ul&gt;&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-6645883727965120632?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/6645883727965120632/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=6645883727965120632' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/6645883727965120632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/6645883727965120632'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2009/11/paying-myself-first.html' title='Paying Myself First'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-3782805102050533443</id><published>2009-05-25T16:47:00.002-10:00</published><updated>2010-01-10T12:53:03.202-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Books and Reading'/><title type='text'>Book Progress</title><content type='html'>&lt;span class="Apple-style-span"   style=" color: rgb(51, 51, 51);  line-height: 19px; font-family:Verdana;font-size:13px;"&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: 13px; "&gt;&lt;ol style="clear: both; "&gt;&lt;li style="list-style-type: none; list-style-position: initial; list-style-image: initial; padding-left: 14px; margin-bottom: 3px; background-image: url(http://www.blogblog.com/tictac/tictac_orange.gif); background-repeat: no-repeat; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; background-position: 0% 6px; "&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;a href="http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1240182239&amp;amp;sr=8-1" style="color: rgb(102, 153, 204); text-decoration: none; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Clean Code: A Handbook of Agile Software Craftsmanship (Robert C. Martin Series)&lt;/span&gt;&lt;/a&gt; &lt;span class="Apple-style-span" style="font-size: 13px; "&gt;&lt;b&gt;(Finished!)&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="list-style-type: none; list-style-position: initial; list-style-image: initial; padding-left: 14px; margin-bottom: 3px; background-image: url(http://www.blogblog.com/tictac/tictac_orange.gif); background-repeat: no-repeat; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; background-position: 0% 6px; "&gt;&lt;a href="http://www.amazon.com/Outliers-Story-Success-Malcolm-Gladwell/dp/0316017922/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1240182373&amp;amp;sr=8-1" style="color: rgb(102, 153, 204); "&gt;Outliers: The Story of Success&lt;/a&gt; &lt;b&gt;(Finished!)&lt;/b&gt;&lt;/li&gt;&lt;li style="list-style-type: none; list-style-position: initial; list-style-image: initial; padding-left: 14px; margin-bottom: 3px; background-image: url(http://www.blogblog.com/tictac/tictac_orange.gif); background-repeat: no-repeat; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; background-position: 0% 6px; "&gt;&lt;a href="http://www.amazon.com/Design-Patterns-Object-Oriented-Addison-Wesley-Professional/dp/0201633612/ref=sr_1_104?ie=UTF8&amp;amp;s=books&amp;amp;qid=1240182559&amp;amp;sr=1-104" style="color: rgb(102, 153, 204); text-decoration: none; "&gt;Design Patterns: Elements of Reusable Object-Oriented Software (Addison-Wesley Professional Computing Series)&lt;/a&gt; (In Progress!)&lt;/li&gt;&lt;li style="list-style-type: none; list-style-position: initial; list-style-image: initial; padding-left: 14px; margin-bottom: 3px; background-image: url(http://www.blogblog.com/tictac/tictac_orange.gif); background-repeat: no-repeat; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; background-position: 0% 6px; "&gt;&lt;a href="http://www.amazon.com/House-Leaves-Mark-Z-Danielewski/dp/0375703764/ref=wl_it_dp?ie=UTF8&amp;amp;coliid=IZORSVAKVHUDX&amp;amp;colid=1ZWZWKG46EVL7" style="color: rgb(102, 153, 204); text-decoration: none; "&gt;House of Leaves&lt;/a&gt;&lt;/li&gt;&lt;li style="list-style-type: none; list-style-position: initial; list-style-image: initial; padding-left: 14px; margin-bottom: 3px; background-image: url(http://www.blogblog.com/tictac/tictac_orange.gif); background-repeat: no-repeat; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; background-position: 0% 6px; "&gt;&lt;a href="http://www.amazon.com/Mentoring-Tao-Giving-Receiving-Wisdom/dp/0062512501/ref=wl_it_dp?ie=UTF8&amp;amp;coliid=I11UI5CLRK7I9C&amp;amp;colid=1ZWZWKG46EVL7" style="color: rgb(102, 153, 204); text-decoration: none; "&gt;Mentoring: The Tao of Giving and Receiving Wisdom&lt;/a&gt;&lt;/li&gt;&lt;li style="list-style-type: none; list-style-position: initial; list-style-image: initial; padding-left: 14px; margin-bottom: 3px; background-image: url(http://www.blogblog.com/tictac/tictac_orange.gif); background-repeat: no-repeat; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; background-position: 0% 6px; "&gt;&lt;a href="http://www.amazon.com/Bro-Code-Barney-Stinson/dp/143911000X/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1240182318&amp;amp;sr=8-1" style="color: rgb(102, 153, 204); "&gt;The Bro Code&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I enjoyed reading Clean Code.  The best part about it was it changed my outlook on method and class construction.  My code is &lt;i&gt;_a lot_&lt;/i&gt; cleaner.  The last chapter in the book, "Smells and Heuristics", is something all developers should read.  I plan on giving it to developers on my company's engineering team.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next on the reading list is the GoF book.  It's interesting to come back to a book years later. A quick scan through the patterns shows me that I have forgotten a bunch.  I can't wait to get through it again.  The GoF book is great.  I'll write more as a I plow through it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Also Google Summer of Code is ramping up.  Time to get to work!&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-3782805102050533443?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/3782805102050533443/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=3782805102050533443' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/3782805102050533443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/3782805102050533443'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2009/05/book-progress.html' title='Book Progress'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-6797352588476925120</id><published>2009-05-03T14:02:00.000-10:00</published><updated>2010-01-06T08:04:06.824-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Code Improvement'/><title type='text'>Cleaning up my code</title><content type='html'>&lt;p style="clear: both"&gt;I've been reading &lt;a href="http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882"&gt;Clean Code&lt;/a&gt; that I listed on my list books to get through. I've read a bunch of code improvement books, but there were a couple chapters that I've gone through that I liked so far.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Writing clear functions&lt;/strong&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;We've all heard that we should write functions that only do one thing. But how many of us really do it? Here is an example of how I used to write code.&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;&lt;strong&gt;public void mouseClicked(MouseEvent event) {&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt; // Let's do something on a primary button double-click&lt;br /&gt; if (event.getButton() == MouseEvent.BUTTON1 &amp;amp;&amp;amp; event.getClickCount() == 2) { &lt;br /&gt; // do something&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;Inline comments are evil. If they aren't updated, which can happen frequently, why not write a method that can't lie. What I should be doing is writing methods with clear names that inform developers of my intent. &lt;/p&gt;&lt;p style="clear: both"&gt;Inline comments can be out of date, in the wrong place, or just plain wrong. Method names get updated automatically if you refactor your code and if the method name is wrong, the compiler let's you know.&lt;/p&gt;&lt;p style="clear: both"&gt;Here is how the code should look:&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;&lt;strong&gt;public void mouseClicked(MouseEvent event) {&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;if (this.isPrimaryButtonDoubleClick(event)) {&lt;br /&gt;// do something&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;public boolean isPrimaryButtonDoubleClick(MouseEvent event){&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt; return event.getButton() == MouseEvent.BUTTON1 &amp;amp;&amp;amp; event.getClickCount() == 2;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;The code is trivial, but when your methods and classes get larger, readability and intent become increasingly more important. The longer developers have to stop and think about what your code is doing, the more it needs to be refactored. Here is what a developer might be thinking when they read my old code example:&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;em&gt;"We want to do something when BUTTON1 is pressed and we click twice". "What is MouseEvent.BUTTON1"? *Stop to read some java docs* "So we get the click count twice. Oh thats a double-click!"&lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;You might think that someone should immediately associate the clause to a double-click, but you might have to stop and think if you aren't familiar with the author's style or are just getting into Java. Context switching causes breaks in concentration. Not good.&lt;/p&gt;&lt;p style="clear: both"&gt;In the refactored code, the developer can get to mouseClicked() and read once, "We want to do something when the user's primary button is double-clicked". No context switching, no breaks in concentration. Good.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Writing clean comments&lt;/strong&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;The next thing I read that was interesting was method level comments. Here is an example of my old method level comments that I would write to pass &lt;a href="http://checkstyle.sourceforge.net/"&gt;Checkstyle&lt;/a&gt; and document what my method exposes:&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;/**&lt;br /&gt;* Returns true if the primary button is double-clicked.&lt;br /&gt;* @param event the event wrapping the mouse state information&lt;br /&gt;* @return true if the primary button is clicked, false if not.&lt;br /&gt;*/&lt;br /&gt;&lt;strong&gt;public void isPrimaryButtonDoubleClick(MouseEvent event){&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;return event.getButton() == MouseEvent.BUTTON1 &amp;amp;&amp;amp; event.getClickCount() == 2;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;There are three areas of duplication. First, my initial comment duplicates what the method name states. Second, the @return tag says the same thing. Finally, the method signature clearly states what my method does and returns. Since checkstyle requires a @return tag, here is my refactored method comments:&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;/**&lt;br /&gt;* @param event the event wrapping the mouse state information.&lt;br /&gt;* @return true if the primary button is clicked, false if not.&lt;br /&gt;*/&lt;br /&gt;&lt;strong&gt;public boolean isPrimaryButtonDoubleClick(MouseEvent event){&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;return event.getButton() == MouseEvent.BUTTON1 &amp;amp;&amp;amp; event.getClickCount() == 2;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;I removed the initial comment to reduce the comment duplication. If the method had no parameters, the code will be reduced further:&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;/** @return true if the primary button is clicked, false if not. */&lt;br /&gt;&lt;strong&gt;public boolean isPrimaryButtonDoubleClick(){&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;return this.event.getButton() == MouseEvent.BUTTON1 &amp;amp;&amp;amp; this.event.getClickCount() == 2;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;It passes checkstyle and reduces the amount of comment duplication. I like it.&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-6797352588476925120?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/6797352588476925120/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=6797352588476925120' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/6797352588476925120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/6797352588476925120'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2009/05/cleaning-up-my-code.html' title='Cleaning up my code'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-5131143785493889940</id><published>2009-04-22T22:38:00.008-10:00</published><updated>2009-04-25T23:33:27.469-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hackystat'/><title type='text'>Hackystat + Ivy = Win?</title><content type='html'>&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;It's Google Summer of Code time so I checked out Hackystat and tried to build it from source. A couple hours later, my Hackystat development environment was setup. Ouch.&lt;/p&gt;&lt;p style="clear: both"&gt;The hardest part about setting up my environment were all of the tool dependencies. To build &lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://code.google.com/p/hackystat-utilities/"&gt;hackystat-utilities&lt;/a&gt;, &lt;a href="http://code.google.com/p/hackystat-sensorbase-uh/"&gt;hackystat-sensorbase-uh&lt;/a&gt;, &lt;a href="http://code.google.com/p/hackystat-sensor-shell/"&gt;hackystat-sensorshell&lt;/a&gt;, I needed to the following libraries:&lt;/p&gt;&lt;p style="clear: both; text-align: left;clear: both; text-align: left;"&gt;&lt;img src="http://2.bp.blogspot.com/_gZ-LJtj9hxw/SfAz36BInkI/AAAAAAAAApE/sNlLCtKBYyw/s320/Picture+1.png" height="184" width="201" style=" text-align: center; display: block; margin: 0 auto 10px;" /&gt;&lt;br /&gt; Then I needed to set the following environmental variables:&lt;ol style="clear: both"&gt;&lt;li&gt;HACKYSTAT_&lt;em&gt;UTILITIES_&lt;/em&gt;HOME&lt;/li&gt;&lt;li&gt;HACKYSTAT_&lt;em&gt;SENSORBASE_&lt;/em&gt;HOME&lt;/li&gt;&lt;li&gt;JUNIT_&lt;em&gt;HOME&lt;/em&gt;&lt;/li&gt;&lt;li&gt;FINDBUGSHOME&lt;br /&gt;&lt;/li&gt;&lt;li&gt;APACHE&lt;em&gt;JCS&lt;/em&gt;HOME&lt;br /&gt;&lt;/li&gt;&lt;li&gt;APACHE&lt;em&gt;COMMONS&lt;/em&gt;LOGGING&lt;em&gt;HOME&lt;br /&gt;&lt;/em&gt;&lt;/li&gt;&lt;li&gt;RESTLETHOME&lt;br /&gt;&lt;/li&gt;&lt;li&gt;JAVAMAIL&lt;em&gt;HOME&lt;br /&gt;&lt;/em&gt;&lt;/li&gt;&lt;li&gt;DERBYHOME&lt;br /&gt;&lt;/li&gt;&lt;li&gt;CHECKSTYLE&lt;em&gt;HOME&lt;br /&gt;&lt;/em&gt;&lt;/li&gt;&lt;li&gt;EMMAHOME&lt;br /&gt;&lt;/li&gt;&lt;li&gt;HACKYSTAT&lt;em&gt;ANTSENSORS&lt;/em&gt;HOME&lt;br /&gt;&lt;/li&gt;&lt;li&gt;ANT&lt;em&gt;ARGS&lt;br /&gt;&lt;/em&gt;&lt;/li&gt;&lt;li&gt;PMDHOME&lt;/li&gt;&lt;/ol&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;As a developer it would be cool if I could check out the source files and run a couple of ant targets to retrieve the dependencies.&lt;/p&gt;&lt;p style="clear: both"&gt;At work I've been experimenting with &lt;a href="http://ant.apache.org/ivy/"&gt;Ivy&lt;/a&gt; to download my project's dependencies. I download the dependencies to the project's library directory via an Ivy ant task and I'm done. There is no need to configure any environmental variables because the build script knows the "Home Folder" of the external libraries.&lt;/p&gt;&lt;p style="clear: both"&gt;I checked on the &lt;a href="http://groups.google.com/group/hackystat-dev"&gt;Hackydev Mailing List&lt;/a&gt; and found a thread started by Aaron a long time ago called &lt;a href="http://groups.google.com/group/hackystat-dev/browse_thread/thread/ce03a4ae3283fd8/f8cbdf93fcb277b0?lnk=gst&amp;amp;q=Ivy+#f8cbdf93fcb277b0"&gt;Ivy for Java hackystat dependency management&lt;/a&gt;.&lt;/p&gt;&lt;p style="clear: both"&gt;I think it would be really useful if it were easiser for new developers to check out the source and start hacking. Integrating Ivy into Hackystat's build system might be a useful project and help to reduce Hackystat's hacking entry barrier.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-5131143785493889940?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/5131143785493889940/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=5131143785493889940' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/5131143785493889940'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/5131143785493889940'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2009/04/hackystat-ivy-win.html' title='Hackystat + Ivy = Win?'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_gZ-LJtj9hxw/SfAz36BInkI/AAAAAAAAApE/sNlLCtKBYyw/s72-c/Picture+1.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-2389870542784235804</id><published>2009-04-19T12:50:00.002-10:00</published><updated>2010-01-10T12:53:03.202-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Books and Reading'/><title type='text'>Book Reading Queue</title><content type='html'>&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;I've been slacking on the blogging and the reading so to get motivated I'm posting a book queue.&lt;/p&gt;&lt;ol style="clear: both"&gt;&lt;br /&gt;  &lt;li&gt;&lt;a href="http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1240182239&amp;amp;sr=8-1" style="text-decoration: none;"&gt;Clean Code: A Handbook of Agile Software Craftsmanship (Robert C. Martin Series)&lt;/a&gt;&lt;/li&gt;  &lt;li&gt;&lt;a href="http://www.amazon.com/Outliers-Story-Success-Malcolm-Gladwell/dp/0316017922/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1240182373&amp;amp;sr=8-1"&gt;Outliers: The Story of Success&lt;/a&gt; (Finish reading it.)&lt;/li&gt;  &lt;li&gt;&lt;a href="http://www.amazon.com/Design-Patterns-Object-Oriented-Addison-Wesley-Professional/dp/0201633612/ref=sr_1_104?ie=UTF8&amp;amp;s=books&amp;amp;qid=1240182559&amp;amp;sr=1-104" style="text-decoration: none;"&gt;Design Patterns: Elements of Reusable Object-Oriented Software (Addison-Wesley Professional Computing Series)&lt;/a&gt;&lt;/li&gt;  &lt;li&gt;&lt;a href="http://www.amazon.com/House-Leaves-Mark-Z-Danielewski/dp/0375703764/ref=wl_it_dp?ie=UTF8&amp;amp;coliid=IZORSVAKVHUDX&amp;amp;colid=1ZWZWKG46EVL7" style="text-decoration: none;"&gt;House of Leaves&lt;/a&gt;&lt;/li&gt;  &lt;li&gt;&lt;a href="http://www.amazon.com/Mentoring-Tao-Giving-Receiving-Wisdom/dp/0062512501/ref=wl_it_dp?ie=UTF8&amp;amp;coliid=I11UI5CLRK7I9C&amp;amp;colid=1ZWZWKG46EVL7" style="text-decoration: none;"&gt;Mentoring: The Tao of Giving and Receiving Wisdom&lt;/a&gt;&lt;/li&gt;  &lt;li&gt;&lt;a href="http://www.amazon.com/Bro-Code-Barney-Stinson/dp/143911000X/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1240182318&amp;amp;sr=8-1"&gt;The Bro Code&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;p style="clear: both"&gt;My goal is to get back to reading a book a month. I've read the GoF book already, but it's time to refresh my design patterns. I read it over 3 years ago, so I will probably have a new understanding of when/where to use certain patterns.&lt;/p&gt;&lt;p style="clear: both"&gt;I've also changed my reading to include fun and non-technical books. Hopefully that will keep me reading. I've noticed that it's a drag to read technical books all the time. The books are interesting, but my mind needs something new every now and then.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-2389870542784235804?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/2389870542784235804/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=2389870542784235804' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/2389870542784235804'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/2389870542784235804'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2009/04/book-reading-queue.html' title='Book Reading Queue'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-5565971808425422362</id><published>2008-11-16T22:58:00.002-10:00</published><updated>2009-04-25T10:18:08.138-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='openmbp'/><title type='text'>Openmbp groups</title><content type='html'>&lt;p&gt;&lt;font size="2"&gt;&lt;font style="font-style: italic;" face="verdana"&gt;"Hashtags are a community-driven convention for adding additional context and metadata to your tweets. They're like tags on Flickr, only added inline to your post. You create a hashtag simply by prefixing a word with a hash symbol:&lt;/font&gt; &lt;em style="font-family: verdana; font-style: italic;"&gt;#hashtag&lt;/em&gt;&lt;/font&gt;&lt;font style="font-style: italic;" face="verdana"&gt;&lt;font size="2"&gt;." - http://twitter.pbwiki.com/Hashtags&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font face="verdana"&gt;&lt;font size="1"&gt;This past week we spent working out the kinks of our in-house testing of openmbp's basic features like posting, following, favorites, account information. We've got a bug tracker up and soon it will be filled with tons of things to work on. With the in-house test continuing for a while, I'm turning my attention to post grouping.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Twitter is going to role out groups sometime in the future and we are going to start working on getting grouping into openmbp. We are probably going to use hashtags to mark if a topic should be categorized.&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-5565971808425422362?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/5565971808425422362/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=5565971808425422362' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/5565971808425422362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/5565971808425422362'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2008/11/openmbp-groups.html' title='Openmbp groups'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-3586994945810844202</id><published>2008-10-19T22:55:00.003-10:00</published><updated>2010-12-12T07:31:41.543-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life Performance'/><title type='text'>Periodic Resume Updates</title><content type='html'>&lt;a href="http://www.randsinrepose.com/archives/2007/02/25/a_glimpse_and_a_hook.html"&gt;Rands&lt;/a&gt; says that you should update your resume every 6 months regardless if you are looking for a new job or not. I haven't updated my resume in a couple of years, so this was a pretty interesting exercise. Updating your resume let's you figure out what you've done and where you are heading. So that's what I did tonight. Let's see what I learned...&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;What I did:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;I spent a lot of time working on Hackystat. This is a good thing since I learned about Java, Ant, XML, JAXB, Postgres, and SQL.&lt;br /&gt;&lt;br /&gt;I had one line about my work project. I'm not sure if that's a good thing, but I have learned quite a bit from my work experience.&lt;br /&gt;&lt;br /&gt;I worked &lt;em&gt;A LOT&lt;/em&gt; on the software development platform at work. My work experience section for my job is mostly about setting up out continious integration build server, working on our Ant build scripts, code reviews and mentoring interns. I was debating if I should put some information on trying to start a Wiki usage movement at work, but I decided against it since it didn't really pan out.&lt;br /&gt;&lt;br /&gt;I was actually surprised that I had enough "Volunteering" items to put on my resume. I have to thank &lt;a href="http://kagawaa.blogspot.com/"&gt;Aaron&lt;/a&gt; for that one.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Where I'm going:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;This one was a tough one. I'm looking at my resume and it isn't clear where I'm headed. It seems that I'm interested in hacking for fun. Maybe mentor students and help developers grow or something. Looking at my resume I don't get that "ah hah" that's where he's headed.&lt;br /&gt;&lt;br /&gt;But there's hope!&lt;br /&gt;&lt;br /&gt;Even though &lt;a href="http://github.com/jianshi/openmbp/tree/master"&gt;OpenMBP&lt;/a&gt; isn't on my resume, I'm pretty sure it's the direction I'm headed. I want to build software that's useful to people. I want them to enjoy using software that I've been working on. Development on that project is starting to ramp up so I hopefully in the next resume revision I'll be able to add a new OpenMBP resume item with Ruby on Rails, Git, and an URL to the released version of our software. I think that's a good goal to have.&lt;br /&gt;&lt;br /&gt;I really feel that I haven't done enough in the past two years. Before I started updating my resume, I was thinking that I would have lots of things to add. It turns out that I didn't really add all that much. I added some things about my work project, extra activities like Hackystat and volunteering, but it all felt a bit lacking. I couldn't add anything about the books and blogs I'm reading, the blogs I'm writing. I guess resumes are a way for companies to weed through people and find who they &lt;em&gt;really&lt;/em&gt; want to interview. It looks like I'm going to have to work harder in the next six months to put things on my reusme that make me stand out.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://austenito.blogspot.com/2008/09/interesting-perspective-on-kaizen.html"&gt;Revolutionary Improvement&lt;/a&gt; perhaps?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-3586994945810844202?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/3586994945810844202/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=3586994945810844202' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/3586994945810844202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/3586994945810844202'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2008/10/periodic-resume-updates.html' title='Periodic Resume Updates'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-152615481167995828</id><published>2008-10-16T22:57:00.002-10:00</published><updated>2010-01-10T12:54:03.243-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life Hacking'/><title type='text'>Counter-Blog:  Path to Awesomeness</title><content type='html'>Jason is an intern at the company I work for and he wrote his take on the &lt;a href="http://leongj.blogspot.com/2008/10/path-to-awesomeness.html"&gt;Path to Awesomeness&lt;/a&gt;.  As a mentor, I hope to be helping him along his awesome journey.  I decided to write a counter-blog that talks about how I'm helping him along the way.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Learn bout real projects&lt;/span&gt;:  Requirements, customers, deadlines.  Ah the joy of real projects.  The classroom environment tries to provide these things, but it doesn't compare to working on a real project.  We put our interns on existing projects that will expose them to all of stresses and fun times of a real world project.  Right now Jason is working on a real world project and doing quite well.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Learn about research&lt;/span&gt;: The first day that Jason started, I gave him an article on &lt;a href="http://www.catb.org/~esr/faqs/smart-questions.html"&gt;How To Ask Questions The Smart Way&lt;/a&gt;.  Since that day he has never asked me another dumb question ;)  But as &lt;a href="http://kagawaa.blogspot.com/"&gt;Aaron&lt;/a&gt; pointed out in his comment, the research skill that we want to impress on our interns is learning how to research.  My goal is to expose Jason to a wide variety of interesting science topics which may spark some interest and maybe some gradute research of his own.&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Learn about software development processes&lt;/span&gt;: I'm concentraing very hard in this area to teach him about the entire software process.  On his journey, I want to him to be fluent in software tools such as Eclipse, JUnit, Checkstyle, Findbugs, and other static analysis tools.   I'm focusing on his code quality and implementation with frequent code reviews using &lt;a href="http://code.google.com/p/jupiter-eclipse-plugin/"&gt;Jupiter&lt;/a&gt;. I'm trying to get him to start off with good habits by commiting early and often.  He got familiar with Hudson, our continous integration build server, by adding his own module to the integration build.  My goal is for Jason to absorb as much as possible by working closely with the developers on the project team.&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Learn how to learn&lt;/span&gt;: Figuring out problems on your own is a very important skill to have.  As everyone knows, Google is your friend.  This might be the most important skill for to learn because it will help you throughout your entire career.  Basically, learning how to learn means trying to figure out a problem on your own.  If you still don't understand what is going on, think of some educated questions and ask your peers.  They will be more than happy to help if you have invested some time on the problem.  This item is a must for all interns to understand.  Luckily, Jason picked this one up on his first day.&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Learn how to increase marketability&lt;/span&gt;: Jason wasn't too sure on this item.  We want our interns to be wanted by companies in the high-tech industry.  Our goal is to increase the skills of our interns for their benefit rather than our own company interests.  By increasing our interns value, they in turn increase our company's value.  Marketability means having something other companies want, like your l33t skillz.  We want everyone to see that you outperform everyone else at the same level.  We want you to stand out and be awesome amongst your peers.  How we want to accomplish this is by exposing our interns to as wide array of work experiences that they can't get in school, but also focusing on key areas that we believe will help them succeed and stand out.&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Learn about the industry&lt;/span&gt;:  Finally, we want to our interns to know what's out there.  What other types of work is out their in the government and private sectors.  By showing them what type of work is available, they can make a choice on their career path.  Hopefully that career path involves our company, but we want our interns to enjoy their career.  We want to help them succeed in their career and life even if that means saying goodbye.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-152615481167995828?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/152615481167995828/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=152615481167995828' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/152615481167995828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/152615481167995828'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2008/10/counter-blog-path-to-awesomeness.html' title='Counter-Blog:  Path to Awesomeness'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-8491285595886239298</id><published>2008-09-14T12:13:00.004-10:00</published><updated>2010-01-10T12:54:03.243-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life Hacking'/><title type='text'>An interesting perspective on Kaizen</title><content type='html'>&lt;div&gt;A couple months back at Java One, I bought a book called &lt;a href="http://www.amazon.com/Think-Better-Innovators-Productive-Thinking/dp/0071494936/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1221430548&amp;amp;sr=8-1"&gt;Think Better, An Innovator's Guide To Productive Thinking&lt;/a&gt;, and forgot about it somewhere in the clutter space that is my bedroom.  I spent this past week nursing an allergic reaction at home so I decided to pop open the book and start reading.  The author &lt;a href="http://www.timhurson.com/"&gt;Tim Hurson&lt;/a&gt; is a thought provoking author giving some excellent examples people living constantly in "reproductive" thinking mode.  Reproductive thinking mode is the that mode our brain goes into to save energy.  We are all guilty of this... A trivial example he gives is waking up in the morning.  You don't think when you wake up in the morning.  If your mornings are like mine you:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Wake up.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Brush your teeth with the same brush strokes.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Put on clothes from the same subset of work clothes.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Get in the car and drive the same way to work.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But have you ever thought about the "why" behind everything you do?  Why do you always brush your teeth in the same direction?  Why do you always put a shirt on first before your pants?  Why cofffee?  Why not tea?  I've simplied the examples, but you can see this translating into other aspects of your life.  Why do you always solve problems in the same way?  On one hand it might be because you are using tried and true patterns that solve the problem in the most efficient way possible.  On the other, you could be locking yourself into the same routine:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;img src="http://2.bp.blogspot.com/_gZ-LJtj9hxw/SM2RLzzXh6I/AAAAAAAAANw/5AI7x6OMtB4/s320/shawshank_prison.jpg" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" border="0" alt="" id="BLOGGER_PHOTO_ID_5246008773026744226" /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'times new roman';"&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: 13px; line-height: 17px; "&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;"Things went on like that for awhile - prison life consists of routine, and then more routine. Every so often, Andy would show up with fresh bruises. The Sisters kept at him - sometimes he was able to fight 'em off, sometimes not. And that's how it went for Andy - that was his routine. I do believe those first two years were the worst for him, and I also believe that if things had gone on that way, this place would have got the best of him" - Red, Shawshank Redemption&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I've only read through half of the book, but Think Better attempts to show you the thinking prison that we are living in.  It's showing why the same routine that let's us feel comfortable will only lead us to living on the &lt;a href="http://blog.guykawasaki.com/2006/01/the_art_of_inno.html"&gt;same curve&lt;/a&gt;.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;All very interesting material.  Thinking is good, routine is bad.  Then I came up to a chapter titled, "Kaizen vs. Tenkaizen".  As you probably know, especially fellow hacker &lt;a href="http://87percent.blogspot.com/"&gt;Ryan K&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Kaizen"&gt;Kaizen&lt;/a&gt; is a Japanese philiosophy that focuses on continous improvment though all aspects of life.  Tim Hurson argues that Kaizen is not always the best philiosophy to live by.  Continous improvement is a great thing if you want to keep chugging along on the same level.  But Tenkaizen, which is a word he made up, means "Good Revolution".  Producing new innovative ideas, rather than reproducing the same old ideas is what can take us to the next level.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A presentation that comes to mind is &lt;a href="http://blog.guykawasaki.com/2007/06/art_of_innovati.html"&gt;Guy Kawasaki's talk&lt;/a&gt; about the ice delievery company, let's call them Quick Ice.  Quick Ice believes in the Kaizen system.  They want to continously improve their ice delievery for their customers.  So they work on continously improving.  They buy faster trucks, send out larger delieveries, develop efficient ways to produce ice, and waste less ice during deliveries.  All of these ideas can come through the philiosophy of Kaizen.  You are continually building upon what you already know.  But the real innovation occurs when someone has the genius idea of letting customers make their own ice!  A refrigerator!  Genius!  Definitely a product of productive rather than reproductive thinking.  Productive thinking lets you jump to that elusive next curve.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'm very interested in the rest of the book.  It has already made an impression on me by making me think about the "why" instead of being a drone and always doing what I've always done.  I've decided that I'm not gonna let routine get the best of me.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-8491285595886239298?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/8491285595886239298/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=8491285595886239298' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/8491285595886239298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/8491285595886239298'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2008/09/interesting-perspective-on-kaizen.html' title='An interesting perspective on Kaizen'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_gZ-LJtj9hxw/SM2RLzzXh6I/AAAAAAAAANw/5AI7x6OMtB4/s72-c/shawshank_prison.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-8770374365709258036</id><published>2008-08-20T20:34:00.004-10:00</published><updated>2008-10-16T23:51:33.405-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hackystat'/><title type='text'>DailyProjectData Queries are hard and complicated</title><content type='html'>I've been spending my night time internet time working on SQL queries that will return records with the DailyProjectData (DPD) information conforming to the &lt;a href="http://code.google.com/p/hackystat-analysis-dailyprojectdata/wiki/RestApiSpecification"&gt;DPD REST API&lt;/a&gt;.  It's been a pretty rough road just getting the queries to work correctly.  Now that I have it working, I have to work on the performance of the queries.   I know that I wrote a query that performs badly, but just getting it to work was pretty tough since I'm a noob with SQL.&lt;br /&gt;&lt;br /&gt;Here is the Code Issue Query that I wrote that returns the amount of code issues for all tools between a specific timeframe for all data.  If you want to get the data for a specific project, there needs to be a sensordata.resource clause in the query.  The records that are returned have columns with the type of code issue, the latest runtime, tool, and the code issue total:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;SELECT issue_type, tool_runtime, tool, sum(cast(issue_count as integer)) from (&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;-- This sub query gets all of the records without grouping the issue counts&lt;/span&gt;&lt;br /&gt;SELECT sensordata_properties.key AS issue_type, sensordata.runtime&lt;br /&gt;AS tool_runtime, sensordata.tool, value AS issue_count FROM "sensordata"&lt;br /&gt;INNER JOIN sensordata_properties ON (sensordata_properties.sensordata_id = sensordata.id) WHERE (sdt_id = (select id FROM SensorDataType where name ~* 'CodeIssue')&lt;br /&gt;AND  tstamp &gt; '2008-08-012T00:00:00.000' AND tstamp &lt; '2008-08-13T00:00:00' AND sensordata_properties.key LIKE 'Type_%' AND sensordata.runtime IN (   &lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;-- This subquery gets the latest runtime&lt;/span&gt;&lt;br /&gt;SELECT latest_runtime FROM (select max(sensordata.runtime)  AS latest_runtime, sensordata.tool FROM "sensordata" INNER JOIN sensordata_properties&lt;br /&gt;ON (sensordata_properties.sensordata_id = sensordata.id) WHERE (sdt_id = (select id&lt;br /&gt;FROM SensorDataType WHERE name ~* 'CodeIssue')  AND tstamp &gt; '2008-08-012T00:00:00.000' AND tstamp &lt; '2008-08-13T00:00:00' AND sensordata_properties.key LIKE 'Type_%')  GROUP BY tool)  AS latest_runtime_query)) &lt;br /&gt;&lt;br /&gt;GROUP BY sensordata.tool, runtime, sensordata_properties.key, value ORDER BY key) AS issue_sum_query GROUP BY issue_type, tool_runtime, tool ORDER BY issue_type  &lt;br /&gt;&lt;br /&gt;Phew.  Thats a big query.  I need to figure out how to refactor the query so I don't repeat the same sub query twice.  These queries are currently being using in rails with the &lt;span style="font-weight: bold;"&gt;find_by_sql&lt;/span&gt; method, but James told me to check out the &lt;span style="font-weight: bold;"&gt;:includes&lt;/span&gt; directive because it is very powerful and can handle what I'm trying to do without using specific SQL&lt;br /&gt;&lt;br /&gt;The good news is that our DPD service implementation is compatible with the Wicket ProjectBrowser that the CSDL team is working on. Right now we can retrieve the raw SensorData and Build DPD summaries.  Hopefully, I'll be able to get the rest of DPD queries working and we can start using the ProjectBrowser at work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-8770374365709258036?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/8770374365709258036/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=8770374365709258036' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/8770374365709258036'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/8770374365709258036'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2008/08/dailyprojectdata-queries-are-hard-and.html' title='DailyProjectData Queries are hard and complicated'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-1398939614704283385</id><published>2008-06-28T16:39:00.002-10:00</published><updated>2008-10-16T23:52:09.605-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hackystat'/><title type='text'>Postgres DbImplementation</title><content type='html'>I think it's been about 2 months, but I've finally got a working, distributable, &lt;a href="http://code.google.com/p/hackystat-sensorbase-postgres/"&gt;Postgres Sensorbase Implementation&lt;/a&gt; up.  If you are interested, you can check out the &lt;a href="http://groups.google.com/group/hackystat-dev/browse_thread/thread/37d1fa69ec602968"&gt;discussion&lt;/a&gt; on the hackystat-dev mailing list.&lt;br /&gt;&lt;br /&gt;The distribution process turned out to be quite interesting because &lt;a href="http://kagawaa.blogspot.com/"&gt;Aaron&lt;/a&gt; and I went through a few iterations on how to package up the binaries without having the user to do too much.  My original idea was to bundle up the sensorbase.jar classes into one big sensorbase-postgres.jar file.  Aaron ended up hating this idea during a chat session of night-time internet (what we call after work fun learning time) .  &lt;br /&gt;&lt;br /&gt;The first reason why bundling jars up is that you are stuck using whatever libraries are included.  If there is a new feature in a later release you either have to 1. Wait till the authors release a new version with the included libraries or 2. Re-jar it yourself.  If the libraries aren't bundled you have the flexibility to swap the jars out.  Hopefully the interfaces haven't changed or else it won't work anyways.&lt;br /&gt;&lt;br /&gt;The second reason is much worse.  If libraries are bundled together and they use different versions of the same dependent library, which version is loaded onto the classpath?  Who knows.  If all depenent libraries are not bundled in jar files, you can't have the class loader clobbering problem because there will only be one version of each library.&lt;br /&gt;&lt;br /&gt;In the end we decided that the binaries of the distribution should consist of 2 files.  The first is the sensorbase.jar and the second is the sensorbase-postgres.jar.  The sensorbase-postgres.jar file contains a very minimal set of classes that are used as a library to the sensorbar.jar file.  Starting up the sensorbase with the Postgres implementation is as easy as starting up the original sensorbase. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;java -jar sensorbase.jar&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-1398939614704283385?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/1398939614704283385/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=1398939614704283385' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/1398939614704283385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/1398939614704283385'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2008/06/postgres-dbimplementation.html' title='Postgres DbImplementation'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-3704966148601199916</id><published>2008-05-28T21:03:00.005-10:00</published><updated>2008-10-16T23:52:25.633-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software Rumblings'/><title type='text'>Text editors are not the answer</title><content type='html'>&lt;span style="font-style: italic;"&gt;Invest the time in mastering development tools, on the other hand, and you won’t want to give these tools up to try a new language —- the development tools are a major part of your productivity. For you, a new language doesn’t have many advantages over other languages anyway, because you haven’t studied how to use language features to make you productive.  &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://jpstup.blogspot.com/"&gt;Josh&lt;/a&gt; recently linked a blog post called, &lt;a href="http://osteele.com/archives/2004/11/ides"&gt;The IDE Divide&lt;/a&gt;, which made me start ranting to everyone I could find online.  If you read it you can clearly see that Oliver Steele is an ultra-biased language maven.  I don't understand how he can put people into 2 buckets, either you learn languages feature and are considered a pro-hacker or you use IDEs and suck.  He honestly believes in using text editors because you can code anything.  I could code using a typewriter and achieve the same effect.&lt;br /&gt;&lt;br /&gt;In his diagrams, he shows that you have higher productivity gains if you use a text editor and learn language features rather than learning an IDE and not as much language features.  I have two issues with that:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;IDEs don't code for you, unless you use Visual Studio (says Josh).  You still have to learn the intricacies of the language.  Choosing an IDE doesn't lock you into a language.  Not having awesome tools may introduce a larger barrier for entry, but it by doesn't stop people from learning new things. IDEs are just tools that help you get your job done.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;What happens when you master an IDE?  Do you just sit there and twiddle your thumbs?  Mastering an IDE doesn't take nearly as long as mastering a language.  Even if you spent all your time up front learning an IDE, there would still be a lot of time to learn the language.  In fact, you don't even need to master an IDE to master a language.  Maybe you could use the IDE as just a text editor with some language specific help thrown in.   Now you have the best of both worlds with a very minimal startup cost.  That has to be better in the long run.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Hacking is not about knowing a language inside and out or even mastering the tools you use.  Hacking is about solving problems.  If there is an easier way to get things done, then that is the method you should use.  You should always find the right tool for the job.  I don't buy the argument that being a language maven helps you to pick the right language for the job.  People learn how to use tools and languages together.  Being an advocate of languages or tools is not black and white.  There is a very large gray area where people are interested in learning both aspects of development.&lt;br /&gt;&lt;br /&gt;With that being said, the author is developing his own language so I can understand why he is bashing the people who use IDEs.  His language is new and doesn't have very much tool support.  Of course he has to use emacs or whatever text editor he chooses.   That doesn't mean IDEs make people suck.  Tools are tools.  It's how you use them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-3704966148601199916?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/3704966148601199916/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=3704966148601199916' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/3704966148601199916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/3704966148601199916'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2008/05/text-editors-are-not-answer.html' title='Text editors are not the answer'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-5209695952436504152</id><published>2008-05-11T20:35:00.012-10:00</published><updated>2008-10-16T23:52:00.330-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Java One Days Two-Four Recap</title><content type='html'>&lt;div style="text-align: left;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_gZ-LJtj9hxw/SCfr0t91OrI/AAAAAAAAANM/BYLJH1DjuFY/s1600-h/img_02121.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_gZ-LJtj9hxw/SCfr0t91OrI/AAAAAAAAANM/BYLJH1DjuFY/s320/img_02121.jpg" alt="" id="BLOGGER_PHOTO_ID_5199383585747188402" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;Day Two started off bright and early by following the hordes of Java One attendees.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_gZ-LJtj9hxw/SCfmNd91ORI/AAAAAAAAAJ8/hI3423EVPW4/s1600-h/img_02271.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer;" src="http://4.bp.blogspot.com/_gZ-LJtj9hxw/SCfmNd91ORI/AAAAAAAAAJ8/hI3423EVPW4/s320/img_02271.jpg" alt="" id="BLOGGER_PHOTO_ID_5199377413879183634" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_gZ-LJtj9hxw/SCfmNt91OSI/AAAAAAAAAKE/GhhrP_MRvYE/s1600-h/img_02281.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer;" src="http://1.bp.blogspot.com/_gZ-LJtj9hxw/SCfmNt91OSI/AAAAAAAAAKE/GhhrP_MRvYE/s320/img_02281.jpg" alt="" id="BLOGGER_PHOTO_ID_5199377418174150946" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;Followed by Oracle's senior vice president pitching Oracle's new developer tool.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_gZ-LJtj9hxw/SCfmN991OTI/AAAAAAAAAKM/2bmHNgWPhXM/s1600-h/img_02391.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer;" src="http://2.bp.blogspot.com/_gZ-LJtj9hxw/SCfmN991OTI/AAAAAAAAAKM/2bmHNgWPhXM/s320/img_02391.jpg" alt="" id="BLOGGER_PHOTO_ID_5199377422469118258" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;Hackers during ScriptBowl competition.  It was cool because we could vote for the best scripting language after every round via sms.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_gZ-LJtj9hxw/SCfnat91OVI/AAAAAAAAAKc/dJLVUuaxpVM/s1600-h/img_0251.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_gZ-LJtj9hxw/SCfnat91OVI/AAAAAAAAAKc/dJLVUuaxpVM/s320/img_0251.jpg" alt="" id="BLOGGER_PHOTO_ID_5199378741024078162" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Crazy Lines waiting for sessions.  The event staff did their best to organize the lines, but after each session it was a mad dash to get to your designated areas.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_gZ-LJtj9hxw/SCfna991OWI/AAAAAAAAAKk/GzbqAQUlSPs/s1600-h/img_02762.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_gZ-LJtj9hxw/SCfna991OWI/AAAAAAAAAKk/GzbqAQUlSPs/s320/img_02762.jpg" alt="" id="BLOGGER_PHOTO_ID_5199378745319045474" border="0" /&gt;&lt;/a&gt;On one side of the Moscone Center, there were gaming stations with more bean bags and chairs.  They had people playing halo and wii tennis.  There was also a rockband competition.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_gZ-LJtj9hxw/SCfnbN91OXI/AAAAAAAAAKs/8hBIoVF4Ung/s1600-h/img_02831.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_gZ-LJtj9hxw/SCfnbN91OXI/AAAAAAAAAKs/8hBIoVF4Ung/s320/img_02831.jpg" alt="" id="BLOGGER_PHOTO_ID_5199378749614012786" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_gZ-LJtj9hxw/SCfnbd91OYI/AAAAAAAAAK0/xDSmLvBNm4k/s1600-h/img_02851.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_gZ-LJtj9hxw/SCfnbd91OYI/AAAAAAAAAK0/xDSmLvBNm4k/s320/img_02851.jpg" alt="" id="BLOGGER_PHOTO_ID_5199378753908980098" border="0" /&gt;&lt;/a&gt;Me and Mark ending up eating at Ciopinno's down by the wharf.  The garlic dungeness crab was great.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_gZ-LJtj9hxw/SCfqdN91OZI/AAAAAAAAAK8/94tRfe5-JwI/s1600-h/img_02861.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_gZ-LJtj9hxw/SCfqdN91OZI/AAAAAAAAAK8/94tRfe5-JwI/s320/img_02861.jpg" alt="" id="BLOGGER_PHOTO_ID_5199382082508634514" border="0" /&gt;&lt;/a&gt;Instead of eating bagels and donuts for the third day in a row, we ended up going to Mel's Diner right by the hotel.  It was expensive and mediocre.  Kind of like a mainland Zippy's.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_gZ-LJtj9hxw/SCfqdd91OaI/AAAAAAAAALE/3DDIVOqLjAQ/s1600-h/img_02931.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_gZ-LJtj9hxw/SCfqdd91OaI/AAAAAAAAALE/3DDIVOqLjAQ/s320/img_02931.jpg" alt="" id="BLOGGER_PHOTO_ID_5199382086803601826" border="0" /&gt;&lt;/a&gt;Cool blue keynote with IBM.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_gZ-LJtj9hxw/SCfqdt91ObI/AAAAAAAAALM/ggOPzTvn0kQ/s1600-h/img_03031.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_gZ-LJtj9hxw/SCfqdt91ObI/AAAAAAAAALM/ggOPzTvn0kQ/s320/img_03031.jpg" alt="" id="BLOGGER_PHOTO_ID_5199382091098569138" border="0" /&gt;&lt;/a&gt;A slide from the Mylan session.  I used mylyn a long-time ago and it seems to have been improved on a quite a bit.  I intend to check it out again in the near future.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_gZ-LJtj9hxw/SCfqd991OcI/AAAAAAAAALU/gKzaT6wQqyI/s1600-h/img_03061.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_gZ-LJtj9hxw/SCfqd991OcI/AAAAAAAAALU/gKzaT6wQqyI/s320/img_03061.jpg" alt="" id="BLOGGER_PHOTO_ID_5199382095393536450" border="0" /&gt;&lt;/a&gt;This was one of the lines coming out of the "Choosing your java web developement framework".  The largest conference room was standing room only.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_gZ-LJtj9hxw/SCfq6991OeI/AAAAAAAAALk/9VaHNVVtt_c/s1600-h/img_03131.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_gZ-LJtj9hxw/SCfq6991OeI/AAAAAAAAALk/9VaHNVVtt_c/s320/img_03131.jpg" alt="" id="BLOGGER_PHOTO_ID_5199382593609742818" border="0" /&gt;&lt;/a&gt;Cool presentation from Atlassian.  Pimp my build!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_gZ-LJtj9hxw/SCfrdN91OoI/AAAAAAAAAM0/uKPfCP9dotY/s1600-h/img_03601.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_gZ-LJtj9hxw/SCfrdN91OoI/AAAAAAAAAM0/uKPfCP9dotY/s320/img_03601.jpg" alt="" id="BLOGGER_PHOTO_ID_5199383182020262530" border="0" /&gt;&lt;/a&gt;Cole Hamels pitching to a Giant.  Who is the giant?&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_gZ-LJtj9hxw/SCfrdd91OpI/AAAAAAAAAM8/gMYrDGEv9bI/s1600-h/img_03691.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_gZ-LJtj9hxw/SCfrdd91OpI/AAAAAAAAAM8/gMYrDGEv9bI/s320/img_03691.jpg" alt="" id="BLOGGER_PHOTO_ID_5199383186315229842" border="0" /&gt;&lt;/a&gt;Cole Hamels was in a bit of a rough spot so there was a conference with his team.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_gZ-LJtj9hxw/SCfrdt91OqI/AAAAAAAAANE/HnMCWwxumN4/s1600-h/img_03701.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_gZ-LJtj9hxw/SCfrdt91OqI/AAAAAAAAANE/HnMCWwxumN4/s320/img_03701.jpg" alt="" id="BLOGGER_PHOTO_ID_5199383190610197154" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_gZ-LJtj9hxw/SCfrPN91OjI/AAAAAAAAAMM/4xpj6finnoo/s1600-h/img_03411.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_gZ-LJtj9hxw/SCfrPN91OjI/AAAAAAAAAMM/4xpj6finnoo/s320/img_03411.jpg" alt="" id="BLOGGER_PHOTO_ID_5199382941502093874" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_gZ-LJtj9hxw/SCfrPd91OkI/AAAAAAAAAMU/iJlFC5u-Q0o/s1600-h/img_03451.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_gZ-LJtj9hxw/SCfrPd91OkI/AAAAAAAAAMU/iJlFC5u-Q0o/s320/img_03451.jpg" alt="" id="BLOGGER_PHOTO_ID_5199382945797061186" border="0" /&gt;&lt;/a&gt;Charlie Manuel and Bruce Bochi.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_gZ-LJtj9hxw/SCfrPd91OlI/AAAAAAAAAMc/jLhuDhvm6Zc/s1600-h/img_03481.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_gZ-LJtj9hxw/SCfrPd91OlI/AAAAAAAAAMc/jLhuDhvm6Zc/s320/img_03481.jpg" alt="" id="BLOGGER_PHOTO_ID_5199382945797061202" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_gZ-LJtj9hxw/SCfrPt91OmI/AAAAAAAAAMk/PEw_XR479lE/s1600-h/img_03551.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_gZ-LJtj9hxw/SCfrPt91OmI/AAAAAAAAAMk/PEw_XR479lE/s320/img_03551.jpg" alt="" id="BLOGGER_PHOTO_ID_5199382950092028514" border="0" /&gt;&lt;/a&gt;The Flyin' Hawaiian, Shane Victorino.  Go Hawaii!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_gZ-LJtj9hxw/SCfrP991OnI/AAAAAAAAAMs/qHnhzdbHvG4/s1600-h/img_03571.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_gZ-LJtj9hxw/SCfrP991OnI/AAAAAAAAAMs/qHnhzdbHvG4/s320/img_03571.jpg" alt="" id="BLOGGER_PHOTO_ID_5199382954386995826" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_gZ-LJtj9hxw/SCfq7d91OgI/AAAAAAAAAL0/Yz9FpxBDrs8/s1600-h/img_03361.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_gZ-LJtj9hxw/SCfq7d91OgI/AAAAAAAAAL0/Yz9FpxBDrs8/s320/img_03361.jpg" alt="" id="BLOGGER_PHOTO_ID_5199382602199677442" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_gZ-LJtj9hxw/SCfq7t91OhI/AAAAAAAAAL8/CTLvC53-TCk/s1600-h/img_03371.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_gZ-LJtj9hxw/SCfq7t91OhI/AAAAAAAAAL8/CTLvC53-TCk/s320/img_03371.jpg" alt="" id="BLOGGER_PHOTO_ID_5199382606494644754" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_gZ-LJtj9hxw/SCfq7t91OiI/AAAAAAAAAME/1P8AL771a6U/s1600-h/img_03391.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_gZ-LJtj9hxw/SCfq7t91OiI/AAAAAAAAAME/1P8AL771a6U/s320/img_03391.jpg" alt="" id="BLOGGER_PHOTO_ID_5199382606494644770" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Can't wait till next year.  Worth every penny.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-5209695952436504152?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/5209695952436504152/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=5209695952436504152' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/5209695952436504152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/5209695952436504152'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2008/05/java-one-days-two-four-recap.html' title='Java One Days Two-Four Recap'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_gZ-LJtj9hxw/SCfr0t91OrI/AAAAAAAAANM/BYLJH1DjuFY/s72-c/img_02121.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-5889054649874363695</id><published>2008-05-07T09:39:00.009-10:00</published><updated>2008-10-16T23:52:00.331-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Java One, Day One Recap</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_gZ-LJtj9hxw/SCIF0F4rqzI/AAAAAAAAAJM/IN-_wJBOLhU/s1600-h/collage2.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_gZ-LJtj9hxw/SCIF0F4rqzI/AAAAAAAAAJM/IN-_wJBOLhU/s320/collage2.jpg" alt="" id="BLOGGER_PHOTO_ID_5197723312430230322" border="0" /&gt;&lt;/a&gt;Registration!  Around the hotel and the convention center Sun put up conference flags.  It was kinda cool to walk around town looking for a place to eat and see the banners up.  Registration was extremely easy.  We entered our email address were given badges to wear around our next.  They include RFID chips that they use to scan us into sesssions that we registered for and also to randomly pick us for more swag.&lt;br /&gt;&lt;br /&gt;The cool thing is that this year they installed biometric sensors on all of the doors so they can track when people enter and exit.  They brought up some telemetry streams that show when the presentation would start and end.  What happens if there is a big spike of people leaving during the middle of the session?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_gZ-LJtj9hxw/SCIGml4rq1I/AAAAAAAAAJc/-cVd5vQTizQ/s1600-h/keynote.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: right; cursor: pointer;" src="http://2.bp.blogspot.com/_gZ-LJtj9hxw/SCIGml4rq1I/AAAAAAAAAJc/-cVd5vQTizQ/s320/keynote.jpg" alt="" id="BLOGGER_PHOTO_ID_5197724180013624146" border="0" /&gt;&lt;/a&gt;After registration we headed to a huge conference hall with gigantic screens all over the place.  We were greeted with people dancing to hip hop.  Very weird.  I took some videos, which will go up on you tube a little bit later.&lt;br /&gt;&lt;br /&gt;James Gosling and his crew have a tradition of having a tshirt toss before they start talking.  A girl next to us got a shirt.  I hate her.&lt;br /&gt;&lt;br /&gt;The CEO of Sun came up to talk about the mantra of JavaOne this year, which is Java + You.  The motivation of the mantra is that software is no longer driven by enterprise needs.  It is driven by consumers, thus a lot of the sessions this year talk about RIAs with JavaFX, web applications with J* scripting languages, and user interfaces that help people improve their lives.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_gZ-LJtj9hxw/SCIGnF4rq2I/AAAAAAAAAJk/Ms8c2Dp9T44/s1600-h/collage.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_gZ-LJtj9hxw/SCIGnF4rq2I/AAAAAAAAAJk/Ms8c2Dp9T44/s320/collage.jpg" alt="" id="BLOGGER_PHOTO_ID_5197724188603558754" border="0" /&gt;&lt;/a&gt;Next up was a huge session load.  Most of the sessions were really good.  The best one by far was the More Effective Java with Josh Bloch.  He highlighted new chapters in the 2nd edition of Effective Java.  I picked up a copy at the JavaOne bookstore and plan on sharing a tech talk.&lt;br /&gt;&lt;br /&gt;Sadly there was one session that was very boring with the presenters just reading off the slides and not adding any other information.  Lame.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_gZ-LJtj9hxw/SCIGnl4rq3I/AAAAAAAAAJs/eoClWWisEWw/s1600-h/collage1.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: right; cursor: pointer;" src="http://2.bp.blogspot.com/_gZ-LJtj9hxw/SCIGnl4rq3I/AAAAAAAAAJs/eoClWWisEWw/s320/collage1.jpg" alt="" id="BLOGGER_PHOTO_ID_5197724197193493362" border="0" /&gt;&lt;/a&gt;Onto the best part, the swag!  Me and Mark walked around the pavilion area to get some cool gear and talk to people to see what's new out there in software land.  The first booth we hit was Atlassian's, where we scored shirts and 10% off new/upgrades of their tools.&lt;br /&gt;&lt;br /&gt;It was funny because we decided to hit each booth in order, but we ended up going towards the booths with the best swag.  The first picture of the collage shows Mark with all of the gear we got.  We had to make a pitstop at the hotel cause our shoulders were sore.&lt;br /&gt;&lt;br /&gt;The lesson for our company when we go to the con in Orlando is to bring good swag.  Pens and golf balls don't do it.&lt;br /&gt;&lt;br /&gt;The first day of Java One was pretty long.  I ended up getting back to the hotel around 11 after all of the sessions and eating dinner.  Here is my schedule for today:&lt;br /&gt;&lt;br /&gt;930-1030: The Script Bowl: A Rapidfire comparison of scripting languages&lt;br /&gt;1050-1150: Improving application performance with Monitoring and Profiling Tools&lt;br /&gt;130-230: JRuby on Rails: Web Development Evolved&lt;br /&gt;250-350: Creating a compelling user interface&lt;br /&gt;410-510: Putting 3D earth into your applications and webpages&lt;br /&gt;630-730: How to build restful clients with javascript, ruby and java fx&lt;br /&gt;830-920: The future of testing: How community engagement is changing the rules&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-5889054649874363695?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/5889054649874363695/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=5889054649874363695' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/5889054649874363695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/5889054649874363695'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2008/05/java-one-day-one-recap.html' title='Java One, Day One Recap'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_gZ-LJtj9hxw/SCIF0F4rqzI/AAAAAAAAAJM/IN-_wJBOLhU/s72-c/collage2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-7297322143678112890</id><published>2008-05-05T20:56:00.002-10:00</published><updated>2008-10-16T23:52:00.331-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Boys Day / Java One</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_gZ-LJtj9hxw/SCABi2EFnrI/AAAAAAAAAJE/ZufDNQMdwTw/s1600-h/image151.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_gZ-LJtj9hxw/SCABi2EFnrI/AAAAAAAAAJE/ZufDNQMdwTw/s320/image151.jpg" alt="" id="BLOGGER_PHOTO_ID_5197155668125392562" border="0" /&gt;&lt;/a&gt;It's Boys Day and the day before Java One.  I'm planning on putting up pics and keep a log of what's going down in frisco.&lt;br /&gt;&lt;br /&gt;It's going to be a busy day tommorow with a mad dash for swag and loot at 11:30.  My schedule tommorow is looking good:&lt;br /&gt;&lt;br /&gt;830am - 1030am : Sun General Session: Java + You&lt;br /&gt;1050am - 1150am: Fortress: A Next-Generation Programming Language Brought to You by Sun&lt;br /&gt;1130am - 1210pm: The great swag dash + lunch&lt;br /&gt;1210pm - 110pm: More Effective Java.  Josh Bloch! &lt;br /&gt;130pm - 300pm: Sun General Session Java-Centricity: Leveraging Java Technology at the hub of your Digital Life&lt;br /&gt;440pm - 550pm: Real World, Real Time, Instant Results: Make Information Work for You&lt;br /&gt;600pm - 700pm: SCA: Flexible and Agile Composition of Distributed Service-Oriented Architecture Applications&lt;br /&gt;730pm - 820pm: Practical Applications of Static Java™ Technology-Based Bytecode Analysis and Transformation&lt;br /&gt;&lt;br /&gt;Pics + News + Videos(maybe) to come!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-7297322143678112890?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/7297322143678112890/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=7297322143678112890' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/7297322143678112890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/7297322143678112890'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2008/05/boys-day-java-one.html' title='Boys Day / Java One'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_gZ-LJtj9hxw/SCABi2EFnrI/AAAAAAAAAJE/ZufDNQMdwTw/s72-c/image151.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-4168947572942331577</id><published>2008-03-30T23:16:00.008-10:00</published><updated>2008-10-16T23:51:33.406-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hackystat'/><title type='text'>We still need the Sensorbase</title><content type='html'>There is a &lt;a href="http://groups.google.com/group/hackystat-ui-ror-viewer/browse_thread/thread/b8000e263ebb747f"&gt;Hackystat database discussion&lt;/a&gt; going on that is causing some confusion.  I'm not explaining myself well so I'm going to draw some pictures with the hope of clearing things up.  I'm glad we are having this conversation because it is helping to flesh out the Hackystat conversations sparked at work.  We all have to have courage to express new ideas.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Philip says in the thread:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;It would be extremely easy, maybe one day's work, to extend your RoR application to support just the subset of the SensorBase REST API for PUTting of sensor data.  Once that's  done&lt;/span&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;, you have no need of the sensorbase at all; you can install  Hackystat sensors, point them at your RoR app, and have your own custom two-tier, database-driven, client-server web application that is compatible with Hackystat sensor data.  You now have total control  and can do processing whereever you see fit. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I do believe that we still will need the Sensorbase because it does a great job of collecting data and providing the basic API for retrieving data.  There is nothing wrong with the way the SensorDataBrowser retrieves data from the Sensorbase.&lt;br /&gt;&lt;br /&gt;Here is the layout of how the current architecture is layed out in my mind:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_gZ-LJtj9hxw/R_C1g5UygNI/AAAAAAAAAII/79JHYHU9aHg/s1600-h/current_architecture.JPG"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_gZ-LJtj9hxw/R_C1g5UygNI/AAAAAAAAAII/79JHYHU9aHg/s320/current_architecture.JPG" alt="" id="BLOGGER_PHOTO_ID_5183842747851899090" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;We are limited by having only one service, the Sensorbase, as the interface for all services.  This reduces the flexibility of the architecture because we are stuck if we want to write an extension or optimization that doesn't fit in with the current Sensorbase.  For example, we might want to build snapshots or aggregates on the database end.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here is the architectural layout with MySQL behind the Sensorbase instead of Derby:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_gZ-LJtj9hxw/R_C45ZUygPI/AAAAAAAAAIY/M-REQgK0aKI/s1600-h/mysql_architecture.JPG"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_gZ-LJtj9hxw/R_C45ZUygPI/AAAAAAAAAIY/M-REQgK0aKI/s320/mysql_architecture.JPG" alt="" id="BLOGGER_PHOTO_ID_5183846467293577458" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;Having MySQL (or Derby in networked mode or any other database allowing multiple connections)  adds to what clients can do with the current architecture rather than removing the need for the Sensorbase.  We would have added flexibility because we can have multiple ways to get data.  In the picture above, we could get the data from the current services, or from the new DPD service that we envision, or the Hackystat view can directly access the database (although the view should use the services).&lt;br /&gt;&lt;br /&gt;In the case of the new DPD service, the same API would be used, but the data retrieval and calculation implementation will be changed.  Since the same API will be used, the changes would be transparent to the clients.&lt;br /&gt;&lt;br /&gt;For example, clients would still be able to get DPD Commit data using a webservice call regardless of which DPD implementation is used:&lt;br /&gt;&lt;br /&gt;http://hackystat.ics.hawaii.edu/dailyprojectdata/commit/johnson@hawaii.edu/Default/2006-01-31T00:00:00.000&lt;br /&gt;&lt;br /&gt;If another public service is built on top of the DPD service, there would be no problems because the API would be the same.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Philip also writes:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;To me, going down the path of expanding the role of your forked SensorBase into doing analyses opens up a fairly large can of worms that you might live to regret down the road.  As just one danger, you could end up maintaining your own, highly idiosyncratic version of the SensorBase that is incompatible with the "public" version and so you cannot integrate new analyses and tools that others are contributing to the Hackystat ecosystem.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We don't want to replace the current sensorbase, we just want to add another service on the same level as the current sensorbase.  We would still be able to use all of the 'public' features provided by the offical Sensorbase and services because the APIs for the services would remain unchanged.  The problem, as Philip mentions, is we would have to maintain all of the custom services and anyone who doesn't use MySQL will not be able to use our optimizations.&lt;br /&gt;&lt;br /&gt;So in conclusion, we don't want to move towards a two-tiered, data-base driven web application.  We want to utilize the benefits of the current RESTful architecture and caching, while also using the benefits of a RMDB.&lt;br /&gt;&lt;br /&gt;Hopefully that clears up what I wrote in the email.  Whether or not that is the right way to go is still to be determined.   &lt;span style="font-weight: bold;"&gt;Philip also says, "&lt;/span&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;It seems far better to figure out how to solve your performance issues within the current architectural boundaries, which mimic the web's in general and so are pretty much time-tested.&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;"&lt;/span&gt; After talking with Aaron, I don't believe that caching will be removed because there will be other 'public' services that still will be using it.  I agree that we should investigate the current caching mechanism and plan on testing it against my workplace's data this week.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-4168947572942331577?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/4168947572942331577/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=4168947572942331577' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/4168947572942331577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/4168947572942331577'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2008/03/we-still-need-sensorbase.html' title='We still need the Sensorbase'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_gZ-LJtj9hxw/R_C1g5UygNI/AAAAAAAAAII/79JHYHU9aHg/s72-c/current_architecture.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-2587437442443230553</id><published>2008-03-25T01:42:00.007-10:00</published><updated>2008-10-16T23:51:33.406-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hackystat'/><title type='text'>DailyProjectData with Rails</title><content type='html'>The past month or so has been spent setting up &lt;a href="http://code.google.com/p/hackystat/"&gt;Hackystat&lt;/a&gt; at work and hacking on a Rails &lt;a href="http://code.google.com/p/hackystat-analysis-dailyprojectdata/"&gt;Daily Project Data&lt;/a&gt; viewer.  So far the going has been pretty slow.  Several things came up like working on the &lt;a href="http://austenito.blogspot.com/2008/03/netbeans-innovators-grant.html"&gt;Netbeans Innovators Grant&lt;/a&gt; proposal and preparing for a intern speech at the University of Hawaii.  Excuses, excuses I know.&lt;br /&gt;&lt;br /&gt;The good thing is that tonight I came across a nifty Rails charting plugin called &lt;a href="http://pullmonkey.com/projects/open_flash_chart"&gt;Open Flash Chart&lt;/a&gt;.  A cool hacker wrote a Rails wrapper around the php package.  I did some quick plugin installation, copied some example code, and hooked it up to the data retrieved from the Daily Project Data webservice:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_gZ-LJtj9hxw/R-jqkZUygMI/AAAAAAAAAIA/FgLCZUtfC4I/s1600-h/Screenshot-Mozilla+Firefox-1.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_gZ-LJtj9hxw/R-jqkZUygMI/AAAAAAAAAIA/FgLCZUtfC4I/s320/Screenshot-Mozilla+Firefox-1.png" alt="" id="BLOGGER_PHOTO_ID_5181649282284028098" border="0" /&gt;&lt;/a&gt;The charts on the left are embedded flash charts that I created using data from the CodeIssue and Unit Test DPDs.  The charts are very responsive and have very nice eye candy. Hovering  over a section in the chart will display extra data in a tool tip.  If you take a look at the pie chart, I hovered over the pink section to display a tooltip saying, '94 Findbugs Issues'.  Each section can also have embedded links to forward you to another page.  In my case I would want to send the user to another page with a drill down of the type of data they selected.&lt;br /&gt;&lt;br /&gt;These are the two charts I played around with tonight.  I was thinking that it would be cool to display DevEvent data over the course of a day or a chart with Commit's and Issue information.&lt;br /&gt;&lt;br /&gt;The current use case  of the viewer is to create a information "dashboard" that can be used in 10- minute stand up meetings.  The goal is to have the people in the meeting quickly interpret the data to drive discussions.  In version 7, Daily Project Data information was displayed in a table.  There was a lot of text and it was quite hard to get a feel for things without diving deeper into the data.  I'm hoping the the using charts will help alleviate that issue.&lt;br /&gt;&lt;br /&gt;I find it very cool that the new architecture allows us to have multiple viewer projects going.  David and Pavel have the &lt;a href="http://code.google.com/p/hackystat-ui-sensordatabrowser/"&gt;SensorDataBrowser&lt;/a&gt; and &lt;a href="http://code.google.com/p/hackystat-ui-projectviewer/"&gt;ProjectViewer&lt;/a&gt; modules up and running, but I really wanted to do some Rails hacking.  So I just fired up a service and created my own view.  I love it.&lt;br /&gt;&lt;br /&gt;The source for the project is hosted on the &lt;a href="http://code.google.com/p/hackystat-viewer/"&gt;Google Code Site&lt;/a&gt;.  There isn't much there besides the source, but I wanted a place to commit my code.  &lt;a href="http://jpstup.blogspot.com/"&gt;Josh Stupplebeen&lt;/a&gt; is also going to help out since he wants to get back into hacking Hackystat and wants more Rails experience.&lt;br /&gt;&lt;br /&gt;Wants to hack Hackystat.  Check.&lt;br /&gt;Wants to learn Rails too.  Check.&lt;br /&gt;&lt;br /&gt;Sounds like a winner!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-2587437442443230553?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/2587437442443230553/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=2587437442443230553' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/2587437442443230553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/2587437442443230553'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2008/03/dailyprojectdata-with-rails.html' title='DailyProjectData with Rails'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_gZ-LJtj9hxw/R-jqkZUygMI/AAAAAAAAAIA/FgLCZUtfC4I/s72-c/Screenshot-Mozilla+Firefox-1.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-6944314209991368462</id><published>2008-03-18T01:41:00.002-10:00</published><updated>2008-03-18T01:57:05.316-10:00</updated><title type='text'>Code Review Lessons Learned</title><content type='html'>I moderated a code review today which provided some interesting lessons learned. &lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Scale review scope according to code complexity.&lt;/span&gt;  We just got through with a milestone release, so I decided that it was a good time to review our algorithm code we have been hacking on during the iteration.  It turns out that the one hour allotted for code reviews was way below the time required to review the code.  I am talking about 400 lines of code that takes 2+ to review for correctness.  I originally was relying on lines of code as a good indicator on how much code I should request for a review.  Bad idea!  The reviewers felt rushed and were unable to follow the code logic because the review scope was too large.  So the lesson here is to not rely on lines of code when selecting the source code to review.  If the code is very complex, as it was in our case, it is probably a good idea to focus on certain aspects to limit the scope.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Provide explanations of external library method calls.&lt;/span&gt;  I got a lot of questions about the external API method invocations, which were found everywhere in my code.  Next time, I think it will be a good idea to provide brief explanations of what each method call does.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Provide the source code for external libraries.  &lt;/span&gt;If you have performed a review with &lt;a href="http://code.google.com/p/jupiter-eclipse-plugin/"&gt;Jupiter&lt;/a&gt;, you know how important IDE features are when digging deep into someone's source.  In lesson learned #2, I said that it is important to tell reviewers what external methods do.  I think it is equally important to give reviewers the ability to jump into the method calls source to read the documentation or read the external source code.  What I found during this review is that a lot of my code was skipped over because reviewers didn't know what the external method calls were doing.  All they had to go on was the name and my inline comments.  They ended up taking a lot of things for granted and assumed that everything was fine and dandy.  That is the exact opposite behavior that I want reviewers to have.  If they are going to find interesting and helpful issues, they must question everything!  No one writes perfect code.  Especially not me.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Code reviews makes everyone on your team better.  I can't wait to try &lt;a href="http://www.atlassian.com/software/crucible/"&gt;Crucible&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-6944314209991368462?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/6944314209991368462/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=6944314209991368462' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/6944314209991368462'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/6944314209991368462'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2008/03/code-review-lessons-learned.html' title='Code Review Lessons Learned'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-2955835833893399282</id><published>2008-03-16T01:12:00.003-10:00</published><updated>2010-01-10T12:54:03.244-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life Hacking'/><title type='text'>Think Higher</title><content type='html'>My company's annual performance evaluations ended a couple of weeks ago.  In the technical and teamwork areas I did fine.  The big knock against me was my lack of domain knowledge.  I code ok, work hard, try to get things done, but I don't have a high level picture of what my work is trying to accomplish.  In other words, I do what I'm told, but I'm not as helpful when it comes down to figuring out what it is we are actually supposed to do.&lt;br /&gt;&lt;br /&gt;That turns out to be a huge thing.  Stepping up to the next level means getting to that point where you are bringing ideas to the table rather than waiting to be served.  Sounds easy...right?&lt;br /&gt;&lt;br /&gt;So my next task is to figure out how to gain some domain knowledge.  How does that even happen?  I can't put anything under my pillow in hopes that I'll gain some knowledge from the domain fairy.  At my Referentia Internship program pitch last Thursday at &lt;a href="http://www.ics.hawaii.edu/"&gt;UH&lt;/a&gt;, I told potential interns about the importance of gaining domain knowledge.  I told them how gaining some domain knowledge will separate them from the rest of the pack.  I really believe what I said and I'm working on it as we speak.&lt;br /&gt;&lt;br /&gt;Over the last two weeks, I've been trying to reach that point where I'm thinking less about implementation and more about solving problems.  I'm trying to reach new levels of abstractions.  I'm trying to &lt;span style="font-style: italic;"&gt;Think Higher.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Rather than wondering what type of design pattern would fit best, I'm trying to move up the thought ladder. What types of things fit into the workflow of our users?  Is this useful? Where should our development focus be?&lt;br /&gt;&lt;br /&gt;I am hoping that by changing the way I work, I'll be moving on towards gaining that elusive domain knowledge.  One of our tech leads at work has been helping me out.  In my opinion, his greatest strength is this higher thinking process I'm blogging about.  He is mentoring me and trying to grow new problem solving approaches in me.  Hooray for mentors!&lt;br /&gt;&lt;br /&gt;So what's next?  I think that the next step would be to &lt;span style="font-style: italic;"&gt;Think Higher&lt;/span&gt; about Hackystat.  Rather than trying to figure out how to implement my DailyProjectDetails viewer in Rails and with cool ajax forms and charts and...  It's easy to get lost in the implementation details.  I want to start thinking about why would the viewer even be useful?  What types of views and charts and forms would make it easier to provide the information that they needed.  What is the purpose of this project?  Once I find that purpose, how can I improve it and make it useful in it's domain?&lt;br /&gt;&lt;br /&gt;So add this to the &lt;a href="http://austenito.blogspot.com/2008/01/lists-are-fun.html"&gt;list&lt;/a&gt;.  &lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;Gain &lt;/span&gt;Domain Knowledge.  &lt;/span&gt;The year is moving by quickly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-2955835833893399282?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/2955835833893399282/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=2955835833893399282' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/2955835833893399282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/2955835833893399282'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2008/03/think-higher.html' title='Think Higher'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-1313986384964696574</id><published>2008-03-09T00:22:00.005-10:00</published><updated>2010-01-06T08:05:31.884-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Hackystat'/><title type='text'>Netbeans Innovators Grant</title><content type='html'>The last week and a half was spent editing a proposal for the &lt;a href="http://www.netbeans.org/grant/"&gt;Netbeans Innovators Grant&lt;/a&gt;, which awards developers with $2000 or $11,500 to work on a project that will benefit the Netbeans community.  The idea that one of my team members had was to write a port of Jupiter to Netbeans.  What a great idea!  Our company performs code reviews and it is a huge pain to moderate the review when half of the reviewers are using pen and paper and the other half is using &lt;a href="http://code.google.com/p/jupiter-eclipse-plugin/"&gt;Jupiter&lt;/a&gt;. &lt;div&gt; &lt;/div&gt;&lt;div&gt;Don't worry.  I'm really am writing a blog about proposing to get a grant to work on Netbeans.  I may be an Eclipse fan boy, I am also a huge proponent of using the right tool for the job.  If one day Netbeans leaps over Eclipse, I'll be the first one to switch.  I think that the Netbeans team did an awesome job integrating Ruby on Rails development.  I am currently am writing a  DailyProjectDetails viewer using rails.  I put the Hackystat mini-feed on hold, while I try to pump out a useful view that we can use at work.  The viewer should be appearing in another blog as soon as I get something that can be deployed.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Getting back to the Netbeans grant, I thought the whole process was enjoyable and painful at the same time.  I must admit that writing proposals suck.  I have helped to write a bunch at work and took the lead on the Netbeans proposal.  It sucks because it is mentally draining and you spend so much time getting the flow and content just right.  I literally spent hours searching online for current review tool research and solutions.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;The enjoyable part is the end goal.  The motivation factor.  I really do believe that we can work together to create something useful.  If I can spend a week living in pain to have 4 months of fun working together on a project, then I will sit there and pump out proposals all day long ;)&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;Working on this proposal helped me realize that proposal writing is skill that everyone should have.  Originally I thought that writing proposals were not for me.  Why should I write proposals?  I'm a hacker, just let me hack.  I'm never going to need to have this proposal writing skill.  It is a good thing that I got some proposal writing practice because it turned out to be extremely useful.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;"What is the current technologies that exist in your proposed area?"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;"What is our project's special sauce?"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;The two questions above were implanted in my brain and helped me to write the proposal.  I used those two questions to help me find justification for writing the proposal.  I looked for the current integrated review tool solutions and pitched our idea.  I then talked about what our "special sauce" could be.  I really believe that the project is do-able and provides value.    &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Hopefully the Netbeans grant team wants to drink our Jupiter Kool-Aid too.  It tastes great.   &lt;/div&gt;&lt;div&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px;" src="http://i21.photobucket.com/albums/b251/ipulltrigger/koolaid.jpg" border="0" alt="" /&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-1313986384964696574?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/1313986384964696574/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=1313986384964696574' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/1313986384964696574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/1313986384964696574'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2008/03/netbeans-innovators-grant.html' title='Netbeans Innovators Grant'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-7794139421950445683</id><published>2008-02-24T01:16:00.006-10:00</published><updated>2008-03-16T02:17:34.051-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hackystat'/><title type='text'>We need a Hackystat developer config script</title><content type='html'>I recently setup my machine to run Ubuntu Gutsy, so that means that I have to install all of the apps and redo my Hackystat configuration.  I decided to put off reconfiguring Hackystat until I really needed to since it's takes awhile.  Tonight I wanted to run the latest Sensorbase so I needed to setup my environmental variables.  Here are the libraries I had to manually download and setup to create Sensorbase binary.  *deep breath*&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Junit 4.4&lt;/li&gt;&lt;li&gt;Pmd 4.1&lt;/li&gt;&lt;li&gt;Restlet&lt;/li&gt;&lt;li&gt;Derby&lt;/li&gt;&lt;li&gt;Findbugs 1.3.2&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Javamail&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Followed by creating the following environmental variables:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;JUNIT_HOME=/home/austen/sideProjects/external_libs/junit-4.4&lt;/li&gt;&lt;li&gt;PMD_HOME=/home/austen/sideProjects/external_libs/pmd-4.1&lt;/li&gt;&lt;li&gt;RESTLET_HOME=/home/austen/sideProjects/external_libs/restlet-1.0.&lt;/li&gt;&lt;li&gt;DERBY_HOME=/home/austen/sideProjects/external_libs/db-derby-10.3.2.1-bin&lt;/li&gt;&lt;li&gt;FINDBUGS_HOME=/home/austen/sideProjects/external_libs/findbugs-1.3.2&lt;/li&gt;&lt;li&gt;JAVAMAIL_HOME=/home/austen/sideProjects/external_libs/javamail-1.4.1&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Then I found out that I need to build the Hackystat Utilities module before I could create the Sensorbase binary.  More downloading...&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Apache Jcs 1.3&lt;/li&gt;&lt;li&gt;Apache Common Logging 1.1&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;And more configuration...&lt;br /&gt;&lt;ol&gt;&lt;li&gt;APACHE_JCS_HOME=/home/austen/sideProjects/external_libs/jcs-1.3&lt;/li&gt;&lt;li&gt;APACHE_COMMONS_LOGGING_HOME=/home/austen/sideProjects/external_libs/commons-logging-1.1&lt;/li&gt;&lt;li&gt;HACKYSTAT_UTILITIES_HOME=/home/austen/sideProjects/hackystat/hackystat-utilities&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Phew.  That was quite a bit of setup just to build one jar file.&lt;br /&gt;&lt;br /&gt;Another thing that bugs me was I downloaded the wrong version of Apache Commons Logging.  I  downloaded the latest release, which happened to be v1.1.1 instead of v1.1.  Since I have done the setup before I automatically knew what was wrong, but new developers might not get it right away.  I'm thinking that the error messages should specify what jar file the build wants. &lt;br /&gt;&lt;br /&gt;What we need is to have a little shell script that goes out and grabs the current files, extracts them to the specified location, and sets your environmental variables up.  So all those steps turns into two. &lt;br /&gt;&lt;ol&gt;&lt;li&gt;Write the appropriate install folder location.&lt;/li&gt;&lt;li&gt;Invoke the script from the shell of your choice.&lt;/li&gt;&lt;/ol&gt;Any takers?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-7794139421950445683?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/7794139421950445683/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=7794139421950445683' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/7794139421950445683'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/7794139421950445683'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2008/02/we-need-hackystat-developer-config.html' title='We need a Hackystat developer config script'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-8037813889502865931</id><published>2008-02-19T23:37:00.002-10:00</published><updated>2010-01-10T13:06:11.572-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software Rumblings'/><title type='text'>Back to Ubuntu</title><content type='html'>&lt;a href="http://www.ubuntu.com/"&gt;Ubuntu&lt;/a&gt;.  Dual Monitor Display.  Happiness.&lt;br /&gt;&lt;br /&gt;I'm sitting here writing this blog anxiously waiting for my laptop to finish defragging so I can shrink my windows partition with &lt;a href="http://gparted.sourceforge.net/"&gt;gParted&lt;/a&gt;.  I tried to partition it early without defragging, but I got an error so I'm sitting here doing nothing while its takes &gt;2 hours to complete. &lt;br /&gt;&lt;br /&gt;I used to run an earlier Ubuntu distro on my desktop (Breezy I believe) and it was an awesome.  Hacking on linux is absolutely one step towards being productive and getting things done.  Linux sometimes pisses me off since some of my hardware doesn't work, but every new release of Ubuntu fixes something that wasn't compatible.  I remember the days when the only solution to get my wireless adapter to work was to write my own drivers.  Hacking + Linux is great.  Here is why I think you should switch.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Fast file system.  ext3 &gt; NTFS.   This is an absolute must-have when compiling.  I remember way back in Hackystat 6 and 7 where compiling on linux would be up to 5 minutes faster than windows.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Multiple desktop support.  Let's face it.  Windows has crappy multiple desktop support.  I tried &lt;a href="http://www.microsoft.com/windowsxp/downloads/powertoys/xppowertoys.mspx"&gt;Microsoft Power Tools&lt;/a&gt;, a free app that let's you have multiple desktops.  Crap.  Slow.  Not configurable.    Aaron informs me that he has had multiple desktop support with his other computer.  Sadly it was tied to his ATI video card.  No dice. &lt;br /&gt;&lt;br /&gt;As a hacker you need lots of screen real-estate.  So much that you would need gigantic monitors to fit everything you want.  Multiple desktops let you have Eclipse open, multiple consoles, a text editor, browsers, instant messengers, twitter, your mail client, downloads, all open at the same time.  You set up your environment so you know exactly what desktop screen the app you lives on.  You move fast.  You have to or else the IM blinking won't stop.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;A useful shell.  To make you hacking life easier, you need to be able to grep the output of your app, pipe some information to a file, or just be able to copy and paste without using the stupid "mark" option in the Windows shell. &lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Linux is awesome.  When it works.  Some people complain about their hardware not working or just not having the same amount of software choices.  I feel their pain.  Linux is not for the weak.  It grinds you until you want to just give up.  Then you find this post about someone who wrote a script that fixes some obscure file that was causing your install script to fail.  Hooray.  Some people don't want to deal with that.  I had enormous amounts of trouble setting up dual monitors in previous releases.  That and my special &lt;a href="http://www.amazon.com/Kensington-Expert-Mouse-Optical-Trackball/dp/B00009KH63"&gt;Kensington Expert Mouse&lt;/a&gt; doesn't work.  I too sometimes that Linux would just work.&lt;br /&gt;&lt;br /&gt;If you know how much of a pain setting up dual monitors was, you'll be happy to know that setting it up with Gutsy is supposedly easier.  No more xorg.conf hacking.  So I have heard.  54% completed.  Compacting files.  46% more until I can leave you windows.&lt;br /&gt;&lt;br /&gt;So long and thanks for all the fish.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-8037813889502865931?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/8037813889502865931/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=8037813889502865931' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/8037813889502865931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/8037813889502865931'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2008/02/back-to-ubuntu.html' title='Back to Ubuntu'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-1999565504489523564</id><published>2008-01-31T00:42:00.000-10:00</published><updated>2008-03-16T02:17:34.051-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hackystat'/><title type='text'>Mini-Feed Webservice Making a Comeback?</title><content type='html'>The Hackystat Mini-Feed has hit a road block.  A Mini-Feed webservice may be the answer.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;What I want to do&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I had the idea that the mini-feeds should display some aggregated information based on batches of the sensor data entries.  This will allow the feed to say things like:&lt;br /&gt;&lt;br /&gt;&lt;blockquote style="font-style: italic;"&gt;Austen currently has 25 minutes of active time in the past hour.  2 hours total for today.&lt;br /&gt;&lt;br /&gt;@ 12:02pm Austen has invoked an ant build.&lt;br /&gt;&lt;br /&gt;@ 4:04pm Philip has run the Emma Coverage tool.  The foo module currently has 99.9% method level coverage.&lt;br /&gt;&lt;br /&gt;@2:02am Aaron has commited 25 files.&lt;/blockquote&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The Problem&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The issue I had tonight was the large amount of webservice requests required to get the right data.  There are basically two ways to request project data in Hackystat.   [1] Request the index of sensor data entries, which provides you with information such as the URL to the entries' representation, a timestamp, sdt, user, etc.  [2] Use the URL found in the index to drill down into the entities' representation.&lt;br /&gt;&lt;br /&gt;To implement the Mini-Feed, I need to drill down into the entities' representation to get the entries' runtime and data type specific stuff. &lt;br /&gt;&lt;br /&gt;For those of you wondering what the difference between timestamps and runtime are, timestamps are unique to all data entries.  It acts as the 'primary key' of an entry.  A runtime can exist in multiple entries and provides a way to 'batch' data together.  An example of a batch of data would be all of the entries associated with an unit test tool's execution.  Each batch would have information about the unit test's execution, such as whether or not a test passed or failed.&lt;br /&gt;&lt;br /&gt;Drilling down into each data entry is time-consuming due to the large number of data entries.  If the index has 5000 entries, I will have to make 5000 separate requests to get the entry specific information.  My tests of performing 3000 or so web requests to my local sensorbase took about 45 seconds to complete.  Thats just too long.  I think the overhead of making all those requests is causing the slowdown.  Thats my theory anyways...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The solution?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So I was thinking "How come the DailyProjectData services don't have that problem too?"  I believe the reason is that there is only one webservice call binding each entries' data to Java objects.&lt;br /&gt;&lt;br /&gt;So in order to remove the large amount of requests I will have to create a Mini-Feed service that can talk directly to the SensorBaseClient.   I am wondering if caching will get rid of this problem.  If so, I probably should hold off on writing a Mini-Feed service.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-1999565504489523564?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/1999565504489523564/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=1999565504489523564' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/1999565504489523564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/1999565504489523564'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2008/01/mini-feed-webservice-making-comeback.html' title='Mini-Feed Webservice Making a Comeback?'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-3035206113432397952</id><published>2008-01-23T00:58:00.000-10:00</published><updated>2008-03-16T02:17:34.052-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hackystat'/><title type='text'>Hackystat Mini-Feed Part 2</title><content type='html'>This weekend I did a bit of ruby hacking to parse out the sensor data information from the Sensorbase webservice calls and found it to be relatively easy.  Ruby is so nice ;)  As I was hacking I had this feeling that I was placing the logic to parse the data in the wrong place.  For my quick prototype, bunching all of the logic together was fine.  But it turns out I need a higher level of abstraction in the form of a new service.  &lt;a href="http://groups.google.com/group/hackystat-dev/msg/4ef6d1ed3ded82fd"&gt;Philip explains in more detail&lt;/a&gt; to Pavel and Dan Port in his email about creating a new service.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_gZ-LJtj9hxw/R5cjR-bD7bI/AAAAAAAAAEg/K4jJukZ4wbY/s1600-h/mini-feed-stack.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_gZ-LJtj9hxw/R5cjR-bD7bI/AAAAAAAAAEg/K4jJukZ4wbY/s320/mini-feed-stack.jpg" alt="" id="BLOGGER_PHOTO_ID_5158630689897442738" border="0" /&gt;&lt;/a&gt;In order to separate the view from the mini-feed business logic, I need a new service that can allow clients to retrieve the abstracted mini-feed information.&lt;br /&gt;&lt;br /&gt;This new service will allow multiple views such as the Rails webapp I'm writing, RSS feed viewers (Maybe RSS isn't a view, but I want people to have that information available via RSS), twitter, and other apps to be able to request the mini-feed information via webservice calls.&lt;br /&gt;&lt;br /&gt;Now what type of information can be requested?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I've only gotten through half of the RESTful Webservices book so I only know how (relatively speaking since I'm still a REST noob) to design a service allowing clients to GET information.  I'm probably going to take a look at the telemetry service or the &lt;a href="http://hackystat-sensorbase-uh.googlecode.com/svn/trunk/javadoc/org/hackystat/sensorbase/client/SensorBaseClient.html"&gt;SensorBaseClient&lt;/a&gt; class in order to figure out how to get my service working.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;With the new service comes a Mini-Feed REST API that I must design.  I have to think of what type of information can be requested by clients.  Here are some of my initial thoughts:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;- Mini-feed information spanning all projects, kind of like what twitter does on it's public timeline.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;- Relevant mini-feed information for a specific project.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;- Relevant mini-feed information for a set of users&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;- The start and end time of the information can be specified to reduce/expand the grain size.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;- Webservice calls to filter the data. (Explanation below)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The ideas I just listed above isn't anything new.  You can get all of that information using the sensorbase REST API.  I'm thinking that abstracting the webservice calls to a higher level will help filter the data that isn't useful for mini-feed purposes.  Clients lose the flexibility of getting all the data, but will hopefully gain an easier and smaller interface to get the information they need.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_gZ-LJtj9hxw/R5cov-bD7cI/AAAAAAAAAEo/gYw8RVQqqyQ/s1600-h/facebook_eq.JPG"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://4.bp.blogspot.com/_gZ-LJtj9hxw/R5cov-bD7cI/AAAAAAAAAEo/gYw8RVQqqyQ/s320/facebook_eq.JPG" alt="" id="BLOGGER_PHOTO_ID_5158636702851657154" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;So what is this filtering I'm talking about?  Pavel and Aaron turned me onto Facebook's News Feed preferences, which allows you to customize the information that appears in your News Feed.  The cool thing is that it doesn't completely remove all of the information that you don't like.  It just shows it less frequently.&lt;br /&gt;&lt;br /&gt;The goal would be to get this type of control in my Rails webapp and request the user's customized information using the "Mini-Feed service data filter" REST API.&lt;br /&gt;&lt;br /&gt;How does that sound?&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_gZ-LJtj9hxw/R5ch7ubD7ZI/AAAAAAAAAEQ/3uNE-zyZU24/s1600-h/mini-feed-stack.jpg"&gt;&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-3035206113432397952?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/3035206113432397952/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=3035206113432397952' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/3035206113432397952'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/3035206113432397952'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2008/01/hackystat-mini-feed-part-2.html' title='Hackystat Mini-Feed Part 2'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_gZ-LJtj9hxw/R5cjR-bD7bI/AAAAAAAAAEg/K4jJukZ4wbY/s72-c/mini-feed-stack.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-3200331143879161359</id><published>2008-01-17T23:52:00.000-10:00</published><updated>2008-03-16T02:17:34.053-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hackystat'/><title type='text'>Hackystat Stream of Development</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_gZ-LJtj9hxw/R5B4YN6OqRI/AAAAAAAAAEI/dPgC2tvdYK8/s1600-h/facebook_minifeed.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_gZ-LJtj9hxw/R5B4YN6OqRI/AAAAAAAAAEI/dPgC2tvdYK8/s320/facebook_minifeed.JPG" alt="" id="BLOGGER_PHOTO_ID_5156753930785302802" border="0" /&gt;&lt;/a&gt;Tonight I started working on the Hackystat version of &lt;a href="http://blogs.atlassian.com/developer/2008/01/jira_studio_stream_of_developm.html"&gt;Atlassian's Stream of Development Consciousness&lt;/a&gt;, which will tell mini-stories about what is currently happening in your development shop.  Much like Facebook's Mini Feed, we want to provide awareness to people about what you did, when you did it.&lt;br /&gt;&lt;br /&gt;The first thing I did was figure out how to request Hackystat data.  For that information I headed over to the &lt;a href="http://code.google.com/p/hackystat-sensorbase-uh/wiki/RestApiSpecification"&gt;Hackystat REST API Specification wiki&lt;/a&gt; page and took a look at what was available to me.  After a bit of head scratching and help from some fellow Hackystat hackers, I finally found the URI that should provide me with some interesting information.&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now that I got past that hurdle, now I can start to think about getting my web application (written in Rails yay!) to parse and display the right information.  There are still a bit of things to think about.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;What type of information do we display?&lt;/span&gt;&lt;br /&gt;I was talking to Aaron online tonight and he came up with the idea of just displaying the amount of events that have taken place.  For example, one mini-stream could say, '&lt;span style="font-style: italic;"&gt;3 hours total dev time,  50 unit test invocations with 4 failing tests, and 200 builds in the last 2 hours&lt;/span&gt;'.&lt;br /&gt;&lt;br /&gt;Of course that may be enough information for our little data stream, but it would be interesting to get more context behind the collected data.  Perhaps we could start add comments to the mini-feeds?  What if we added some telemetry to the mini-feeds?  That would be cool to see how the mini-feeds turn into a large information feed over time with a telemetry chart.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;What type of information should be collected/filtered?&lt;/span&gt;&lt;br /&gt;Currently commit data from Subversion is collected once a day.  I think it would be important to see commit information in the mini-feed.  Committing code is a good indicator of progress so it would be nice to get more up-to-date information with respect to commits.&lt;br /&gt;&lt;br /&gt;Another metric that we commit once a day is Issue data from JIRA.  It would be good if we could collect that data more often so that we could update the mini-feed with JIRA event information.&lt;br /&gt;&lt;br /&gt;I think that Filemetric and Code Issue data wouldn't be as useful as UnitTest and Commit information.  I don't really know about this one.  Maybe someone would want to see what kinds of FindBugs errors you have ;)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Cool New Features&lt;br /&gt;&lt;/span&gt;DrillDown information would be cool because if you find an interesting mini-event, you could click on the event link and see what types of unit test failures are happening or what classes were commited.&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;An RSS feed with the mini-feed information would fit nicely into my Google Desktop app.&lt;br /&gt;&lt;br /&gt;Commenting on feeds would also be cool.&lt;br /&gt;&lt;br /&gt;Mini-feed comparisons at the grain size of a day?  Is your mini-feed activity the same during the week the same?&lt;br /&gt;&lt;br /&gt;Imply information from the data in the mini-feed.  For example, if Aaron and I commit changes to the same module or are running similar unit tests, can we say that we are working together?  '&lt;span style="font-style: italic;"&gt;Aaron and Austen have been working on module mini-feed for 2 hours&lt;/span&gt;'.  Totally awesome.&lt;br /&gt;&lt;br /&gt;&lt;insert&gt;&lt;br /&gt;&lt;br /&gt;So fun!&lt;/insert&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-3200331143879161359?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/3200331143879161359/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=3200331143879161359' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/3200331143879161359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/3200331143879161359'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2008/01/hackystat-stream-of-development.html' title='Hackystat Stream of Development'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_gZ-LJtj9hxw/R5B4YN6OqRI/AAAAAAAAAEI/dPgC2tvdYK8/s72-c/facebook_minifeed.JPG' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-1054569719893316551</id><published>2008-01-15T21:49:00.000-10:00</published><updated>2010-12-12T07:31:41.543-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life Performance'/><title type='text'>Lists are fun!</title><content type='html'>&lt;p class="MsoNormal" style="margin-bottom: 12pt;"&gt;I'm a bit late, but I've been reading lists of what people want to accomplish this year and I think it's time to write one of my own.  I personally don't believe in New Year's resolutions since I know I won't keep them, but I've done pretty well with blogging twice a week.  I'm going to see if I can keep up the technical improvements this year.&lt;/p&gt;  &lt;ol start="1" type="1"&gt;&lt;li class="MsoNormal" style="margin-bottom: 12pt;"&gt;&lt;span style="font-weight: bold;"&gt;Improve my writing skills&lt;/span&gt;&lt;br /&gt;    Since August I've tried to up keep this blog with technical topics and      personal rants.  Not all of them have been my finest work (actually a      lot of them were horrible), but after making time for this blog, I think      it's a great personal improvement project.  You get to share      ideas with the people that read your blog, work on your writing      skills, and best of all, you can jot down your ideas and thoughts.  I      often have ideas that sound excellent in my head, but I found that things      aren't so clear once you start to talk about it.  I notice that I      come up with these great one sentence ideas for blogs and have trouble writing      3 paragraphs.   Writing it down will help my thinking process. &lt;/li&gt;&lt;li class="MsoNormal" style="margin-bottom: 12pt;"&gt;&lt;span style="font-weight: bold;"&gt;Ruby/Apache Wicket and Hackystat&lt;/span&gt;&lt;br /&gt;    This past year I spent time writing a Ping Pong ranking application with      help from Aaron.&lt;span style=""&gt;  &lt;/span&gt;Learning a      different language was great and I now can talk about design      patterns and technical topics by comparing other languages to Ruby.&lt;span style=""&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Back when Hackystat 8 was being just      started to be re-written, there was talk of a Ruby interface.&lt;span style=""&gt;  &lt;/span&gt;We have decided to explore other options      using Ruby or Apache Wicket.&lt;span style=""&gt;  &lt;/span&gt;The      current interface was written in GWT by David and Pavel, but I think there      was some difficulty developing with GWT.&lt;span style=""&gt;       &lt;/span&gt;Feel free to talk to them for all the nitty gritty details.&lt;span style=""&gt;  &lt;/span&gt;Now that we have some new Hackystat      developers coming into the lab, we are going to explore a new      interface.&lt;span style=""&gt;  &lt;/span&gt;I want to help out      development to become part of the Ruby community ;D&lt;span style="font-family:Wingdings;"&gt;&lt;span style=""&gt;&lt;/span&gt;&lt;/span&gt;      &lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-weight: bold;"&gt;Practice Puzzles&lt;/span&gt;&lt;br /&gt;    One of the themes of this year’s learning will be focused on buffing up      not only my technical abilities, but to work on my thinking power.&lt;span style=""&gt;  &lt;/span&gt;I will be the first to admit that I am      not the swiftest person out there.&lt;span style=""&gt;       &lt;/span&gt;I have trouble understanding what people are saying and piecing      things together.&lt;span style=""&gt;  &lt;/span&gt;I have a hard time      visualizing concepts in my head.&lt;span style=""&gt;       &lt;/span&gt;That is the main reason I love dry erase markers and white      boards.&lt;span style=""&gt;  &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I am thinking I need to      start giving my brain more practice.&lt;span style=""&gt;       &lt;/span&gt;I’ve decided that I’m going to massage my brain by working on      technical puzzle books.&lt;span style=""&gt;  &lt;/span&gt;I just      bought &lt;a href="http://www.amazon.com/Puzzles-Programmers-Pros-Dennis-Shasha/dp/0470121688/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1200474671&amp;amp;sr=8-1"&gt;Puzzles for Programmers and Pros&lt;/a&gt; from Amazon and plan to work through it once I      finish reading &lt;a href="http://www.amazon.com/RESTful-Web-Services-Leonard-Richardson/dp/0596529260/ref=pd_bbs_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1200474723&amp;amp;sr=1-1"&gt;RESTful Webservices&lt;/a&gt;.&lt;span style=""&gt;       &lt;/span&gt;Not only will this help me work on my brain power, it will be great      practice for intern and my own interviews.&lt;span style=""&gt;  &lt;/span&gt;We also have a large Rubik’s cube      contingent at work.&lt;span style=""&gt;  &lt;/span&gt;I plan on      buying a cube to practice my visualizing skills at home.&lt;br /&gt;     &lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br /&gt;     &lt;!--[endif]--&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-weight: bold;"&gt;Play with Python&lt;/span&gt;&lt;br /&gt;    I don’t really have much to say here.&lt;span style=""&gt;       &lt;/span&gt;Python is a dynamic language that I’ve some interest in for a      while.&lt;span style=""&gt;  &lt;/span&gt;I plan on working with a lot      of Ruby this year, so I probably won’t have much time for Python.&lt;span style=""&gt;  &lt;/span&gt;Getting introduced to it this year is      definitely doable.&lt;span style=""&gt;  &lt;/span&gt;At the very      least it will satisfy my dynamic language curiosities.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-weight: bold;"&gt;Buff up my outward and      critical thinking&lt;/span&gt;&lt;br /&gt;    As I mentioned earlier, thinking is not one of my strong points.&lt;span style=""&gt;  &lt;/span&gt;Aaron often talks about how he looks for      interns that have outward thinking.&lt;span style=""&gt;       &lt;/span&gt;I am not 100% sure what he means by outward thinking, but I assume      he means that he wants people to think of problems that need to be      solved.&lt;span style=""&gt;  People should &lt;/span&gt;not only solve their own problems, but think outside of their domain and take a look at other problems to      solve.&lt;span style=""&gt;  &lt;/span&gt;He wants people to think      critically about things that might spark some interest from others.&lt;span style=""&gt;  &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I totally have a deficiency in this      area.&lt;span style=""&gt;  &lt;/span&gt;I am an inward thinker      meaning I usually think about implementation level details rather than the big      picture.&lt;span style=""&gt;  &lt;/span&gt;I think critically about      code, process, and software development, but I don’t look at why I’m so      concerned about it all.&lt;span style=""&gt;  I really need to &lt;/span&gt;take a look at the problem first before      diving in the solution.&lt;span style=""&gt;  &lt;/span&gt;&lt;br /&gt;  &lt;br /&gt;    I’m not sure how I’m going to tackle this problem this year.&lt;span style=""&gt;  &lt;/span&gt;Hopefully people can help me along the      way.&lt;span style=""&gt;  &lt;/span&gt;At the very least, I am aware      of the problem, so that is a good start.&lt;br /&gt;     &lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br /&gt;     &lt;!--[endif]--&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-weight: bold;"&gt;Give a speech to a group      about something in technology&lt;/span&gt;&lt;br /&gt;    I was scheduled to answer questions from Sandy Ho at the &lt;a href="http://www.htdc.org/events/view.asp?ID=1753"&gt;HTDC Science and Technology Fair&lt;/a&gt; about what      Referentia is looking for and can give to it’s potential employees.&lt;span style=""&gt;  &lt;/span&gt;Sadly the Q/A session was canceled and      we ended up emailing the answers to her.&lt;span style=""&gt;       &lt;/span&gt;This year I want to give a speech to a group about what companies      are looking for in their budding software engineers.&lt;span style=""&gt;  &lt;/span&gt;It would be nice to give a speech to      students at UH and talk about the importance of reading, hacking,      internships, and all the good stuff about software development.&lt;span style=""&gt;  &lt;/span&gt;Right now I feel that UH has too much      emphasis on theory and not enough on software development (aside from      Philip’s class).&lt;span style=""&gt;  &lt;/span&gt;It is up to Hawaii's hitech companies to take some initiative and provide internships      that give students the experience necessary for them to succeed.&lt;span style=""&gt;  &lt;/span&gt;Hopefully I can give a convincing speech      to some people and get them motivated.&lt;/li&gt;&lt;/ol&gt;    &lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;br /&gt;Phew.  50 weeks to go.&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;Edit.  Add one more to the list.:&lt;/p&gt;&lt;p class="MsoNormal"&gt;aaron: &lt;span style="font-size:100%;"&gt;okay.&lt;/span&gt;&lt;br /&gt;aaron: &lt;span style="font-size:100%;"&gt;back to goal. &lt;/span&gt;&lt;br /&gt;aaron&lt;span style="font-size:100%;"&gt;: want you to find a hackystat research question and hypothesis. &lt;/span&gt;&lt;br /&gt;aaron&lt;span style="font-weight: bold;"&gt;:&lt;/span&gt;&lt;span style="font-size:100%;"&gt; thats your goal.&lt;/span&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-1054569719893316551?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/1054569719893316551/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=1054569719893316551' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/1054569719893316551'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/1054569719893316551'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2008/01/lists-are-fun.html' title='Lists are fun!'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-1520147892988028553</id><published>2008-01-13T23:14:00.000-10:00</published><updated>2010-01-10T13:05:31.805-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life Hacking'/><title type='text'>Sharing is addicting</title><content type='html'>Today as I was reading some blogs on my mobile and sharing stuff, I felt that twinge.  That twinge that subconsciously tells me, "Hey why are you sharing that?  Everyone knows that.  People are going to see that you shared that and be like WTF." &lt;br /&gt;&lt;br /&gt;That feeling that overcame me was totally awesome.  It's that feeling that makes people actually care about the quality of their software.  People don't want to let their team down.  Similarly, I don't want to let you all down by sharing crappy articles.  After all, I know that you are all like me and are too busy coding, reading, thinking, blogging, and all that other stuff  (eating, sleeping, face-to-face interaction) to waste time reading boring articles.&lt;br /&gt;&lt;br /&gt;Thinking about it more, sharing is kind of like console gaming.  You start up your Nintendo Wii, play some Wii Tennis, and dominate.  You are a pro.  Your rank is as high as it possibly can be.  You destroy the computer.  Then you go to your company summer party and get &lt;a href="http://en.wikipedia.org/wiki/Pwn"&gt;pwned&lt;/a&gt; by your coworker.  (True story)&lt;br /&gt;&lt;br /&gt;Sharing items lets you get out of the sandbox.  The range of topics you learn about grows out of control.  You might just find something that interests you.  Sharing has totally infected me.  Every time I login to Google Reader I try to select interesting articles that might spark some interest.  Sharing items is like an implicit way of blogging.  They look at the &lt;a href="http://www.google.com/reader/shared/17269581269643503149"&gt;items I share on Google Reader&lt;/a&gt; and wonder if any of the links are worth clicking.  Now I have to make sure that I read blogs often, constantly sharing new things or else people might stop reading my shared items.  What will they think of me?  Sharing is important, but so is the stuff that is being shared.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-1520147892988028553?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/1520147892988028553/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=1520147892988028553' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/1520147892988028553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/1520147892988028553'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2008/01/sharing-is-addicting.html' title='Sharing is addicting'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-1531420523615618537</id><published>2008-01-06T22:35:00.000-10:00</published><updated>2010-01-06T08:05:31.884-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>GeoTIFF Hell</title><content type='html'>This weekend I spent a lot of time manipulating GeoTIFF images for work.  GeoTIFF images have embedded meta-tags that contain coordinate, scale, and other miscellaneous information about the wrapping image.  My only problem with GeoTIFFs is that the tag information is hard to access.  The metadata isn't human readable so I had to use another application to read it.  Man that sucks.&lt;br /&gt;&lt;br /&gt;I had a problem where I had different pixel coordinate spaces for the GeoTIFF and the GeoTIFF's canvas.  Figuring out a common way to relate the two pixel spaces was a pain because I didn't know what information was available to me.  It would have been so much easier if I was able to take the graphic, look at it's metadata in a text editor (Textpad yah!), and see what I could do.  What I had to do instead, was load the image using my image manipulation API and see what data was available via the debugger in Eclipse.  Oh I also had to read the GeoTiff specification (yuck).  What a pain.  Not only did I not know what the metadata meant, I had to do this every time I wanted to see what information was available.  Lots of overhead compared to reading the information in Textpad whenever I wanted.  Why not just have a key-value pair of human-readable information? &lt;br /&gt;&lt;br /&gt;Scale= 10 meters per pixel&lt;br /&gt;Lat=10.10&lt;br /&gt;Lon=-86&lt;br /&gt;etc etc.&lt;br /&gt;&lt;br /&gt;Aaron brought up the idea at work about images with context.  He seems to enjoy looking at pictures instead of reading (blasphemy!).  If there was a reliable way to search for images based on what was happening in the image rather than whatever Google does with their image search, we would be better off.  This idea could be spread to all types of images.  If all images had a standard text format that could be read, parsed, and manipulated, we might be able to create some interesting applications.  Flicker currently allows context to be associated with images by users manually adding tags to their images.  Why not embed the information in the image just like GeoTiffs?  Hopefully the metadata would be of the human-readable variety.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-1531420523615618537?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/1531420523615618537/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=1531420523615618537' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/1531420523615618537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/1531420523615618537'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2008/01/geotiff-hell.html' title='GeoTIFF Hell'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-5825329800195784203</id><published>2007-12-21T00:00:00.000-10:00</published><updated>2010-01-10T12:54:03.245-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life Hacking'/><title type='text'>Why Everyone Should Get Interviewed</title><content type='html'>Over the past couple weeks, I was &lt;a href="http://kagawaa.blogspot.com/2007/12/interview-with-austen-ito.html"&gt;getting interviewed by Aaron&lt;/a&gt;.  This was the first time I have been interviewed outside of a job setting.  After going through the process, I think that interviews are a good way of thinking about where you are in your career, what you need to improve on, and what you should strive for.  The interview process is a lot like &lt;a href="http://www.randsinrepose.com/archives/2007/12/06/a_brief_glimpse.html"&gt;revisiting your resume every six months&lt;/a&gt;(which I still have not gotten around to doing).  Here are some observations I had about getting interviewed:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Having extra time to gather your thoughts for an answer is a great exercise.  Every question that Aaron asked required me to stop and think about an answer that expressed how I feel.  It also made re-evaluate my reasoning behind my answers.  I was happy to find that I couldn't find answers to some of his questions because I now have a concrete starting point to think about where I want to go.&lt;/li&gt;&lt;li&gt;The interview questions should be focused on a certain area of be effective.  In Aaron's interview, he asked me how I got started, what I like about developing software now, and where I want to do later.  I liked how he made me think about several aspects in my career.  If he didn't ask me the right questions, I wouldn't be thinking about the right things. &lt;br /&gt;&lt;/li&gt;&lt;li&gt;Using back-and-forth emails to interview a person is better than I thought.  I originally thought it would be better to just send one email with a whole bunch of questions.  After doing this interview, where I spent long periods of time just thinking of an answer, I was glad that each email only had one question.  It felt like I was accomplishing something and I didn't half-ass the end portion of the interview.&lt;/li&gt;&lt;li&gt;Self-introspection is fun!  You get to learn about yourself.  It's interesting when you learn new things about someone you should know the best.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;I definitely recommend getting interviewed.  It was a great experience that I want to have again in the near future.  It is actually very easy to get interviewed.  Just ask a friend, neighbor, colleague to think of themselves at a bar having a few drinks with you.  After everyone is feeling good, fire away with the questions.  Its a relaxed atmosphere with absolutely no pressure.  All upside, no downside.  Anyone want to get interviewed by me?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-5825329800195784203?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/5825329800195784203/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=5825329800195784203' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/5825329800195784203'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/5825329800195784203'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2007/12/why-everyone-should-get-interviewed.html' title='Why Everyone Should Get Interviewed'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-876591389762261533</id><published>2007-12-17T23:19:00.000-10:00</published><updated>2010-01-10T13:03:57.010-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Code Improvement'/><title type='text'>Alcohol + Hacking != Increase in Creativity/Debugging</title><content type='html'>Tonight I tried a little experiment that involved a martini and some code.  I have read and heard about the glorious effects of alcohol on the ability to think differently while hacking.  Alcohol supposedly can provide you with some "liquid creativity".  Much like the "liquid confidence" we are all familiar with, especially at those late night karaoke parties.  Thinking outside the box can be yours when you grab some booze and start hacking.  All ready to be ultra productive, I had some of my drink and started coding.  Here is what I thought would happen:&lt;br /&gt;&lt;br /&gt;"Hey I see what this code is doing!  Let's try something new.  Why not.  What else do I have to lose.  Code code code hack hack hack.  This is great!  I should drink and code at work!"&lt;br /&gt;&lt;br /&gt;Here is what really happened:&lt;br /&gt;&lt;br /&gt;"Oh god I just deleted all of the class again.  CTRL + Z.  Grrrr why can't I type correctly.  Why doesn't this work???? I totally wrote a unit test and now its failing.  I didn't type anything.  CTRL + Z AGAIN.  What was that class called again? Search search search fix typo fix typo backspace backspeace aldkasjfasdlfjlasdfsf"&lt;br /&gt;&lt;br /&gt;This was after half a martini.  I'm a lightweight drinker, but this was ridiculous.  My motor skills were not kicking in tonight when I was trying to code.  Even when I had to figure out why something was working, I felt no difference in my ability to debug.  I actually got more frustrated cause it didn't make sense.  My thinking was just clouded from the alcohol.&lt;br /&gt;&lt;br /&gt;Worst hacking experience.  ever.&lt;br /&gt;&lt;br /&gt;(You Hackystat hackers out there know I tried doing this the day before our we get ready for the public release.  It's ok.  Unit tests pass.  Woohoo!)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-876591389762261533?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/876591389762261533/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=876591389762261533' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/876591389762261533'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/876591389762261533'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2007/12/alcohol-hacking-increase-in.html' title='Alcohol + Hacking != Increase in Creativity/Debugging'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-4262246632282531353</id><published>2007-12-13T23:26:00.000-10:00</published><updated>2007-12-16T23:47:49.610-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hackystat'/><title type='text'>Unit Tests Show Me The Way</title><content type='html'>After a week long hiatus, I finally got back into Hackystat hacking.  I re-started my work on the &lt;a href="http://code.google.com/p/hackystat-analysis-dailyprojectdata/wiki/RestApiSpecification"&gt;Commit Daily Project Data Analysis Service&lt;/a&gt;.  After some initial startup lag (getting a drink, listening to some easy hacking music radio, etc) I was ready to whip out some code and get it done.  Or so I thought.  I had no idea where to begin.  I only had 3 classes, but I still was lost.  What was I working on a week ago?  Does everything work or do I need to debug?  Oh man this is going to be a long night...&lt;br /&gt;&lt;br /&gt;Then I remembered that I wrote unit tests as I was coding.  I did a quick ALT+SHIFT+X+T and saw the little green bar appear in eclipse.  (I'm running unit tests with a keyboard shortcut for those of you who don't use eclipse)  Hooray, it seems that everything I did in that class is functional.  I did this for the remaining two classes and was able to figure out relatively quickly what I completed the previous week.&lt;br /&gt;&lt;br /&gt;Writing unit tests while coding continues to amaze me with it's usefulness.  I can add "restarting long forgotten work" to the existing list of unit test uses such as "debugging while I code" and "ensuring the correctness of my logic".  I remember long ago that someone told me that unit tests help developers learn about the intent of someone's code.  I guess this is a prime example of showing someone (me!) what the hell I did last week.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-4262246632282531353?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/4262246632282531353/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=4262246632282531353' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/4262246632282531353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/4262246632282531353'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2007/12/unit-tests-show-me-way.html' title='Unit Tests Show Me The Way'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-1377814142388990823</id><published>2007-12-09T21:50:00.000-10:00</published><updated>2010-01-06T08:05:31.885-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>JAXB Pet-Peeve</title><content type='html'>A while back &lt;a href="http://cox-engineering-log.blogspot.com/2007/11/27myisern-13-final-release.html"&gt;Randy Cox&lt;/a&gt; made a comment on his blog about his teammate disliking JAXB:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"Another aspect of our differences is Brian's drive to build a high quality system from the start, while I tend to like to start with the basics and increase scope incrementally. Brian's strong dislike of JaxB, resulted in a lot of work on the Model to mitigate the JaxB limitations."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Curious about what the limitations of JAXB were, I made a comment on his blog.  Sadly I was left out to dry on the matter and forgot about it for a month.  This past week at work I revisited my JAXB code and figured out one JAXB limitation.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;There is no easy to abstract JAXB auto-generated classes.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So what normally happens with JAXB is:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Create an XML schema&lt;/li&gt;&lt;li&gt;Run the XJC compiler, which creates the JAXB auto-generated classes.&lt;/li&gt;&lt;li&gt;Write the java code using the JAXB classes to marshall and unmarshall data.&lt;/li&gt;&lt;/ol&gt;The problem occurs when you have 2 JAXB objects that do similar things:&lt;br /&gt;&lt;br /&gt;Apple Object Interface:&lt;br /&gt;setName()&lt;br /&gt;setColor()&lt;br /&gt;&lt;br /&gt;Orange Object Interface:&lt;br /&gt;setName()&lt;br /&gt;setColor()&lt;br /&gt;&lt;br /&gt;So now you have 2 classes that perform the same operations.  You end having to write code specific to each object:&lt;br /&gt;&lt;br /&gt;Apple apple = new Apple();&lt;br /&gt;apple.setName("Ringo");&lt;br /&gt;apple.setColor("Red");&lt;br /&gt;&lt;br /&gt;Orange orange = new Orange();&lt;br /&gt;orange.setName("Japanese name for an orange");&lt;br /&gt;orange.setColor("Orange");&lt;br /&gt;&lt;br /&gt;This is an excellent time to abstract their behaviors to enforce the &lt;a href="http://en.wikipedia.org/wiki/Don%27t_repeat_yourself"&gt;DRY&lt;/a&gt; principle.  Why don't we go ahead and create a 'Fruit' interface that abstracts the behavior of each object?  Technically you can, but because the Apple and Orange classes are auto-generated, it isn't such a good idea to edit them directly.  If you ever decide to change the XML schema, you will have to re-run the XJC compiler, which in turn will overwrite your changes.  Another alternative is to wrap the JAXB objects in a wrapper class to provide a common interface.  If the schema changes, the auto-generated class changes will be transparent to the wrapper's clients.&lt;br /&gt;&lt;br /&gt;Although it is possible to provide common interfaces between the JAXB objects, there is no clean way to do it.  Maybe there should be a way to specify behaviors of objects to the XJC compiler.  That would remove the round-about way of abstracting the JAXB classes.&lt;br /&gt;&lt;br /&gt;I'm sure that there even more limitations to the JAXB package, but currently it's benefits outweigh the drawbacks.  XML parsing is fun again!  (Well, more fun than manipulating the XML DOM tree directly)&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-1377814142388990823?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/1377814142388990823/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=1377814142388990823' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/1377814142388990823'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/1377814142388990823'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2007/12/jaxb-pet-peeve.html' title='JAXB Pet-Peeve'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-3151782451821602865</id><published>2007-12-06T22:34:00.000-10:00</published><updated>2010-12-12T07:32:11.933-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life Hacking'/><title type='text'>My Resume Objective Is Crap</title><content type='html'>&lt;p class="MsoNormal"&gt;&lt;i&gt;Your resume, like your objective, should give me a sense of you and where you're going. I want to see a little ego and I want to see your character because I'm not hiring a flat piece of paper, I'm hiring a person.&lt;br /&gt;- &lt;a href="http://www.randsinrepose.com/archives/2007/12/06/a_brief_glimpse.html"&gt;Rands in Repose, A Brief Glimpse&lt;/a&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;After reading &lt;st1:place st="on"&gt;Rands&lt;/st1:place&gt;' article on how to write a good resume objective, I decided to take a look at my old &lt;a href="http://www2.hawaii.edu/%7Eausten/files/resume.pdf"&gt;resume&lt;/a&gt;. What I found is a crappy objective statement:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;To bring my knowledge and experience from research on software engineering processes to the real world; to develop software for a world class software development company.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Wow. So I want to bring it to the real world huh? And a world class software development company aye? Would it make sense to put, "to develop software for a decent company." No wonder employer's eyes glaze over when they hit the first part of potential candidate’s resumes.&lt;br /&gt;&lt;br /&gt;After some brainstorming, I worked out a preliminary objective:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;I need to work in an environment that values developers over products.   When this happens I can write software that is useful and will make a difference.  As a software engineer, I work hard to write quality software.&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;This objective says that I want to work somewhere that doesn't impose crazy deadlines and micro-management to get software out the door.  It says that I want to be someplace that gives software engineers interesting problems and turns them loose.  If you want quality software, give me a problem and get out of my way.&lt;i&gt;  &lt;/i&gt;This statement definitely needs work, but I think it's a good start.  I think it fits the situation of "sitting at a bar, having a couple drinks, talking about software with a friend."&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;I also took a look at the rest of my old resume. I think it's time to wipe the dust off and update it (Stay tuned for an update in another blog).  I need to know where I am now, and where I want to go.&lt;br /&gt;&lt;br /&gt;No direction + No Awareness = Career Death.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-3151782451821602865?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/3151782451821602865/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=3151782451821602865' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/3151782451821602865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/3151782451821602865'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2007/12/my-resume-objective-is-crap.html' title='My Resume Objective Is Crap'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-6524959502896662562</id><published>2007-12-03T23:41:00.000-10:00</published><updated>2010-01-10T13:04:44.935-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Code Improvement'/><title type='text'>Serve your customers</title><content type='html'>&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;i style=""&gt;The ability to accept feedback from *anybody*.&lt;span style=""&gt;  &lt;/span&gt;I find the best feedback comes in the "customer is always right" sense, where the intern is a "customer" of your design. If they feel like something is more complicated than it ought to be, there's a reasonable chance they are right, even though their identification of the "root problem" may be laughably wrong. And even if they are completely wrong and it really does have to be that complex, a humble designer should not immediately resort to "Because I said so", but should at least try to explain why. &lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; - &lt;/o:p&gt;&lt;a href="http://www.codinghorror.com/blog/archives/000051.html"&gt;http://www.codinghorror.com/blog/archives/000051.html&lt;/a&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;With a new member on my team at work, I gave him a task to implement a new feature for an upcoming milestone.&lt;span style=""&gt;  &lt;/span&gt;He was to use code that I wrote to implement a new feature.&lt;span style=""&gt;  &lt;/span&gt;After spending some time learning how the code works, he came up to me and said, “&lt;span style="font-style: italic;"&gt;Austen, isn’t there an easier way to do this?&lt;/span&gt;”&lt;span style=""&gt;  &lt;/span&gt;After explaining to him the reason why things are they way they are, he trodded off and churn out more code.&lt;span style=""&gt;  &lt;/span&gt;Once again he came back to me a bit later saying, “&lt;span style="font-style: italic;"&gt;I’ve been using your API and here are the areas that I am having a problem with.&lt;/span&gt;”&lt;span style=""&gt;  &lt;/span&gt;I wondered what was wrong.&lt;span style=""&gt;  &lt;/span&gt;I had no problems using my own code. Once again I worked through the code with him and explained it in even more detailed.&lt;span style=""&gt;  &lt;/span&gt;A bit frustrated, he went off to hack.&lt;span style=""&gt;  &lt;/span&gt;We ended up talking about the code a short while later.&lt;/p&gt;    &lt;p class="MsoNormal"&gt;Looking back, I learned something valuable.&lt;span style=""&gt;  &lt;/span&gt;I learned that I should &lt;a href="http://www.codinghorror.com/blog/archives/000051.html"&gt;be humble&lt;/a&gt;, rather than handling the situation by saying:&lt;/p&gt;    &lt;p class="MsoNormal" style="margin-left: 0.25in;"&gt;&lt;b style=""&gt;Stop bugging me.&lt;span style=""&gt;  &lt;/span&gt;Use my API.&lt;span style=""&gt;  &lt;/span&gt;It’s awesome.&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;      &lt;p class="MsoNormal"&gt;After the second time he came confused, I should’ve stopped and said:&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.25in;"&gt;&lt;b style=""&gt;Hrm.&lt;span style=""&gt;  &lt;/span&gt;I see you are back again.&lt;span style=""&gt;  &lt;/span&gt;Is my code too complicated to be used by others?&lt;span style=""&gt;  &lt;/span&gt;Let’s talk about why you are having problems.&lt;span style=""&gt;  &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt; &lt;br /&gt;The new member on my team because a “customer” of my design.&lt;span style=""&gt;  &lt;/span&gt;He brought to light very large flaws in my original design.&lt;span style=""&gt;  &lt;/span&gt;My code ended up being a lot more complex that it should have been.&lt;span style=""&gt;  &lt;/span&gt;This was evident in the large amount of crazy complicated code required to implement the upcoming feature.&lt;span style=""&gt;  &lt;/span&gt;    &lt;p class="MsoNormal"&gt;I believe that you don’t write code for yourself, you write it for others.&lt;span style=""&gt;  &lt;/span&gt;After all, you should know the in’s and outs of your code since you wrote it.  If you belonged to a one-person team, cowboyed it up, and wrote the next Mac OS, then you don't need to be clear about what you are doing.  But if you are like the rest of the software world, your code will be read by your team.  If you hide the intent of your code or don’t document what’s expected, your team will be confused.&lt;span style=""&gt;  &lt;/span&gt;It's great that you know if you pass in a value of ‘&lt;a href="http://en.wikipedia.org/wiki/Answer_to_Life,_the_Universe,_and_Everything"&gt;42&lt;/a&gt;’ to your method, you find out the answer to the meaning of life.&lt;span style=""&gt;  &lt;/span&gt;But if you don’t make it obvious, someone who has never read The Hitchhikers Guide to the Galaxy isn’t going to know what the hell you are talking about.&lt;span style=""&gt;  &lt;/span&gt;If someone tells you “Hey your API sucks.”&lt;span style=""&gt;  &lt;/span&gt;Maybe it does suck and you should stop and investigate.&lt;span style=""&gt;  &lt;/span&gt;They are doing you a huge favor by helping you pin point the areas of suckiness. You should aim to please your customers.&lt;span style=""&gt;  &lt;/span&gt;After all, they are always right.&lt;/p&gt;&lt;p class="MsoNormal"&gt;On a side note, don’t be afraid to suck.&lt;span style=""&gt;  &lt;/span&gt;&lt;a href="http://www.codinghorror.com/blog/archives/000530.html"&gt;Suck less every year&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-6524959502896662562?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/6524959502896662562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=6524959502896662562' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/6524959502896662562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/6524959502896662562'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2007/12/serve-your-customers.html' title='Serve your customers'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-7602416219618190769</id><published>2007-11-26T00:23:00.000-10:00</published><updated>2010-01-10T13:05:09.572-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Code Improvement'/><title type='text'>Random Recursion Thoughts</title><content type='html'>I was thinking about recursion earlier today so I decided to do some snooping around.  &lt;a href="http://en.wikipedia.org/wiki/Recursion_%28computer_science%29"&gt;Wikipedia &lt;/a&gt;has a nice section on recursion.  Back in my college days, I learned a nifty little language called Scheme.  Some of my classmates totally hated that language.  They had trouble getting around the huge amounts of nested parentheses and the endless horde of recursion.  Recursion here, recursion there, car, cdr, cdr, car.  (Don't worry I also forgot what car and cdr mean in Scheme)  In my opinion,  recursion is awesome.  I don't use it very often in practice, but I learned how to think about function calls by learning recursion. &lt;br /&gt;&lt;br /&gt;I heard some one say that that Scheme is a lot like Lisp.  I know that the authors of &lt;a href="http://xkcd.com/"&gt;Xkcd&lt;/a&gt; think that it is a godly language.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://imgs.xkcd.com/comics/lisp.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 661px; height: 230px;" src="http://imgs.xkcd.com/comics/lisp.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;After researching a bit, I did some simple recursion problems.  Reversing characters, computing numbers, etc.  It made me miss recursion...&lt;br /&gt;&lt;br /&gt;I wonder what students are learning today.  Has recursion been phased out?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-7602416219618190769?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/7602416219618190769/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=7602416219618190769' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/7602416219618190769'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/7602416219618190769'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2007/11/random-recursion-thoughts.html' title='Random Recursion Thoughts'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-4562191662367777587</id><published>2007-11-19T00:00:00.000-10:00</published><updated>2007-11-19T00:47:21.109-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hackystat'/><title type='text'>Do you know me Hackystat?</title><content type='html'>James turned me on to a streaming music website called &lt;a href="http://pandora.com/"&gt;Pandora&lt;/a&gt;.  Great website.  Good music.  Nice eye candy.  If you haven't been to Pandora before, I will break it down for you.  They allow you to give a thumbs up or thumbs down to currently streaming song in the genre of your choice.  From there they do some "music selection magic" and select a different song that usually is something you'll like.  They probably use similar ratings from other users with the same musical tastes.  So far I'm really happy with Pandora.  I'm hearing bands I've never heard of before that I'm starting to like.  But the most interesting part of Pandora is the feeling I get when I'm logged on.  It's uncanny.  I feel like Pandora knows me.  With music selections, &lt;span style="font-style: italic;"&gt;it feels like it knows who I am&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;With all the social networking, open social, and collective intelligence talk floating around the internet, I have been thinking that it would be cool if Hackystat would go further and try to  "understand the people behind the metrics."  We currently collect project data and developer data to a certain extent.  From there we infer certain things like the health and direction of project or a developer's activities.  What we don't do is analyze the people responsible for the direction of the project.  There are many negative issues surrounding the use of developer metrics to analyze people.  A big thing is that there is no way to accurately represent who a developer is with the data that is collected.  There are just too many intagibles behind software development.  Using developer level metrics in a scientifically proven way is hard and we have not solved that problem yet.  But what if we did?&lt;br /&gt;&lt;br /&gt;Would more people embrace Hackystat if there was a way for people to relate to the their own data?  Maybe their is some type of hidden disconnect between the metrics and people.  I know that I personally don't log onto Hackystat and say, "Wow this tool really reflects who I am as a developer."  Is that really useful?  I don't know, but wouldn't it be awesome if you could feel the same type of emotional connection just like when Pandora starts playing another awesome song (which it did just now).&lt;br /&gt;&lt;br /&gt;Developer level metrics are interesting.  I hope we can find an interesting and useful way to utilize it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-4562191662367777587?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/4562191662367777587/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=4562191662367777587' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/4562191662367777587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/4562191662367777587'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2007/11/james-turned-me-on-to-streaming-music.html' title='Do you know me Hackystat?'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-6090428931045571872</id><published>2007-11-16T00:33:00.000-10:00</published><updated>2010-01-10T13:05:09.572-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Code Improvement'/><title type='text'>Reviewing Code Reviews</title><content type='html'>This is an additional post to &lt;a href="http://kagawaa.blogspot.com/2007/11/learning-how-to-run-code-reviews.html"&gt;Aaron's blog&lt;/a&gt; about a review I moderated.&lt;br /&gt;&lt;br /&gt;Over the past couple of months, I've tried to increase my code reviewing &lt;a href="http://kagawaa.blogspot.com/2007/11/work-on-your-soft-skills.html"&gt;soft skill&lt;/a&gt;.  Early on I gathered feedback about my ability to moderate code reviews.  Like any noob, I had some glaring holes in my approach.  I'll try to summarize my faults so you can recognize them and hopefully avoid the mistakes I have made.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;No offense and defense&lt;/span&gt; - The first couple of reviews I attended/moderated, I attacked peoples code and defended issues I found.  I learned that it is very important not to think about reviews in terms of being on the offensive when pointing out issues and playing "tough defense" when explaining why issue x should be solve with that new awesome design pattern you found in &lt;a href="http://books.google.com/books?id=LjJcCnNf92kC&amp;amp;dq=head+first+design+patterns&amp;amp;pg=PP1&amp;amp;ots=_85-4Aoas0&amp;amp;sig=DSXqsXzB1heW6CqpQngk1-BnY7U&amp;amp;prev=http://www.google.com/search%3Fhl%3Den%26client%3Dfirefox-a%26rls%3Dorg.mozilla%253Aen-US%253Aofficial%26hs%3Dfwd%26q%3Dhead%2Bfirst%2Bdesign%2Bpatterns%26btnG%3DSearch&amp;amp;sa=X&amp;amp;oi=print&amp;amp;ct=title&amp;amp;cad=one-book-with-thumbnail"&gt;Head First Design Patterns&lt;/a&gt;.  You must be respectful of everyone's code.  More often than not, they spent 100x longer deciding whether to make a certain decision.   If something is weird, point it out, and ask for their input in a respectful manner.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Give people the benefit of the doubt&lt;/span&gt; - People are smart.  Most times they are smarter than you.  (At least it seems that way.  Maybe I'm just slow...)   It's silly to think that you can read someone's code for an hour and immediately know the tradeoffs of the current design.  People know what they are doing and usually do things with purpose.  This leads directly to my next point.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Stop, Shut up, and Listen&lt;/span&gt; - Listen carefully to what people have to say.  Don't dismiss the explanations about why they chose to do something.  There may be a specific reason for their choice.  Again it just not productive to think that you know everything about their code.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Provide guidelines, not rules&lt;/span&gt; - So you went ahead and read &lt;a href="http://www.amazon.com/Effective-Java-Programming-Language-Guide/dp/0321356683/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1195210706&amp;amp;sr=1-1"&gt;Effective Java&lt;/a&gt;.  Twice.  You know the chapters by heart and know the horrors of using inheritance instead of composition.  You start reviewing someone's code, and *gasp*.  Inheritance.  Inheritance everywhere with no composition in sight.  You take out that red pen and start slashing away marking up every place that uses inheritance.  During the review you cry, "Don't use inheritance or else" except the only problem is that no one is listening to you.  If you want people to listen to you, provide suggestions or alternatives.  You must remember that every software engineering principle and rule is not set in stone.  In the end only the developer will decide what needs to be changed.  If they aren't listening to you, they won't change their code.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Ask others for their opinion&lt;/span&gt; - Once again, people are smart.  You will be amazed about how people think about problems.  It is important to ask others what they think about the current issue.  I've done this many times and have found new ways to look at code.  A simple, "Is that the right way to do it?" or "How would you suggest we fix this code?" will do the trick.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Code reviews are great opportunity to have some fun and learn new things.  Everyone is there to improve the quality of the code base and increase the team's hacking fitness.  I'm planning on attending and moderating a lot more code reviews in the future.  It is a learning process, but I think that I am moving forward.  Hopefully I am changing out of the "know-it-all hot shot hacker that is set in stone about his methods" mold to the "nice, approachable developer that will take the time to help me without biting off my head for asking questions" type of hacker.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-6090428931045571872?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/6090428931045571872/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=6090428931045571872' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/6090428931045571872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/6090428931045571872'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2007/11/reviewing-code-reviews.html' title='Reviewing Code Reviews'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-6898246176282405005</id><published>2007-11-11T21:49:00.000-10:00</published><updated>2010-01-10T13:05:31.805-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life Hacking'/><title type='text'>Blogging, Open-Source Software, and Rockstars!</title><content type='html'>&lt;a href="http://www.softwarebyrob.com/"&gt;Software by Rob&lt;/a&gt; posted a link titled: &lt;a href="http://www.hrworld.com/features/100-resources-rockstar-programmers-101507/"&gt;100 Resources to Attract, Retain, and Use Rockstar Programmers&lt;/a&gt;.  One-third of the links are job boards, but below those are some interesting articles about how people in the industry choose their developers.  I read two articles that caught my eye, &lt;a href="http://krgreenlee.blogspot.com/2006/04/business-engineering-value-of-blogging.html"&gt;The Engineering Value of Blogging&lt;/a&gt; and &lt;a href="http://linux.sys-con.com/read/173453.htm"&gt;Hire Programmers From Open Source&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I've talked to some developers that do not see the value of blogging, but I do feel that being able to write your software thoughts, troubles, and experiences down really helps me get a clear idea of what I'm doing.  You can think of blogging as doing your software design on paper.  You don't just sit in front of your workstation and start whipping out code.  You slow down, grab some paper, and draw out how you are going to solve problems x, y, and z.  When you blog,  it helps you stop and think about what has happened.  You can reflect on a interesting blog you found or bring up technical problems in your current open-source project.&lt;br /&gt;&lt;br /&gt;Both blogging and open source software are techniques to improve yourself as a developer.  Well-known software bloggers often write about making yourself marketable because you never know when you will need to look for another job.  Who knows what could happen.  Maybe your employer is running through tough times or you just don't like what you are doing.  Making yourself marketable doesn't happen overnight.  It will take many years of hardwork, discipline and motivation.  As a noob developer, I'm still starting on this process.  It is tough staying disciplined, but I know that it will be worth it.&lt;br /&gt;&lt;br /&gt;Give people all the information about what type of software developer you are.  Help interviewers out.  They are the ones that need to figure out if you are right for their company.   Blogging and Open Source contributions give them that information.  Type your name into Google.  I know your interviewer will.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-6898246176282405005?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/6898246176282405005/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=6898246176282405005' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/6898246176282405005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/6898246176282405005'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2007/11/blogging-open-source-software-and.html' title='Blogging, Open-Source Software, and Rockstars!'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-4342567388977800665</id><published>2007-11-09T01:25:00.000-10:00</published><updated>2007-11-19T00:47:21.109-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hackystat'/><title type='text'>FogBugz Evidence Based Scheduling Part 1</title><content type='html'>The other night I was sweeping through my feed reader as usual when I came across a &lt;a href="http://feeds.feedburner.com/%7Er/SoftwareByRob/%7E3/165761072/"&gt;blog&lt;/a&gt; talking about &lt;a href="http://www.fogcreek.com/FogBugz/docs/60/topics/schedules/Evidence-BasedScheduling.html"&gt;FogBugz Evidence Based Scheduler&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;In evidence-based scheduling a completion date is constructed from developer estimates, but the completion date is actually a range of dates with probabilities that each date will be met. So you can look at the calendar and say “We have a 50% chance of finishing by October 31st, and a 90% chance of finishing by November 23rd.” In addition, the schedule is based on the developers’ past estimating accuracy, so the better their estimates (compared to their actual time spent), the tighter the completion timeframe. Bad estimators means a wider timeframe.&lt;/blockquote&gt;&lt;br /&gt;"Wow",  I thought.  That sounds pretty good since I am a horrible estimator.  I can't give a good estimate until I get waist deep into my task.  I ask Aaron about it and he shuts me down:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;Austen&lt;/span&gt;: [Evidence Based Scheduling] is awesome. &lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Aaron&lt;/span&gt;: you think Evidence Based Scheduling is awesome?&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Aaron&lt;/span&gt;: Write a blog on how that sucks.&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Aaron&lt;/span&gt;: estimates probably sucks.  I think software engineering research people would eat that up and show how it sucks.&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;Austen&lt;/span&gt;: I think its good.  Why do u think estimates suck? is it because they are never accurate?&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Aaron&lt;/span&gt;: First of all, it is leap. Leap sucks.   It is almost like PSP.  Psp sucks.  Read Philip's and Ann Diseny's papers on that.&lt;br /&gt;&lt;br /&gt;So my next task is to check out Philip and Ann Disney's Papers on &lt;a href="http://csdl.ics.hawaii.edu/Research/PSP/PSP.html"&gt;PSP Data Quality&lt;/a&gt;.  Hopefully it will help me understand why estimation "sucks."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-4342567388977800665?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/4342567388977800665/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=4342567388977800665' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/4342567388977800665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/4342567388977800665'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2007/11/fogbugz-evidence-based-scheduling-part.html' title='FogBugz Evidence Based Scheduling Part 1'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-1075625456147306812</id><published>2007-11-05T01:05:00.000-10:00</published><updated>2010-01-10T13:05:09.573-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Code Improvement'/><title type='text'>Meticulosity!</title><content type='html'>&lt;a href="http://m-w.com/dictionary/meticulous"&gt;Meticulous&lt;/a&gt; :  &lt;span class="sense_content"&gt;marked by extreme or excessive care in the consideration or treatment of details.&lt;br /&gt;&lt;br /&gt;I have found out this week that one of my new goals is to be meticulous.  This week alone I have made three stupid mistakes that could have been avoided if I pay a little more attention to detail.  Here are the stupid mistakes:&lt;br /&gt;&lt;/span&gt;&lt;ol&gt;&lt;li&gt;Totally messed up merging my subversion sensor with the main line of ant sensors.  Take a look how I &lt;a href="http://groups.google.com/group/hackystat-svn/msg/f1a79b132cdf1337"&gt;overwrote all of Julie's and Aaron's hard work&lt;/a&gt;.  Philip found out that there was lots of white spaces in the build sensor.  Some inspection showed that all of the ant sensors were reverted back to before my branching.  Yikes.&lt;/li&gt;&lt;li&gt;After doing some work build hacking, I broke the build because I didn't test all of the modules.  I tested one module, saw that it passed, and went to sleep.  I wake up at 7 to find out every other module failed.  Bleh.&lt;/li&gt;&lt;li&gt;Tonight, I spent an hour or so trying to figure out why SCLC would not work.  With Julie's awesome help I found out that I was using ActivePerl 5.6 rather than 5.8.  sigh&lt;/li&gt;&lt;/ol&gt;Being a bit more meticulous should lead to less headaches.  I think this is the reason that I love unit testing.  When I'm hacking I write some code, write some tests, and forget about it.  I don't have to worry about my code being correct because I've tested to see if it works as I have intended.  If I do find a bug, I do some debugging to figure out the cause, then write a test case to reproduce the problem.  I can only image what types of horrors I would bring out if I didn't have unit testing. &lt;br /&gt;&lt;br /&gt;Now all I need is some way to test my process. &lt;br /&gt;&lt;br /&gt;Assert.fail("Don't be a noob you are overwriting everyone's hard work!")&lt;br /&gt;Assert.fail("You didn't try every case that might cause the build to fail.")&lt;br /&gt;Assert.fail("Wrong PERL version!")&lt;br /&gt;&lt;br /&gt;Or maybe I should stop hacking at 12am...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-1075625456147306812?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/1075625456147306812/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=1075625456147306812' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/1075625456147306812'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/1075625456147306812'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2007/11/meticulosity.html' title='Meticulosity!'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-6015730902569554728</id><published>2007-11-02T00:53:00.001-10:00</published><updated>2010-01-10T13:06:41.821-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Configuration Management'/><title type='text'>Sometimes I hate Ant</title><content type='html'>I wonder what the &lt;a href="http://ant.apache.org/"&gt;Ant&lt;/a&gt; designers had in mind when they decided to not include the ability to have if-else logic.  Tonight I started work on some Ant macros to simplify the invoking of Hackystat version 8 sensors on the current set of Hackystat 8 projects.  I wanted the ability to print out a message saying, "You dont have the Hackystat 8 ant sensors installed so I'm not sending data."  Seems pretty straight forward.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Check if the ant sensors exist.&lt;/li&gt;&lt;li&gt;If the ant sensor doesn't exist, print out a message, do not send data.&lt;/li&gt;&lt;li&gt;If the ant sensor does exist, send the data, drink some beer.&lt;/li&gt;&lt;/ol&gt;What that simple if-else logic mutates into is:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Write a task that checks for the antsensor jar file.&lt;/li&gt;&lt;li&gt;Write a task that invokes the sensor if the jar file exists.&lt;/li&gt;&lt;li&gt;Write a task that prints a message if the sensor doesn't exist.&lt;/li&gt;&lt;li&gt;Write a task that invokes the three previous tasks.&lt;/li&gt;&lt;/ol&gt;I spare you the 50 or so lines of ant code that I need to write just to have some simple if-else logic.  I find it incredibly bogus that if-else can only be represented by setting properties and including an "if or unless" attribute in the target tasks.  Not having a target embedded conditional task just makes me angry.  The &lt;a href="http://ant-contrib.sourceforge.net/"&gt;Ant-Contrib&lt;/a&gt; Ant task extension attempts to add additional features that Ant doesn't include.&lt;br /&gt;&lt;br /&gt;Can't I just have a built in if-else clause?&lt;br /&gt;&lt;br /&gt;On a side note, I noticed that version 7 sensor data sending code would fail the build if the sensor was not installed.  Hackystat developers really should be "eating their own dog food", so it probably will be OK to require that they install their sensors.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-6015730902569554728?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/6015730902569554728/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=6015730902569554728' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/6015730902569554728'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/6015730902569554728'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2007/11/sometimes-i-hate-ant.html' title='Sometimes I hate Ant'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-7804947244429159284</id><published>2007-10-28T22:41:00.000-10:00</published><updated>2010-01-10T13:05:09.573-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Code Improvement'/><title type='text'>Skill vs. Will</title><content type='html'>If you haven't noticed yet, I am very big on self-improvement.  I am currently reading a book called &lt;a href="http://www.amazon.com/Managing-Humans-Humorous-Software-Engineering/dp/159059844X"&gt;Managing Humans: Biting and Humorous Tales of a Software Engineering Manager&lt;/a&gt; by Michael Lopp, who also writes the blog &lt;a href="http://www.randsinrepose.com/"&gt;Rands in Repose&lt;/a&gt;.  While reading this interesting and witty book, I came across a section called Skill vs. Will.  It explains four states of developers:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;High skill, low will: &lt;/span&gt;Boredom is imminent-needs a change of scenery and responsibility stat.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;High will, low skill: &lt;/span&gt;Needs training, needs mentorship.  Needs management.  The good news is they really, really want it.  Savor this because as soon as the skill kicks in, they're going to starting your job.  This rules.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Low will, low skill: &lt;/span&gt;Boy, did you screw up.  It takes a fairly concerted effort to ignore the needs of your employee so long that (a) they no longer have the skills necessary to do their job, and (b) they don't want to do it.  Roll those sleeves up, pal.  You've got work to do.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;High skill, high will:  &lt;/span&gt;Great job, ummmm, guess what?  No one stays here long.&lt;/li&gt;&lt;/ul&gt;There are several things that came to mind when I read this section. &lt;br /&gt;&lt;ol&gt;&lt;li&gt;Why does management screw up if you have low will or low skill?  Isn't it the responsibility of the developer to ensure that they keep up on the latest development styles, techniques, and processes? &lt;br /&gt;&lt;/li&gt;&lt;li&gt;Having a great motivation to learn is a great state of mind to have.  You may not be the best at what you do or know everything, but being motivated gets you half way there.   Improving everyday can only help your chances at becoming awesome.&lt;/li&gt;&lt;li&gt;He seems to side-step the problem of having low will by saying that by increasing a person's skill, they will also see an increase in their will.  Somehow I don't really buy that.  If you already have low will, what will make you want to increase your skills?  And the larger problem is that if you have low will, what is going to stop you from going back to that state once someone isn't prodding you into improving?&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;On a side note:  &lt;a href="http://kagawaa.blogspot.com/"&gt;Aaron&lt;/a&gt; starred a blog from Coding Horror about &lt;a href="http://www.codinghorror.com/blog/archives/000983.html"&gt;achieving blogging success&lt;/a&gt;.  That article has inspired me to stick to a blogging plan.  I'm committing myself to blog twice a week, Sundays and Thursdays.  Let's see if I can stick to it for a year.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-7804947244429159284?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/7804947244429159284/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=7804947244429159284' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/7804947244429159284'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/7804947244429159284'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2007/10/skill-vs-will.html' title='Skill vs. Will'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-8371248440329984763</id><published>2007-10-14T23:46:00.000-10:00</published><updated>2010-01-10T13:05:09.574-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Code Improvement'/><title type='text'>Hacking Fitness</title><content type='html'>I have read numerous articles in Muscle and Fitness that explain why body building is so tough.  Body builders often talk about difficulties in being meticulous in what they eat, how they train, and their supplement cycles.  The most important point they bring up is that &lt;span style="font-style: italic;"&gt;body building isn't a job, it's a lifestyle.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In my opinion, hacking should be the same way.  Hacking isn't just something you do at work to pay the bills.  You need to always be improving your "Hacking Fitness".  I believe that in order to become an awesome hacker, you need to change the way you live.  You need to constantly train your mind to think in code, refine your hacking skills, and keep improving.  English (or your native tongue) should be your second language.&lt;br /&gt;&lt;br /&gt;Another thing to improve your Hacking Fitness is to find the right motivation.  You have to _want_ to improve.  If hacking is your hobby, then you'll be hacking at home.  If you are hacking at home you are already have a leg up on a lot of developers.  You have effectively turned "work" into "play", which to me is the real key of improving your Hacking Fitness.&lt;br /&gt;&lt;br /&gt;Some other miscellaneous items that I am doing to try improve my Hacking Fitness:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Read books. You must read.  There is no way that you can learn effectively without bombarding your brain with the stuff found in all of the reading material out there.  There is absolutely no excuse not to read blogs, books, magazines.  If you are awesome and not reading, let me know how you do it.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Read other peoples code.  You can learn bunches of things when you read another developer's code.  Improving your code reading skills will increase the speed at which you figure out things.  Just imagine what it would be like writing a book report when you had trouble reading the book.  It's hard to make connections when there is a language barrier.  The same applies to reading code.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Pair program and Pair review.  I have found that learning how other people think about code and their code tracing process is very useful.  While pair programming is not useful all the time (although some people swear by pair programming), I find that after you experience it with another developer, you start to think like them when you are coding.  I noticed this a while back when I started to trace through code like my coworker.  You start wrapping the code around your head in different ways.  You see the little things that you would not have seen before.  Totally useful.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Try new things.  I try not to get stuck using the same tools all the time.  I try to move over to something new to see what is out there.  For example, I was using the Netbeans IDE for a bit.  You can't find anything better if you aren't looking.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;A lot of these things have been said before.  You need to keep learning, you need to get motivated, blah blah blah.  If you take anything away from this blog, it should be that:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Hacking isn't a job, it's a lifestyle.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-8371248440329984763?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/8371248440329984763/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=8371248440329984763' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/8371248440329984763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/8371248440329984763'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2007/10/hacking-fitness.html' title='Hacking Fitness'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-547495007173226669</id><published>2007-10-03T20:12:00.001-10:00</published><updated>2010-01-10T13:05:09.574-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Code Improvement'/><title type='text'>Liskov Substitution and Simple Factories</title><content type='html'>I came across a nice article on &lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2007/09/28/just-some-little-fundamental-things-to-help-you-codebetter.aspx"&gt;Liskov Substitution&lt;/a&gt; that clearly explained what it means to follow the principle.  For those you who don't wish to read up on Liskov's Substitution Principle, the basic idea is that any sub-class should work, &lt;span style="font-style: italic;"&gt;without any code change&lt;/span&gt;, for any interface that accepts a parent type.  This got me thinking about the way I'm currently implementing the &lt;a href="http://en.wikipedia.org/wiki/Abstract_factory_pattern"&gt;Simple Factory Pattern&lt;/a&gt;.  The factory pattern provides you the ability of,  "Insulating the creation of objects from their usage. This allows for new derived types to be introduced with no change to the code that uses the base class."  So the implementation in Java would be:&lt;br /&gt;&lt;br /&gt;public class SimpleFactory {&lt;br /&gt; /** Prevents direct instantation. */&lt;br /&gt; private SimpleFactory(){&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public static FooObject getInstance(BaseParameter baseParameter) {&lt;br /&gt;   if(baseObject instanceof FirstChildParameter){&lt;br /&gt;     // return FirstFooObject sub-class instance using first child parameters.&lt;br /&gt;   }&lt;br /&gt;   else if(baseObject instanceof SecondChildParameter){&lt;br /&gt;     // return SecondFooObject sub-class instance using second child parameters.&lt;br /&gt;   }&lt;br /&gt;   // etc, etc.&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;This implementation violates the Liskov Subsitution Principle, which is found in reputable books such as &lt;a href="http://www.amazon.com/Elements-Java-Style-Allan-Vermeulen/dp/0521777682"&gt;The Elements of Java Style&lt;/a&gt;, because each new sub-type of BaseParameter that is created would require a code change to the simple factory.  Perhaps this is one those cases where there is a trade off between code brittleness and encapsulation.  While I agree that it is nice to encapsulate how objects are created using a factory because the method calling code  does not have to worry about what type of object to create, I find the &lt;a href="http://c2.com/xp/CodeSmell.html"&gt;code smell&lt;/a&gt; behind my factory implementation to be disturbing.  First, large numbers of subclasses would have to rely on type-specific code that constructs and returns the appropriate instances.  Second, if a library with the SimpleFactory is in use by other developers, they are hosed if they create their own BaseParameter subclass.  The code will not be able to be changed because Factory methods are static, therefore unable to be sub-classed.&lt;br /&gt;&lt;br /&gt;The Liskov Substitution Principle is something I'm going to have to think about when designing new code.  It is nice to finally get a solid grasp on what it means to violate this well-known principle.  Perhaps my implementation of the Simple Factory is incorrect and there is an implementation that does not violate the principle.  I should read more code.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-547495007173226669?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/547495007173226669/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=547495007173226669' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/547495007173226669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/547495007173226669'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2007/10/liskov-substitution-and-simple.html' title='Liskov Substitution and Simple Factories'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-8316264417388270594</id><published>2007-09-27T23:14:00.000-10:00</published><updated>2010-01-10T13:05:09.575-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Code Improvement'/><title type='text'>I'm still learning</title><content type='html'>&lt;blockquote&gt;Not only are changes in objective inevitable, changes in development strategy and technique are also inevitable.  The throw-one-away concept is itself just an acceptance of the fact that as one learns, he changes the design.&lt;/blockquote&gt;I'm currently plowing through the Mythical Man Month by Fred Brooks and came across the above quote tonight.  I find it funny and interesting how things he writes apply to software development today.  Man Month was written over 30 years ago, yet we see the beginning of agile ideals.  Change is going to happen, so we might as well be prepared for it.&lt;br /&gt;&lt;br /&gt;Fast forward to today and I find that I'm learning and changing everyday as I'm developing.  A good example is my littering of static factory methods in my code.  A year ago I read Effective Java and said to myself, "Hey these static factory methods are awesome.  Having names for your "construction" methods would be crazy good!"  What really ended up happening was:&lt;br /&gt;&lt;br /&gt;private FooObject(Parameters){&lt;br /&gt;  // Do stuff with parameters&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public static FooObject createFooObject(Parameters){&lt;br /&gt;  return FooObject(Parameters);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;I did that for almost every object.  I can see the benefits of being able to return any type of object, but all that leads to is unnecessary casting of objects.  There are certain places where static factory methods are useful, but I didn't really gain anything except having more code to maintain and document.   What a headache. &lt;br /&gt;&lt;br /&gt;So now I have learned and I have changed my design.  Every thing I read, learn, and practice is being tucked away into my hacker toolbox.  While it may be frustrating to have to re-design my code, it is a great feeling to be able to look at a problem and think of multiple ways to approach it.  Someone said that if all you have is a hammer, you'll only see nails.  I want the whole hardware store.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-8316264417388270594?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/8316264417388270594/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=8316264417388270594' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/8316264417388270594'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/8316264417388270594'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2007/09/im-still-learning.html' title='I&apos;m still learning'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-5101582737130589393</id><published>2007-09-21T00:13:00.000-10:00</published><updated>2007-09-21T00:37:53.806-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hackystat'/><title type='text'>IDE's should not have to compete on their suite of available plugins</title><content type='html'>The title of this blog is inspired by a one of my very smart coworkers, &lt;span style="font-size:100%;"&gt;&lt;span style="font-style: italic;"&gt;"IDEs should not have to compete on their suite of available plugins, but on  their core editor's usability."&lt;/span&gt;&lt;/span&gt;   My coworker said this in reference to &lt;a href="http://code.google.com/p/jupiter-eclipse-plugin/"&gt;Jupiter&lt;/a&gt;, which is an Eclipse review tool plugin.  My coworker is a Netbeans users and was asked to use Jupiter to speed up the review process.   At work there is a collossal IDE war.  In one camp we have the Netbeans user's who feel that introducing &lt;a href="http://www.netbeans.org/community/releases/60/"&gt;features that existed 3 years ago in Eclipse&lt;/a&gt; is the way to go.   And in the other camp we have the superior Eclipse users.  (Can you tell I am a happy Eclipse user?)  I am over exaggerating, both IDEs have their pros and cons.  But the point is that users shouldn't have to chose an IDE based on what suite of plugins are available.  Netbeans users should be able to use Jupiter.  Developers shouldn't have to learn the Netbeans API in order to write a Jupiter plugin with the same core functionality.&lt;br /&gt;&lt;br /&gt;What my coworker suggested was the creation of a Generic Framework that allowed other developers to create "IDE Adapters", which would allow a plugin to be written only once.  For example, in the case of Jupiter, a developer would be able to write a Jupiter plugin against the Generic IDE Framework.  The plugin could then be adapted to the developers IDE of choice.  Sounds so simple doesn't it?  One plugin that can be ported to multiple IDEs.&lt;br /&gt;&lt;br /&gt;The tradeoff is that the Generic API will lose the IDE functionality that is not common to all IDEs as my coworker says: &lt;span style="font-style: italic;"&gt;"The &lt;/span&gt;&lt;span style="font-style: italic;font-size:100%;" &gt;API would be limited to the lowest common denominator of features."  &lt;/span&gt;How much functionality will be lost?  Who knows, maybe too much will be lost because certain features do not exist in others.&lt;br /&gt;&lt;br /&gt;In general I think this is a interesting, complex, useful idea.  If we could get everyone using the same set of tools regardless of IDE preference, we would be a lot more productive.  Maybe there wouldn't be an IDE war.  There would be peace in HackerLand with Netbeans users wondering what it would be like to code ultra fast with all of the sweet Eclipse shortcuts and Eclipse users thinking, &lt;span style="font-style: italic;"&gt;"Maybe a Swing based IDE isn't so bad after all".&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;A dream perhaps?&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-5101582737130589393?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/5101582737130589393/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=5101582737130589393' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/5101582737130589393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/5101582737130589393'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2007/09/ides-should-not-hve-to-compete-on-their.html' title='IDE&apos;s should not have to compete on their suite of available plugins'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-8523812815991346281</id><published>2007-09-17T19:25:00.000-10:00</published><updated>2007-09-17T19:47:34.810-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hackystat'/><title type='text'>I think we need Hackystaller Version 2.0</title><content type='html'>Last night I was preparing for the September 17, 2007 milestone release of XmlData.  Since the last milestone produced problems with the 'ant -f verify.build.xml' invocation and with a missing dependency check of Hackystat_Utilities, I decided to attempt to build from source on my desktop.  My desktop had no Hackystat services or Java code analysis tools.  I spent about 45 minutes getting my environment able to run a 'ant -f verify.build.xml'.  I found that I had to download and configure the environmental variables of all of the tools found at the &lt;a href="http://code.google.com/p/hackystat-sensorbase-uh/wiki/DeveloperGuide"&gt;Hackystat-Sensorbase-UH Developer Guide&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;XmlData requires Sensorshell and Hackystat utilities, which in turn requires Sensorbase.  I hope I never have to format my machine because this takes quite a while.  Hackystat 7 was much easier because all of dependencies (If i remember correctly) were stored in your ant library directory.&lt;br /&gt;&lt;br /&gt;I'm thinking that eventually we will be needing a tool like HackyInstaller, but something better.  Let's call this tool HackyDevInstaller.  It probably should be able to:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Allow the user to choose the source and distribution releases of their Hackystat service(s) of choice.&lt;/li&gt;&lt;li&gt;Prompt the user to download the modules that the selected services depend on.&lt;/li&gt;&lt;li&gt;Automatically download the right analysis tools, install them, and allow you to configure the environmental variables.&lt;/li&gt;&lt;li&gt;It should also manage the user's current installation so they can remove or change their current settings.&lt;/li&gt;&lt;li&gt;After developing some Ruby on Rails, I found that using &lt;a href="http://instantrails.rubyforge.org/wiki/wiki.pl"&gt;Instant Rails&lt;/a&gt; was great for quickly starting development.  It would be great if we could start a contained Hackystat development environment that started a local sensorbase service and provided some debugging utilities.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Perhaps we can find a NSF Research Grant for Undergraduates for a boy and girl who love hacking.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-8523812815991346281?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/8523812815991346281/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=8523812815991346281' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/8523812815991346281'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/8523812815991346281'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2007/09/i-think-we-need-hackystaller-version-20.html' title='I think we need Hackystaller Version 2.0'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-1502919065447541176</id><published>2007-09-14T00:18:00.000-10:00</published><updated>2010-01-10T12:53:03.203-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Books and Reading'/><title type='text'>I'm pushing back reading once again.</title><content type='html'>So rather than read a few extra pages of &lt;a href="http://www.amazon.com/Professional-Software-Development-Schedules-Successful/dp/0321193679/ref=pd_bbs_5/002-5141950-8497658?ie=UTF8&amp;s=books&amp;amp;qid=1189765216&amp;sr=8-5"&gt;Steve McConnell's Professional Software Development&lt;/a&gt;, I'm writing a blog.  It's so hard these days to find the time to read in-between work hacking, Hackystat hacking, and my new man-crush, blogging.  &lt;a href="http://kagawaa.blogspot.com/"&gt;Aaron&lt;/a&gt; pointed me to a new book that I immediately ordered from Amazon.  It's called &lt;a href="http://www.amazon.com/Software-Creativity-2-0-Robert-Glass/dp/0977213315"&gt;Software Creativity 2.0&lt;/a&gt; and it looks very promising.  Robert Glass has written some very good books including the "&lt;a href="http://books.google.com/books?id=3Ntz-UJzZN0C&amp;amp;pg=PP1&amp;dq=inauthor:Robert+inauthor:L+inauthor:Glass&amp;amp;sig=tFGSkbLuKt3ZZIzxJq-hcWRfqlY#PPR7,M1"&gt;F-book&lt;/a&gt;".  Why is it called the "F-book?"  Perhaps you need to read it or you can see the obvious and figure it out for yourself.&lt;br /&gt;&lt;br /&gt;So the creativity book by Robert Glass contains a forward by Tom DeMarco the co-author of Peopleware.  (I'm not going to link it because the 2 people that actually read this blog know the awesomness known as Peopleware).  Top that off with a amazon.com review by Steve McConnell and you have one hell of a book to look forward to.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;With my spontaneous purchase of Software Creativity, I began thinking about what I should be reading.  In my amazon wishlist, I have a bunch of books in a range of topics.  These topics include Java, Ruby, design patterns, agile practices, interface design, and general motivation and creativity books.  I normally try to buy 2 books from amazon at a time for the free shipping and to vary what I read.  Normally I get a tech book and generic "how to become awesome" book, but I always wonder if I should be focusing on certain things.  Maybe I should be focusing on improving my Java 1 billion % or perhaps I should get all the Ruby books I can because it just might be the next big thing.  It is pretty hard to read everything nowdays, so I really have to be selective.  I wonder how all you big readers / hackers / workers / parents get it done.  I think I'm going to sleep now, but what a waste.  I could be reading or hacking or blogging more. &lt;br /&gt;&lt;br /&gt;How do we petition to increase the amount of hours in a day to 48?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-1502919065447541176?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/1502919065447541176/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=1502919065447541176' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/1502919065447541176'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/1502919065447541176'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2007/09/im-pushing-back-reading-once-again.html' title='I&apos;m pushing back reading once again.'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-7032023426734653730</id><published>2007-08-31T23:58:00.000-10:00</published><updated>2007-09-14T00:18:32.001-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hackystat'/><title type='text'>XmlData: The results are in</title><content type='html'>After running three test runs of the &lt;a href="http://code.google.com/p/hackystat-sensor-xmldata/"&gt;XmlData sensor&lt;/a&gt;, I have gotten the sensor up and running.  The three test run settings were:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;The default JVM heap size, which is 64ish MB.&lt;/li&gt;&lt;li&gt;An increase of JVM heap size to 1024 MB with a manual invocation of System.gc() after each send to the sensorbase and after each file.&lt;/li&gt;&lt;li&gt;An increase of JVM heap size to 1024 MB.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;After I fixed the problem of loading the hashmap with duplicate entries, the sensor failed to finish sending data due to an Out of Memory Exception.  After some investigation, I found that the sensor was failing when the largest file was unmarshalled.  The largest file was 10 MB in size.&lt;br /&gt;&lt;br /&gt;First Test Run with no increase in heap:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_gZ-LJtj9hxw/RtnFF-8bFNI/AAAAAAAAACc/2g9bbFSEsKE/s1600-h/082707-1hour.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_gZ-LJtj9hxw/RtnFF-8bFNI/AAAAAAAAACc/2g9bbFSEsKE/s320/082707-1hour.PNG" alt="" id="BLOGGER_PHOTO_ID_5105328359187616978" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So what I decided to do was increase the heap size and found that the sensor completes.  Great success!  At 1:13, you can see the largest spike on the heap usage graph.  That is the time when the 10 MB file was unmarshalled.  With the increase in heap, the sensor had no problems.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_gZ-LJtj9hxw/RtnFGO8bFOI/AAAAAAAAACk/-EXkqwtceVY/s1600-h/082807-1hr.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_gZ-LJtj9hxw/RtnFGO8bFOI/AAAAAAAAACk/-EXkqwtceVY/s320/082807-1hr.PNG" alt="" id="BLOGGER_PHOTO_ID_5105328363482584290" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;For fun, I ran one last invocation of the sensor with out the manual System.gc() calls.   It turns out that the sensor allocates around 26  more MB  to send the same amount of data.  It is interesting to note that at the end of the sensor process, the data is very small, but the sensor still uses the same amount of allocated memory.  In the 2nd invocation, the heap usage graph shows that it only uses a minimal amount of memory.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_gZ-LJtj9hxw/RtnFGe8bFPI/AAAAAAAAACs/ckCidsfhQqE/s1600-h/083107-1hr.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_gZ-LJtj9hxw/RtnFGe8bFPI/AAAAAAAAACs/ckCidsfhQqE/s320/083107-1hr.PNG" alt="" id="BLOGGER_PHOTO_ID_5105328367777551602" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I will need to document in the user guide to increase the heap size if sending large files.  It might be a good idea to tell users to increase their heap to a large number.  If we come across the case where a user has an abnormally large file, we may need to go the route that Philip suggested of writing a custom SAX parser.  That will remove the need to load the entire document into memory.&lt;br /&gt;&lt;br /&gt;The sensor is almost functional.  I noticed that version 7 data includes &lt;a href="http://hackystat.ics.hawaii.edu/hackystat/docbook/ch15s05.html"&gt;pMap attributes&lt;/a&gt;, which I probably will need to separate.  After thats completed, I can write some documentation and release!  Hopefully I can send out a review request at the next milestone.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-7032023426734653730?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/7032023426734653730/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=7032023426734653730' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/7032023426734653730'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/7032023426734653730'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2007/08/xmldata-results-are-in.html' title='XmlData: The results are in'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_gZ-LJtj9hxw/RtnFF-8bFNI/AAAAAAAAACc/2g9bbFSEsKE/s72-c/082707-1hour.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-61667507217592068</id><published>2007-08-28T23:39:00.000-10:00</published><updated>2007-09-14T00:18:32.002-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hackystat'/><title type='text'>Monitoring Java Processes with JConsole</title><content type='html'>I am currently working on fixing some Out of Memory (OOM) exceptions that are being thrown by the &lt;a href="http://code.google.com/p/hackystat-sensor-xmldata/"&gt;Hackystat XmlData sensor&lt;/a&gt;.  Philip suggested in an &lt;a href="http://groups.google.com/group/hackystat-dev/browse_thread/thread/b6bb9957fe0e7db8/7a81ead80a6735a1?#7a81ead80a6735a1"&gt;email&lt;/a&gt; that the a good first step would be to start looking at heap usage with &lt;a href="http://java.sun.com/developer/technicalArticles/J2SE/jconsole.html"&gt;JConsole&lt;/a&gt;.   JConsole is actually a decent tool.  It gives you graphs of heap usage over time, spawned threads, created classes, and a nice little over view.  The tool even lets you invoke the garbage collector on the monitored process.&lt;br /&gt;&lt;br /&gt;The Overview of the monitored process.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_gZ-LJtj9hxw/RtVEAO8bFII/AAAAAAAAABI/9ZYXCyM-e74/s1600-h/jconsole_overview.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_gZ-LJtj9hxw/RtVEAO8bFII/AAAAAAAAABI/9ZYXCyM-e74/s320/jconsole_overview.PNG" alt="" id="BLOGGER_PHOTO_ID_5104060523496543362" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/a&gt;The Heap Monitoring Tab&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_gZ-LJtj9hxw/RtVEAO8bFHI/AAAAAAAAABA/iIPEQvMyTN8/s1600-h/heap_usage.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_gZ-LJtj9hxw/RtVEAO8bFHI/AAAAAAAAABA/iIPEQvMyTN8/s320/heap_usage.PNG" alt="" id="BLOGGER_PHOTO_ID_5104060523496543346" border="0" /&gt;&lt;br /&gt;&lt;/a&gt; Tonight I was trying to reproduce the OOM exception, which from the exception log, was thrown when a 10MB file was unmarshalled.  I tried to reproduce the error by only sending data from the 10MB file, but the exception was not thrown.  After consulting the screenshots I took of the previous night's test run, I found out that OOM exception was thrown after  an hour of sending data.  I also noticed that the heap usage hovered around the high 50MB to low 60MB range.&lt;br /&gt;&lt;br /&gt;My hypothesis is that the memory usage was almost at a maximum when the large 10MB file was accessed.  So if I can keep the heap usage leveled off, maybe the exception will not get thrown.   To test my hypothesis, I pressed on the "Perform GC" button a couple times while sending data.  I noticed that the heap usage would stay at the mid to high 50MB range.  That led me to insert some 'System.gc()' calls after each file and after sending a batch of data.  The test run is currently running and I do notice that the heap usage is about 10MB lower on average.&lt;br /&gt;&lt;br /&gt;Wow it looks like you get a blog with updates before the blog is posted!  The exception was just thrown again, but the heap was around 49MB when it encounter the 10MB file.  I'm beginning to think that the solution may be to increase the JVM heap from the command-line.  I did a test invocation with a 40 MB data file and the OOM exception was thrown immediately.  If the sensor sends all of the data with 1024MB of heap allocated, we may just have to inform users to increase the heap size.&lt;br /&gt;&lt;br /&gt;Requesting the user to increase the heap size in this case may be the correct solution.  Previously, increasing the heap did not work because &lt;a href="http://groups.google.com/group/hackystat-dev/msg/bf20b6c058f7c22b"&gt;I implemented the sensor wrong&lt;/a&gt;.  I need to write a blog entitled, "It's usually your fault."  We'll just have to wait and see how the current test run goes.&lt;br /&gt;&lt;a href="http://groups.google.com/group/hackystat-dev/browse_thread/thread/b6bb9957fe0e7db8/7a81ead80a6735a1?#7a81ead80a6735a1"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-61667507217592068?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/61667507217592068/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=61667507217592068' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/61667507217592068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/61667507217592068'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2007/08/monitoring-java-processes-with-jconsole.html' title='Monitoring Java Processes with JConsole'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_gZ-LJtj9hxw/RtVEAO8bFII/AAAAAAAAABI/9ZYXCyM-e74/s72-c/jconsole_overview.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-264677183977496090</id><published>2007-08-23T00:44:00.000-10:00</published><updated>2007-09-14T00:18:32.002-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hackystat'/><title type='text'>Hackystat 8 Supercharged!</title><content type='html'>As I was in the shower 5 minutes ago, I had a thought.  (I think I should move my workstation into the shower because I channel the most ideas there).&lt;br /&gt;&lt;br /&gt;The Hackystat 8 architecture will work.  The reason why I believe it will work it is a combination of old and new things:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Disciplined Developers&lt;/li&gt;&lt;li&gt;Great Hackers&lt;/li&gt;&lt;li&gt;The new motto: "Convention over Configuration".&lt;/li&gt;&lt;li&gt;The sweet new architecture known as Version 8.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Disciplined Developers&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Pavel found a great article of what it takes to be a &lt;a href="http://www.codinghorror.com/blog/archives/000931.html"&gt;disciplined developer&lt;/a&gt;.  Without discipline I don't think you will have the ability to produce quality software in a timely manner.  If you look up discipline in the dictionary, you'll come to &lt;a href="http://hackystat.org/hackyDevSite/people.do"&gt;this page&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Great Hackers&lt;/span&gt;&lt;br /&gt;If there is one thing I miss about working in CSDL, it's reading other people's code.  Working on Hackystat 8 has reminded me what it is like to read beautiful, elegant code.  A motto I have come to accept is to "strive to be the worst in the group".  The only way to improve is to always have something to learn from your peers.  The Hackystat team is constantly providing me with that opportunity ;)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Convention over Configuration&lt;/span&gt;&lt;br /&gt;The motto "Convention over Configuration" is a large improvement over the Hackystat 7 motto, which was, "Config it, then let's document!"  (There wasn't really a motto for Version 7, so I decided to make one up for entertainment value).   In Hackystat 7, you had to go through so much application and dependency configuration via properties files.  That was a huge headache if you start developing on another machine.&lt;br /&gt;&lt;br /&gt;In Hackystat 8, things are already starting to look very different.  Gone are the days of endless configuration!  We now have small little modules, each with their own library that can be used by other modules.  Want to start the server up to receive data?  Configuration files?  No way!  Hit the command-line (java -jar sensorbase.jar).  I'm liking it so far.   Small little pieces, small little hacks, large contributions to the Hackystat project.&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Sweet New Architecture&lt;/span&gt;&lt;br /&gt;I'm not going to pretend I can explain the new architecture in detail.  Check out &lt;a href="http://code.google.com/p/hackystat/wiki/Version8DesignProposal"&gt;Philip's Version 8 Design Doc&lt;/a&gt;.  Sweet!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;As Aaron has said, &lt;a href="http://kagawaa.blogspot.com/2007/08/google-issues.html"&gt;Hackystat is fun&lt;/a&gt;. I can't wait till the shirts come out.  I'll take 10.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-264677183977496090?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/264677183977496090/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=264677183977496090' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/264677183977496090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/264677183977496090'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2007/08/hackystat-8-supercharged.html' title='Hackystat 8 Supercharged!'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443367277892980924.post-8116444949266165492</id><published>2007-05-09T00:13:00.000-10:00</published><updated>2010-01-10T13:06:41.822-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Configuration Management'/><title type='text'>ant and c++ bad times...bad times.</title><content type='html'>I'm beginning to think that ant and C++ just don't mix.  After hours of struggling with getting the &lt;a href="http://ant-contrib.sourceforge.net/"&gt;ant-contrib&lt;/a&gt; cc task to link object files and static libraries to create an executable, I've just about given up on trying to get this to work.  There have been two big issues that have been bugging me with &lt;a href="http://ant-contrib.sourceforge.net/"&gt;ant-contrib&lt;/a&gt;:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;g++ gets called when compiling the source files, but gcc is called when linking.  This is a huge issue for me.  When I call g++ from the command-line to compile and link my source and object files, I have no problems.  Everything works great.  After using ant's verbose mode, I noticed that even if you specify 'g++' as the linker to use, the gcc linker is still called.  This leads to unreferenced files and more C++ hell.&lt;br /&gt;&lt;br /&gt;I did some searching around and noticed people having the same problems, but no work around.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The library is buggy.  There is a bug where ant will hang when nesting 'syslibset' and 'libset'&lt;syslibset&gt; &lt;libset&gt; tags within the cc, compiler, and linker tasks.  The work around is to have nested &lt;linkerarg&gt; calls within your cc task.  You get no love if you have a lot of libraries to link.&lt;/linkerarg&gt;&lt;/libset&gt;&lt;/syslibset&gt;&lt;/li&gt;&lt;/ol&gt;A coworker suggested that I look into &lt;a href="http://nant.sourceforge.net/"&gt;Nant&lt;/a&gt; as an alternative to using ant.  I'm not sure if I really want to use Nant.  The whole point of using ant to build java and C++ projects is to have one build system.  I know that I can call Nant from ant, but that will just spawn a new process, which will hide the error results.&lt;br /&gt;&lt;br /&gt;I guess it's time to re-learn makefiles.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5443367277892980924-8116444949266165492?l=austenito.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://austenito.blogspot.com/feeds/8116444949266165492/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5443367277892980924&amp;postID=8116444949266165492' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/8116444949266165492'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443367277892980924/posts/default/8116444949266165492'/><link rel='alternate' type='text/html' href='http://austenito.blogspot.com/2007/05/ant-and-c-bad-timesbad-times.html' title='ant and c++ bad times...bad times.'/><author><name>austen.ito</name><uri>http://www.blogger.com/profile/03143485632071929010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_gZ-LJtj9hxw/S2sUpcDOhhI/AAAAAAAAN9s/PwGnwCpO2D8/S220/Screen+shot+2010-02-04+at+8.40.04+AM.png'/></author><thr:total>0</thr:total></entry></feed>
