<?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-7687478235670017299</id><updated>2012-02-16T12:42:02.671-06:00</updated><title type='text'>iRemote</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.iremote.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7687478235670017299/posts/default'/><link rel='alternate' type='text/html' href='http://www.iremote.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Robert</name><uri>http://www.blogger.com/profile/07018646389008992615</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>10</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7687478235670017299.post-8331751703763468669</id><published>2011-03-08T22:30:00.003-06:00</published><updated>2011-03-08T22:31:00.384-06:00</updated><title type='text'>Wolverine</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh3.googleusercontent.com/-olCJ5gnWI5M/TXcCSLYTM1I/AAAAAAAAADY/QVI6f9pJueo/s1600/wolverine.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="https://lh3.googleusercontent.com/-olCJ5gnWI5M/TXcCSLYTM1I/AAAAAAAAADY/QVI6f9pJueo/s400/wolverine.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7687478235670017299-8331751703763468669?l=www.iremote.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.iremote.com/feeds/8331751703763468669/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.iremote.com/2011/03/wolverine.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7687478235670017299/posts/default/8331751703763468669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7687478235670017299/posts/default/8331751703763468669'/><link rel='alternate' type='text/html' href='http://www.iremote.com/2011/03/wolverine.html' title='Wolverine'/><author><name>Robert</name><uri>http://www.blogger.com/profile/07018646389008992615</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh3.googleusercontent.com/-olCJ5gnWI5M/TXcCSLYTM1I/AAAAAAAAADY/QVI6f9pJueo/s72-c/wolverine.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7687478235670017299.post-9169592458099427961</id><published>2011-01-13T23:47:00.001-06:00</published><updated>2011-01-13T23:59:18.416-06:00</updated><title type='text'>Favorite Music of 2010</title><content type='html'>Some of my most guilty pleasures are all those "best of the year" lists that pretty much every magazine releases in January. So, I thought since I spent so much time this year with headphones on, I'd make my own "Favorite Music of 2010" lists...&lt;br /&gt;&lt;br /&gt;8)&amp;nbsp;&lt;i&gt;&lt;b&gt;Genuine Negro Jig&lt;/b&gt;&amp;nbsp;by Carolina Chocolate Drops&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;7)&amp;nbsp;&lt;i&gt;&lt;b&gt;Broken Bells&lt;/b&gt;&amp;nbsp;by Broken Bells&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;6)&amp;nbsp;&lt;i&gt;&lt;b&gt;A Badly Broken Code&amp;nbsp;&lt;/b&gt;by&amp;nbsp;Dessa&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;5)&amp;nbsp;&lt;i&gt;&lt;b&gt;Congratulations&lt;/b&gt;&amp;nbsp;by&amp;nbsp;MGMT&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;4)&amp;nbsp;&lt;i&gt;&lt;b&gt;The Reluctant Graveyard&lt;/b&gt;&amp;nbsp;by Jeremy&amp;nbsp;Messersmith&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;3)&amp;nbsp;&lt;i&gt;&lt;b&gt;High Violet&lt;/b&gt;&amp;nbsp;by The National&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;2)&amp;nbsp;&lt;i&gt;&lt;b&gt;Fantasies&lt;/b&gt;&amp;nbsp;by Metric&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;1)&amp;nbsp;&lt;i&gt;&lt;b&gt;Brothers&lt;/b&gt;&amp;nbsp;by The Black Keys&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;None of them released new albums, but&amp;nbsp;I also spent many, many hours listening to The Avett Brothers, Elliott Smith and Ben Folds this year.&lt;br /&gt;&lt;br /&gt;My biggest disappointment of the year is Lonely Avenue by Ben Folds and Nick Hornby. I love them both, but man, that's a bad album.&lt;br /&gt;&lt;br /&gt;I'd also like to point out that this year sucked if you're a hip hop fan. I know everyone will call 2010 the year of Kanye, but My Beautiful Dark Twisted Fantasy was just good. Maybe I haven't spent enough time with it, but I don't think it's as groundbreaking as every critic says it is.&lt;br /&gt;&lt;br /&gt;Thoughts?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7687478235670017299-9169592458099427961?l=www.iremote.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.iremote.com/feeds/9169592458099427961/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.iremote.com/2011/01/favorite-music-of-2010.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7687478235670017299/posts/default/9169592458099427961'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7687478235670017299/posts/default/9169592458099427961'/><link rel='alternate' type='text/html' href='http://www.iremote.com/2011/01/favorite-music-of-2010.html' title='Favorite Music of 2010'/><author><name>Robert</name><uri>http://www.blogger.com/profile/07018646389008992615</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7687478235670017299.post-2277990383508012088</id><published>2010-08-30T08:05:00.000-05:00</published><updated>2010-08-30T08:05:58.364-05:00</updated><title type='text'>Closet Project</title><content type='html'>Rachel and I both love our house. It's great, really. But, the top floor which we use as our "master suite" has a lot to be desired. It's all knotted pine, there's only a couple power outlets, the insulation is almost non-existent so it gets cold in the winter and hot in the summer, etc, etc, etc.&lt;br /&gt;&lt;br /&gt;One of our least-favorite things about our room is the closet. It's a decent size for two people - a normal depth and at least 8 feet long. The flaw has always been that the only access to it was two tiny doors.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_yW1nLXH4Gw8/THuqQO5SMXI/AAAAAAAAACo/qkWNqeORyBI/s1600/IMG_0975.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_yW1nLXH4Gw8/THuqQO5SMXI/AAAAAAAAACo/qkWNqeORyBI/s320/IMG_0975.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_yW1nLXH4Gw8/THuqaGlIjsI/AAAAAAAAACw/IhqlHPhwH-c/s1600/IMG_0976.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_yW1nLXH4Gw8/THuqaGlIjsI/AAAAAAAAACw/IhqlHPhwH-c/s320/IMG_0976.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Not only was it hard to reach things not directly in front of the doors, but it was really dark in there, and there were no lights at all.&lt;br /&gt;&lt;br /&gt;In the long term we'll be having all the walls removed and replaced with normal drywall. But for now we had a few hours to blow so we decided to see what we could do about this closet.&lt;br /&gt;&lt;br /&gt;Since all we wanted was better access, we decided to just cut the wall out from between the doors and then extend that whole another foot or so on both sides. First we tore off all the trim and then used a circular saw to cut the new giant hole in the wall. Then, we took the trim pieces we had demo'd and used them to trim up the new hole.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_yW1nLXH4Gw8/THurbzLSsZI/AAAAAAAAAC4/hICAwERr2yA/s1600/IMG_0982.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_yW1nLXH4Gw8/THurbzLSsZI/AAAAAAAAAC4/hICAwERr2yA/s320/IMG_0982.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_yW1nLXH4Gw8/THurib5RfFI/AAAAAAAAADA/tNg5N6DrZyQ/s1600/IMG_0983.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_yW1nLXH4Gw8/THurib5RfFI/AAAAAAAAADA/tNg5N6DrZyQ/s320/IMG_0983.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Overall the final result looks much better then I'd hoped. Suprisingly, it took less than four hours total, including cleanup!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7687478235670017299-2277990383508012088?l=www.iremote.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.iremote.com/feeds/2277990383508012088/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.iremote.com/2010/08/closet-project.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7687478235670017299/posts/default/2277990383508012088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7687478235670017299/posts/default/2277990383508012088'/><link rel='alternate' type='text/html' href='http://www.iremote.com/2010/08/closet-project.html' title='Closet Project'/><author><name>Robert</name><uri>http://www.blogger.com/profile/07018646389008992615</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_yW1nLXH4Gw8/THuqQO5SMXI/AAAAAAAAACo/qkWNqeORyBI/s72-c/IMG_0975.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7687478235670017299.post-5630299357797641905</id><published>2010-08-05T16:35:00.002-05:00</published><updated>2010-08-05T17:13:39.293-05:00</updated><title type='text'>Globally Trimming Strings in Struts2</title><content type='html'>&lt;p&gt;An application I'm working on has a lot of data being passed from the client to the server. In past applications, we've always been cleaning up this data manually, one property at a time - sometimes in the save method, but more likely in the setter:&lt;p&gt;&lt;br /&gt;&lt;pre class="brush: java"&gt;public void setFirstName(String firstName)&lt;br /&gt;{&lt;br /&gt;    this.firstName = (firstName != null ? firstName.trim() : null);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Of course you could globalize this a touch:&lt;/p&gt;&lt;br /&gt;&lt;pre class="brush: java"&gt;public void setFirstName(String firstName)&lt;br /&gt;{&lt;br /&gt;    this.firstName = StringUtils.nullSafeTrim(firstName);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Well, with the volume of properties in the system we didn't want to handle this every time. So, I found a neat little thing you can do with Struts2. There are classes in Struts2 which convert the request parameters into the type of the property on the bean.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Of course, everything except files come over the wire as text, so in reality converting to a String is as simple as unpacking it out of the array that is handed to you from the servlet container. But, in our case, we want to do a quick trim on the value before Struts2 hands it to the action. To do this you need to:&lt;/p&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Create a new class to do the conversion.&lt;/li&gt;&lt;li&gt;Tell Struts2 to use this class to do the conversion.&lt;br /&gt;&lt;/ol&gt;&lt;p&gt;Pretty simple, right?&lt;/p&gt;&lt;p&gt;Your new type conversion class needs to extend org.apache.struts2.util.DefaultTypeConverter, which is an abstract class. Here's what I came up with (I omitted a lot of unimportant code):&lt;/p&gt;&lt;pre class="brush: java"&gt;public class TrimmingStringConverter extends StrutsTypeConverter&lt;br /&gt;{&lt;br /&gt;    @Override&lt;br /&gt;    public Object convertFromString(Map context, String[] values, Class toClass)&lt;br /&gt;    {&lt;br /&gt;        if (values != null &amp;&amp; values.length &gt; 0)&lt;br /&gt;        {&lt;br /&gt;            return values[0].trim();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        return null;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public String convertToString(Map context, Object o)&lt;br /&gt;    {&lt;br /&gt;        if (o != null)&lt;br /&gt;        {&lt;br /&gt;            return o.toString();&lt;br /&gt;        }&lt;br /&gt;        else&lt;br /&gt;        {&lt;br /&gt;            return null;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public Object convertValue(Map context, Object o, Class toClass)&lt;br /&gt;    {&lt;br /&gt;        if (o == null)&lt;br /&gt;        {&lt;br /&gt;            return null;&lt;br /&gt;        }&lt;br /&gt;        else if (toClass == java.lang.String.class)&lt;br /&gt;        {&lt;br /&gt;            if (o instanceof String[])&lt;br /&gt;            {&lt;br /&gt;                String[] os = (String[]) o;&lt;br /&gt;&lt;br /&gt;                if (os.length &gt; 0)&lt;br /&gt;                {&lt;br /&gt;                    return os[0].trim();&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            return o.toString().trim();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        return super.convertValue(context, o, toClass);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;The convertValue() method is implemented in the parent, so you don't have to override it. However, this seems to be the method called when I was testing, so it's important that you do.&lt;/p&gt;&lt;p&gt;Next up, you need to tell Struts2 about your shiny new code. It's as simple as adding a new properties file to your classpath called xwork-conversion.properties. In that file you should add:&lt;/p&gt;&lt;pre&gt;java.lang.String = path.to.your.TrimmingStringConverter&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;My quick testing showed that every single String that came in from user input was trimmed up.&lt;/p&gt;&lt;p&gt;If anyone knows of a better way, or improvements I can make, leave a comment.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7687478235670017299-5630299357797641905?l=www.iremote.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.iremote.com/feeds/5630299357797641905/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.iremote.com/2010/08/globally-trimming-strings-in-struts2.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7687478235670017299/posts/default/5630299357797641905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7687478235670017299/posts/default/5630299357797641905'/><link rel='alternate' type='text/html' href='http://www.iremote.com/2010/08/globally-trimming-strings-in-struts2.html' title='Globally Trimming Strings in Struts2'/><author><name>Robert</name><uri>http://www.blogger.com/profile/07018646389008992615</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7687478235670017299.post-1718969734975272245</id><published>2010-05-11T09:00:00.000-05:00</published><updated>2010-05-11T09:00:35.698-05:00</updated><title type='text'>Google Apps Engine</title><content type='html'>Last nig&lt;span style="font-size: small;"&gt;&lt;span style="font-family: inherit;"&gt;ht I went to a &lt;a href="http://www.tcjug.org/"&gt;TCJUG&lt;/a&gt; presentation on the &lt;a href="http://code.google.com/appengine/"&gt;Google Apps Engine&lt;/a&gt;. The speaker was &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.blogger.com/goog_1939143087"&gt;&lt;span class="given-name"&gt;Brad&lt;/span&gt;           &lt;/a&gt;&lt;span class="family-name"&gt;&lt;a href="http://bcharan.blogspot.com/"&gt;Charan&lt;/a&gt; from &lt;a href="http://www.wellsfargo.com/"&gt;Wells Fargo&lt;/a&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span class="family-name"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span class="family-name"&gt;Very interesting stuff. It looks like they give you a somewhat crippled Servlet container, plus access to their database called &lt;a href="http://en.wikipedia.org/wiki/Big_table"&gt;Big Table&lt;/a&gt;, an asynchronous task list, cron, and a bunch of admin tools. Of course, there's an Eclipse plugin for the SDK.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span class="family-name"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span class="family-name"&gt;I'm not sure I'd want to build a really big system on it, but if you want to get an app out the door, boy this would be a nice solution.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span class="family-name"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span class="family-name"&gt;There's an Android app I've always wanted to write which would require a server-side to sync data, and this would be the perfect solution.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span class="family-name"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span class="family-name"&gt;I'll post more on it, when I get around to trying it out a little.&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7687478235670017299-1718969734975272245?l=www.iremote.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.iremote.com/feeds/1718969734975272245/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.iremote.com/2010/05/google-apps-engine.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7687478235670017299/posts/default/1718969734975272245'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7687478235670017299/posts/default/1718969734975272245'/><link rel='alternate' type='text/html' href='http://www.iremote.com/2010/05/google-apps-engine.html' title='Google Apps Engine'/><author><name>Robert</name><uri>http://www.blogger.com/profile/07018646389008992615</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7687478235670017299.post-6190035041042059618</id><published>2010-05-03T22:18:00.000-05:00</published><updated>2010-05-03T22:18:19.381-05:00</updated><title type='text'>Twins Game</title><content type='html'>Rachel and I went to the Twins game tonight. It was my first time in Target Field. It was cold and drizzling the whole game.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_yW1nLXH4Gw8/S9-Pg_6o3vI/AAAAAAAAACI/_PJq3mwS40I/s1600/IMG_0644.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_yW1nLXH4Gw8/S9-Pg_6o3vI/AAAAAAAAACI/_PJq3mwS40I/s320/IMG_0644.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Wow, what a huge improvement over watching the Twins in the Metrodome.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_yW1nLXH4Gw8/S9-Pu5E5UhI/AAAAAAAAACQ/T9jO1R8rpvE/s1600/IMG_0646+1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_yW1nLXH4Gw8/S9-Pu5E5UhI/AAAAAAAAACQ/T9jO1R8rpvE/s320/IMG_0646+1.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;We had pretty decent seats, fourth row, left field.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_yW1nLXH4Gw8/S9-Q0kblOSI/AAAAAAAAACY/1_QquqgxxpA/s1600/IMG_0647+1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_yW1nLXH4Gw8/S9-Q0kblOSI/AAAAAAAAACY/1_QquqgxxpA/s320/IMG_0647+1.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;My initial thoughts? First, the stadium itself is really beautiful. It felt surprisingly intimate considering how many people were there. My main complaints involve the concessions. They were out of a lot of things, which seemed weird to me. Plus - personal gripe here - they didn't have onions for my hotdog, which is criminal! Rachel's hotdog was cold - a slightly more forgivable gaff.&lt;br /&gt;&lt;br /&gt;Anyway, we'll probably see a couple more games this year since it's so close to home. I'm looking forward to seeing a game when it's sunny and warm out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7687478235670017299-6190035041042059618?l=www.iremote.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.iremote.com/feeds/6190035041042059618/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.iremote.com/2010/05/twins-game.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7687478235670017299/posts/default/6190035041042059618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7687478235670017299/posts/default/6190035041042059618'/><link rel='alternate' type='text/html' href='http://www.iremote.com/2010/05/twins-game.html' title='Twins Game'/><author><name>Robert</name><uri>http://www.blogger.com/profile/07018646389008992615</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_yW1nLXH4Gw8/S9-Pg_6o3vI/AAAAAAAAACI/_PJq3mwS40I/s72-c/IMG_0644.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7687478235670017299.post-4956858203934493193</id><published>2010-05-02T15:27:00.002-05:00</published><updated>2010-05-02T18:45:05.891-05:00</updated><title type='text'>Sunday Project: Herb Garden</title><content type='html'>Every year for the last decade I've tried to pull off an herb garden with varying levels of success. In the past - in apartments and townhouses - I'd tried pots on the deck, pots in a sunny window, and even pots in a sunny window with UV grow lights for a little extra oomph.&lt;br /&gt;&lt;br /&gt;But not this year. This year I have my own house, which means my own little plot of land I can till under and grow things for real. Unfortunately for this little project, I have a perfectly manicured back yard which was designed by some backyard designer and has everything in it's right place. Seriously, there's barely a few feet of unused space. Also, I really want to keep this project cheep. I'm putting a $100 ceiling on it, just because it's a round number.&lt;br /&gt;&lt;br /&gt;After staring at every corner of my backyard and purposely not asking the wife, I found my spot. Four feet by four feet, mostly sunny but with a shady corner. Right now it's in the middle of a wood chipped area, so I'll have to do a raised garden.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_yW1nLXH4Gw8/S93cbIy-HvI/AAAAAAAAABA/gCVIHJvYefI/s1600/IMG_0629.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_yW1nLXH4Gw8/S93cbIy-HvI/AAAAAAAAABA/gCVIHJvYefI/s320/IMG_0629.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_yW1nLXH4Gw8/S93coLIqrtI/AAAAAAAAABI/VtKrY2idG28/s1600/IMG_0631.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_yW1nLXH4Gw8/S93coLIqrtI/AAAAAAAAABI/VtKrY2idG28/s320/IMG_0631.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Apparently Home Depot has a couple 4x4 raised garden kits, so I went there to take a look. I ended up buying &lt;a href="http://www.homedepot.com/Outdoors-Garden-Center-Landscaping-Supplies-Raised-Beds/h_d1/N-5yc1vZ1xitZblw3/R-202061234/h_d2/ProductDisplay?langId=-1&amp;amp;storeId=10051&amp;amp;catalogId=10053"&gt;the cheapest one&lt;/a&gt;, because I'm on a budget and I figured this was a two-year experiment, so I don't need something that will last forever. The kit was $40. It's 4'x4'x6", which means I'll need 8 cubic feet to fill it. I have a ton of old pots full of dirt in my shed, and a half-bag of potting soil from years ago. So, I bought 3 cubic feet of top soil ($8) and 2 cubic feet of garden soil ($6). I also bought 3 cilantro plants, 1 basil plant, 1 hot pepper plant, 1 thyme plant, 1 dill plant, 1 parsley plant, and 1 rosemary plant ($33).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_yW1nLXH4Gw8/S93eK4zmt5I/AAAAAAAAABQ/GaZ0YNHP1GY/s1600/IMG_0632.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_yW1nLXH4Gw8/S93eK4zmt5I/AAAAAAAAABQ/GaZ0YNHP1GY/s320/IMG_0632.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Step 1: put together the raised garden kit. This was a piece of cake. 24 screws into pre-drilled holes and bam, done!&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_yW1nLXH4Gw8/S93enfYC0rI/AAAAAAAAABY/bEmY-m4Xg3o/s1600/IMG_0633.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_yW1nLXH4Gw8/S93enfYC0rI/AAAAAAAAABY/bEmY-m4Xg3o/s320/IMG_0633.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;I raked the wood chips back from the spot I was putting the garden, and used a level to get the frame set up.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_yW1nLXH4Gw8/S93hKUTIn1I/AAAAAAAAACA/zzmfMqJ1GHM/s1600/IMG_0635.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_yW1nLXH4Gw8/S93hKUTIn1I/AAAAAAAAACA/zzmfMqJ1GHM/s320/IMG_0635.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Then, add the "good" dirt, and all the crappy dirt I had laying around. Fifteen minutes of tilling it, and I'm ready to plant.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_yW1nLXH4Gw8/S93fJS_g67I/AAAAAAAAABg/lyAZ6Vx-Hhc/s1600/IMG_0636.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_yW1nLXH4Gw8/S93fJS_g67I/AAAAAAAAABg/lyAZ6Vx-Hhc/s320/IMG_0636.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;I arranged the plants by how often I expect to use them, and how much sun each area should get.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_yW1nLXH4Gw8/S93fZQUCSVI/AAAAAAAAABo/Tyf2jCubLck/s1600/IMG_0637.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_yW1nLXH4Gw8/S93fZQUCSVI/AAAAAAAAABo/Tyf2jCubLck/s320/IMG_0637.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;And, once planted, it looks pretty good.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_yW1nLXH4Gw8/S93flQ_wHrI/AAAAAAAAABw/f-kGILYpVkU/s1600/IMG_0640.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_yW1nLXH4Gw8/S93flQ_wHrI/AAAAAAAAABw/f-kGILYpVkU/s320/IMG_0640.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_yW1nLXH4Gw8/S93fsZxvHpI/AAAAAAAAAB4/vmQwL2J5WUI/s1600/IMG_0643.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_yW1nLXH4Gw8/S93fsZxvHpI/AAAAAAAAAB4/vmQwL2J5WUI/s320/IMG_0643.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;All in all, it took me about three hours (including the shopping) and $93 to put a herb garden in my back yard. Of course, I still have $7 left in my budget, and room for at least 7 more plants, so I'm sure I'll add to this before too long.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7687478235670017299-4956858203934493193?l=www.iremote.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.iremote.com/feeds/4956858203934493193/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.iremote.com/2010/05/sunday-project-herb-garden.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7687478235670017299/posts/default/4956858203934493193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7687478235670017299/posts/default/4956858203934493193'/><link rel='alternate' type='text/html' href='http://www.iremote.com/2010/05/sunday-project-herb-garden.html' title='Sunday Project: Herb Garden'/><author><name>Robert</name><uri>http://www.blogger.com/profile/07018646389008992615</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_yW1nLXH4Gw8/S93cbIy-HvI/AAAAAAAAABA/gCVIHJvYefI/s72-c/IMG_0629.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7687478235670017299.post-2425789234669599739</id><published>2010-04-25T15:16:00.000-05:00</published><updated>2010-04-25T15:16:20.323-05:00</updated><title type='text'>Ok, I'm lost.</title><content type='html'>So, I've got this new project for &lt;a href="http://www.stateless-software.com/"&gt;Stateless&lt;/a&gt; which I'm just in the first steps of setting up. We're going to be using Struts 2, &lt;a href="http://www.hibernate.org/"&gt;Hibernate&lt;/a&gt; this time, and I want to get &lt;a href="http://maven.apache.org/"&gt;Maven&lt;/a&gt; working with this thing. A half-dozen hours in and I'm completely lost. Their 10 minute primer should start with information and terminology, not just install commands.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7687478235670017299-2425789234669599739?l=www.iremote.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.iremote.com/feeds/2425789234669599739/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.iremote.com/2010/04/ok-im-lost.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7687478235670017299/posts/default/2425789234669599739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7687478235670017299/posts/default/2425789234669599739'/><link rel='alternate' type='text/html' href='http://www.iremote.com/2010/04/ok-im-lost.html' title='Ok, I&apos;m lost.'/><author><name>Robert</name><uri>http://www.blogger.com/profile/07018646389008992615</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7687478235670017299.post-6181868527543270681</id><published>2010-04-22T08:46:00.000-05:00</published><updated>2010-04-22T08:46:30.431-05:00</updated><title type='text'>Amazing Asian Salad</title><content type='html'>I've been working on putting together a really good Asian salad. Last night I made it, and I think it's getting close to perfect. Here it is (for two):&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Dressing&lt;/b&gt;&lt;br /&gt;3 Tbsp Rice Wine Vinegar&lt;br /&gt;2 Tbsp Soy Sauce&lt;br /&gt;2 Tbsp Peanut Oil&lt;br /&gt;1 Tbsp Sesame Oil&lt;br /&gt;1 Tbsp Sesame Seeds, toasted &lt;br /&gt;Juice of 1/2 Lemon&lt;br /&gt;1 Egg Yolk&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Salad&lt;/b&gt;&lt;br /&gt;1 lbs Shrimp, cut in 1/2" pieces&lt;br /&gt;4 cloves Garlic, minced&lt;br /&gt;1 head Romaine Lettuce, cut to 1" squares&lt;br /&gt;2 servings Rice Noodles&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&amp;nbsp;Mix the dressing ingredients together and set aside.&lt;/li&gt;&lt;li&gt;Cook the rice noodles, shock, and toss with peanut oil. Chop them up so they're not too terribly long. Set aside.&lt;/li&gt;&lt;li&gt;Heat peanut oil in a saute pan until just smoking. Add the garlic and let cook for a few seconds. Add the shrimp and cook until no longer transparent.&lt;/li&gt;&lt;li&gt;Toss the noodles, lettuce, shrimp, and dressing together. Serve with dressing.&lt;/li&gt;&lt;/ol&gt;The flavor on this is straight up fantastic. Unfortunately it's a real pain to eat. If anyone has some good ideas on that, let me know.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7687478235670017299-6181868527543270681?l=www.iremote.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.iremote.com/feeds/6181868527543270681/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.iremote.com/2010/04/amazing-asian-salad.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7687478235670017299/posts/default/6181868527543270681'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7687478235670017299/posts/default/6181868527543270681'/><link rel='alternate' type='text/html' href='http://www.iremote.com/2010/04/amazing-asian-salad.html' title='Amazing Asian Salad'/><author><name>Robert</name><uri>http://www.blogger.com/profile/07018646389008992615</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7687478235670017299.post-3440568679754281770</id><published>2010-04-20T19:27:00.001-05:00</published><updated>2010-04-20T19:27:53.549-05:00</updated><title type='text'>First Post!</title><content type='html'>Yes, iRemote has been out of commission for a frightening amount of time. So, now, I'm going to use Blogger to see if I can keep it up to date if I don't have to manage the code myself.&lt;br /&gt;&lt;br /&gt;We'll see how it goes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7687478235670017299-3440568679754281770?l=www.iremote.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.iremote.com/feeds/3440568679754281770/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.iremote.com/2010/04/first-post.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7687478235670017299/posts/default/3440568679754281770'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7687478235670017299/posts/default/3440568679754281770'/><link rel='alternate' type='text/html' href='http://www.iremote.com/2010/04/first-post.html' title='First Post!'/><author><name>Robert</name><uri>http://www.blogger.com/profile/07018646389008992615</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
