<?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-14058597</id><updated>2011-04-21T19:35:44.600-07:00</updated><title type='text'>James Halberg</title><subtitle type='html'>Improving daily</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://jameshalberg.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://jameshalberg.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>jimhalberg</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_72ioET0baFA/S2pYvmHMW-I/AAAAAAAAADY/VenBXpa0kAI/S220/profile.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>32</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-14058597.post-114381303698976097</id><published>2006-03-31T05:48:00.000-08:00</published><updated>2006-03-31T05:53:32.773-08:00</updated><title type='text'>Movin on up.</title><content type='html'>The technical blog on blogger is coming to an end.  Don't cry: I'm starting a &lt;a href="http://jameshalberg.com/"&gt;new one&lt;/a&gt; over at wordpress.  &lt;a href="http://jameshalberg.com/"&gt;jameshalberg.com&lt;/a&gt; has been redirected, but if that isn't working for some reason (sometimes there are some bumps the day after changing) - you can hit the url directly: &lt;a href="http://jameshalberg.wordpress.com/"&gt;jameshalberg.wordpress.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Hope to see you there!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14058597-114381303698976097?l=jameshalberg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jameshalberg.blogspot.com/feeds/114381303698976097/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14058597&amp;postID=114381303698976097' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/114381303698976097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/114381303698976097'/><link rel='alternate' type='text/html' href='http://jameshalberg.blogspot.com/2006/03/movin-on-up.html' title='Movin on up.'/><author><name>jimhalberg</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_72ioET0baFA/S2pYvmHMW-I/AAAAAAAAADY/VenBXpa0kAI/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14058597.post-114062186549229821</id><published>2006-02-22T07:09:00.000-08:00</published><updated>2006-02-22T07:24:25.526-08:00</updated><title type='text'>Confusion through documentation</title><content type='html'>In working with the &lt;a href="http://cewolf.sourceforge.net/new/index.html"&gt;CEWolf&lt;/a&gt; (which I believe stands for: Chart Enabling... um, Wolf) I came across a pretty fundamental question: how do you let the framework know when a chart can be reused vs. when it should be rebuilt?&lt;br /&gt;&lt;br /&gt;Conveniently, there is a method that does just that and is located in an extremely logical (and convenient) spot.  Now to figure out how to use it...  here's the classes &lt;a href="http://cewolf.sourceforge.net/apidoc/de/laures/cewolf/DatasetProducer.html"&gt;javadoc&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;1. The method is called "hasExpired" and returns a boolean, which indicates to me that if I return "true": the data "has expired".  So, if I want to regenerate I should return true.&lt;br /&gt;&lt;br /&gt;2. The javadoc states: "If the data which had already been used for chart rendering is still valid this method should return true".  Ok... so, I guess if I want to regenerate I should return false.&lt;br /&gt;&lt;br /&gt;3.  The javadoc goes on to say: "...there is no guarantee that the dataset production is always avoided if this method returns true".  This seems to go along with #2 again: while returning true doesn't guarantee anything, it does mean we'll at least attempt to avoid reproduction: so, if I want to regenerate I should return false.&lt;br /&gt;&lt;br /&gt;4.  And finally, the javadoc wraps up with:  "Returns: true if the data which had been produced with the passed in parameters has expired since its creation, false otherwise".  Which seems to basically restate what I was thinking in #1.  So, (in my thinking) if I want to regenerate I should return true.&lt;br /&gt;&lt;br /&gt;Well, I guess that since #1 and #4 are based on my interpretations while #2 and #3 are blatently telling me that my interpretation is wrong, I am going to start with returning false when I want to regenerate... but I don't like it.  and even if return false does regenerate: I'm going to have to test to make sure that's right.  Kinda stinks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14058597-114062186549229821?l=jameshalberg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jameshalberg.blogspot.com/feeds/114062186549229821/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14058597&amp;postID=114062186549229821' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/114062186549229821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/114062186549229821'/><link rel='alternate' type='text/html' href='http://jameshalberg.blogspot.com/2006/02/confusion-through-documentation.html' title='Confusion through documentation'/><author><name>jimhalberg</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_72ioET0baFA/S2pYvmHMW-I/AAAAAAAAADY/VenBXpa0kAI/S220/profile.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14058597.post-113941159085428069</id><published>2006-02-08T07:08:00.000-08:00</published><updated>2006-02-08T07:13:10.876-08:00</updated><title type='text'>The IT gravy train must be derailed</title><content type='html'>"The IT gravy train must be derailed", Robert Cowles (WI State Senator).  An &lt;a href="http://wistechnology.com/article.php?id=2668"&gt;article&lt;/a&gt; on &lt;a href="http://wistechnology.com/"&gt;WTN&lt;/a&gt; (Monday) reports on several state senators calling for an audit of state-government IT spending.&lt;br /&gt;&lt;br /&gt;Overall I agree with the theme presented in a couple &lt;a href="http://www.legis.state.wi.us/senate/sen02/news/Press/2006/pr2006-007.htm"&gt;press&lt;/a&gt; &lt;a href="http://www.legis.state.wi.us/senate/sen02/news/Press/2006/pr2006-006.htm"&gt;releases&lt;/a&gt; from last Friday: an audit seems like a very healthy thing to do.&lt;br /&gt;&lt;br /&gt;Projects run over budget: it happens.  Projects run &lt;b&gt;way&lt;/b&gt; over budget: sometimes you can't avoid that either.  When it's happening consistently though, it's time to take a step back to identify and address what's going wrong.  &lt;br /&gt;&lt;br /&gt;My only disagreements with the releases are on fairly subtle and somewhat minor points:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The fact that a someone is "high paid" (or that something has a high price tag) doesn't mean that they're overpriced and/or not worth it...  Doesn't mean they are worth it either, but you need to take a closer look to make that call.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Having to spend $1.5 million in the middle of a $47 million project just to make sure you're moving in the right direction is unfortunate.  but in all likelihood, if the key players think that it's worthwhile: it's going to save you money in the end.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14058597-113941159085428069?l=jameshalberg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jameshalberg.blogspot.com/feeds/113941159085428069/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14058597&amp;postID=113941159085428069' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/113941159085428069'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/113941159085428069'/><link rel='alternate' type='text/html' href='http://jameshalberg.blogspot.com/2006/02/it-gravy-train-must-be-derailed.html' title='The IT gravy train must be derailed'/><author><name>jimhalberg</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_72ioET0baFA/S2pYvmHMW-I/AAAAAAAAADY/VenBXpa0kAI/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14058597.post-113934548645676754</id><published>2006-02-07T12:38:00.000-08:00</published><updated>2006-02-07T12:52:05.860-08:00</updated><title type='text'>Paging with displaytag</title><content type='html'>While upgrading a few things (&lt;a href="http://struts.apache.org/"&gt;struts&lt;/a&gt;, &lt;a href="http://cewolf.sourceforge.net/new/"&gt;cewolf&lt;/a&gt;, etc) on an application we did last year I came across something odd in the implementation of &lt;a href="http://displaytag.sourceforge.net/11/"&gt;displaytag&lt;/a&gt;.  We had a custom "paging" solution implemented.&lt;br /&gt;&lt;br /&gt;It's not a huge deal but I figured I could stand to be a little more familiar with displaytag anyway so I went ahead and made the changes to rely on more displaytag functionality.&lt;br /&gt;&lt;br /&gt;The only thing that I'm really missing is a "display all" function.  This I had to kind of hack in - of course, it's easy to "display all": just don't use paging.  What I'm missing though is the ability to use paging, but also provide a link to disable/re-enable it.  I ended up putting in a bit of a hack solution that I'm not unhappy with... but I'd certainly like to get rid of.  Seems like there must be something like this built in that I'm missing?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14058597-113934548645676754?l=jameshalberg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jameshalberg.blogspot.com/feeds/113934548645676754/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14058597&amp;postID=113934548645676754' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/113934548645676754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/113934548645676754'/><link rel='alternate' type='text/html' href='http://jameshalberg.blogspot.com/2006/02/paging-with-displaytag.html' title='Paging with displaytag'/><author><name>jimhalberg</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_72ioET0baFA/S2pYvmHMW-I/AAAAAAAAADY/VenBXpa0kAI/S220/profile.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14058597.post-113931759886961904</id><published>2006-02-07T05:05:00.000-08:00</published><updated>2006-02-07T05:09:39.746-08:00</updated><title type='text'>The joys of changing requirements</title><content type='html'>A good "Overheard" &lt;a href="http://www.overheardintheoffice.com/archives/001459.html"&gt;yesterday&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Sadly, requests like this are not at all infrequent.  but while this is certainly a funny post... working &lt;b&gt;with&lt;/b&gt; the users instead of just &lt;b&gt;for&lt;/b&gt; the users, on their requirements, could probably have avoided the whole dilemna.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14058597-113931759886961904?l=jameshalberg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jameshalberg.blogspot.com/feeds/113931759886961904/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14058597&amp;postID=113931759886961904' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/113931759886961904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/113931759886961904'/><link rel='alternate' type='text/html' href='http://jameshalberg.blogspot.com/2006/02/joys-of-changing-requirements.html' title='The joys of changing requirements'/><author><name>jimhalberg</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_72ioET0baFA/S2pYvmHMW-I/AAAAAAAAADY/VenBXpa0kAI/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14058597.post-113830304494703117</id><published>2006-01-26T11:15:00.000-08:00</published><updated>2006-01-26T11:17:24.966-08:00</updated><title type='text'>Using Code Metrics for Targeted Code Refactoring</title><content type='html'>I had a chance to attend &lt;a href="http://nofluffjuststuff.com/speaker_view.jsp?speakerId=32"&gt;Andrew Glover's&lt;/a&gt; &lt;i&gt;Using Code Metrics for Targeted Code Refactoring&lt;/i&gt;, at &lt;a href="http://www.madjug.org"&gt;MADJUG&lt;/a&gt; last night.&lt;br /&gt;&lt;br /&gt;Having very little exposure to source metrics, the highlights for me were the demos of using &lt;a href="http://www.kclee.de/clemens/java/javancss/"&gt;JavaNCSS&lt;/a&gt;, &lt;a href="http://pmd.sourceforge.net/"&gt;PMD&lt;/a&gt;, and the &lt;a href="http://www.teaminabox.co.uk/downloads/metrics/"&gt;Eclipse Metrics Plugin&lt;/a&gt;.  All very cool - my plan is to check out PMD.  It seemed to provide the functionality that I'd be looking for initially, so we'll see what it thinks of some of this code I've been writing lately.&lt;br /&gt;&lt;br /&gt;Other than the tools, the talk was largely centured on Andrew's favorite metric: Cyclomatic Complexity.  He ran some ridiculous code through the aforementioned tools to produce some reports illustrating just how outrageous it was.  More importantly, he did a very good job of illustrating what "outrageous" really meant:  hard to test, hard to maintain, and just plain painful to read.  More on his thoughts &lt;a href="http://www.onjava.com/pub/a/onjava/2004/06/16/ccunittest.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The topic also very much reminded me of a &lt;a href="http://www.agiledeveloper.com/blog/PermaLink,guid,e5fc282c-874e-45bf-b113-fa53dea4a5fd.aspx"&gt;post&lt;/a&gt; from &lt;a href="http://www.agiledeveloper.com/blog/"&gt;Venkat&lt;/a&gt; last week.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14058597-113830304494703117?l=jameshalberg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jameshalberg.blogspot.com/feeds/113830304494703117/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14058597&amp;postID=113830304494703117' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/113830304494703117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/113830304494703117'/><link rel='alternate' type='text/html' href='http://jameshalberg.blogspot.com/2006/01/using-code-metrics-for-targeted-code.html' title='Using Code Metrics for Targeted Code Refactoring'/><author><name>jimhalberg</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_72ioET0baFA/S2pYvmHMW-I/AAAAAAAAADY/VenBXpa0kAI/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14058597.post-113741870898444253</id><published>2006-01-16T05:32:00.000-08:00</published><updated>2006-01-16T05:38:29.000-08:00</updated><title type='text'>A hole through the Earth</title><content type='html'>Subtitled (by him) &lt;i&gt;"Another stupid application for Google Maps..."&lt;/i&gt;, &lt;a href="http://grad.icmc.usp.br/~cipriani/bighole.php?lang=en"&gt;here&lt;/a&gt; the age old question: &lt;i&gt;"if I dug a hole straight through the earth, where would I come out"&lt;/i&gt; finally gets a better interface.&lt;br /&gt;&lt;br /&gt;Thanks to &lt;a href="http://lesliefedorchuk.blogspot.com/"&gt;Aunt Leslie&lt;/a&gt; for pointing this out to me last weekend.&lt;br /&gt;&lt;br /&gt;Also, on my search for the URL, I came across &lt;a href="http://credibility.stanford.edu/captology/notebook/archives.new/2005/09/now_students_ca.html"&gt;this&lt;/a&gt; link to the site.  I &lt;b&gt;really&lt;/b&gt; hope this isn't accurate.  &lt;br /&gt;&lt;i&gt;"A National Geographic study concluded that 11% of Americans 18-24 can't find the US on an unmarked map."&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14058597-113741870898444253?l=jameshalberg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jameshalberg.blogspot.com/feeds/113741870898444253/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14058597&amp;postID=113741870898444253' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/113741870898444253'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/113741870898444253'/><link rel='alternate' type='text/html' href='http://jameshalberg.blogspot.com/2006/01/hole-through-earth.html' title='A hole through the Earth'/><author><name>jimhalberg</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_72ioET0baFA/S2pYvmHMW-I/AAAAAAAAADY/VenBXpa0kAI/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14058597.post-113699833160655904</id><published>2006-01-11T08:43:00.000-08:00</published><updated>2006-01-11T08:52:11.616-08:00</updated><title type='text'>My Directions/Mapping Software Wishlist</title><content type='html'>Maybe these are already out there?  Definitely let me know if you've seen them.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1.  The ability to generate more general directions.&lt;/b&gt;&lt;br /&gt;When I say I want directions from &lt;a href="http://maps.google.com/maps?f=q&amp;hl=en&amp;q=madison,+wi+to+denver,+co&amp;btnG=Search&amp;ll=41.426253,-96.569824&amp;spn=11.543301,23.24707"&gt;"Madison, WI" to "Denver, CO"&lt;/a&gt;:  I want the directions to start out on the interstate/hwy leaving Madison and end up on the interstate/hwy entering Denver.  &lt;br /&gt;&lt;br /&gt;By not providing a specific starting address, I have indicated that I don't need help getting out of Madison or into Denver.  I don't want the directions I print to be comprised of 7 steps to get me out of Madison and 11 steps to get me into Denver with just a few in between.  &lt;br /&gt;&lt;br /&gt;With a little extra effort on my part I can take care of this by entering my starting point as some point outside Madison but that's not always either.  For example entering: &lt;a href="http://maps.google.com/maps?hl=en&amp;btnG=Search&amp;saddr=US-151,+Madison,+WI&amp;daddr=denver,+co&amp;f=d&amp;ll=43.052834,-97.185059&amp;spn=11.732664,23.24707"&gt;"US-151, Madison, WI"&lt;/a&gt; (my Madison exit route to Denver), I still am presented with directions that start downtown.  I could find some intersection outside of town... but that's a bit too much effort.&lt;br /&gt;&lt;br /&gt;How you ask can the intelligence to be added to know which Hwy is specific enough for me entering Denver?  ... I'm not really sure but I think it can be reasonably accomplished.  Maybe it already has been and I just need the correct format for entry?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2.  The ability to modify routes.&lt;/b&gt;&lt;br /&gt;You ask for directions from A-&gt;B.  The suggested route is:&lt;br /&gt;1. start at A.&lt;br /&gt;2. take a right on Oak St.&lt;br /&gt;3. take a left on Main St.&lt;br /&gt;4. take a right on Broadway Dr.&lt;br /&gt;5. arrive at B.&lt;br /&gt;&lt;br /&gt;For whatever reason (I'll give some below) you want a modified/alternate route.&lt;br /&gt;&lt;br /&gt;In my head, this is accomplished by me grabbing a point of the route (the line on the page) and dragging it somewhere.  Effectively, I think behind the scenes my request has changed to: Directions from A-&gt;X-&gt;B.  Where 'X' is the point that I just dragged to.  With enough dragging, I could effectively eliminate 'Main St' from my route (or minimize it anyway).&lt;br /&gt;&lt;br /&gt;An example: &lt;br /&gt;If you are coming to my house, this is the &lt;a href="http://maps.google.com/maps?hl=en&amp;saddr=E+Springs+Dr,+Madison,+WI&amp;daddr=Providence+Row,+Sun+Prairie,+WI+53590&amp;btnG=Search&amp;f=d&amp;ll=43.149783,-89.283056&amp;spn=0.043896,0.090809"&gt;easiest route&lt;/a&gt;.  Notice that you are proceeding on Hwy 151 to exit on CR-C.&lt;br /&gt;&lt;br /&gt;If you are leaving my house, this is the &lt;a href="http://maps.google.com/maps?f=d&amp;hl=en&amp;saddr=Providence+Row,+Sun+Prairie,+WI+53590&amp;daddr=E+Springs+Dr,+Madison,+WI&amp;btnG=Search&amp;ll=43.147278,-89.28546&amp;spn=0.043898,0.090809"&gt;easiest route&lt;/a&gt;.  Notice here that you are not using CR-C - because the entrance ramp is closed.&lt;br /&gt;&lt;br /&gt;It's true: these are the best routes for me to take to get to and from my house.  but when you come to visit me, I want to give you a route that you can use in both directions.  That way, if you somehow manage to find my place: retracing your steps later won't be so bad.&lt;br /&gt;&lt;br /&gt;Anyway, that's one example.  There are many others: you want a different route because you know of bad traffic or construction, you need to stop at the grocery store on the way, or maybe the human user can just plain determine that the route being presented is &lt;a href="http://maps.google.com/maps?f=d&amp;hl=en&amp;saddr=Providence+Row,+Sun+Prairie,+WI+53590&amp;daddr=Hwy+94,+Madison,+WI&amp;btnG=Search"&gt;incorrect or inefficient&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Anyone seen this stuff?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14058597-113699833160655904?l=jameshalberg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jameshalberg.blogspot.com/feeds/113699833160655904/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14058597&amp;postID=113699833160655904' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/113699833160655904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/113699833160655904'/><link rel='alternate' type='text/html' href='http://jameshalberg.blogspot.com/2006/01/my-directionsmapping-software-wishlist.html' title='My Directions/Mapping Software Wishlist'/><author><name>jimhalberg</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_72ioET0baFA/S2pYvmHMW-I/AAAAAAAAADY/VenBXpa0kAI/S220/profile.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14058597.post-113647141030206440</id><published>2006-01-05T06:15:00.000-08:00</published><updated>2006-01-05T06:30:10.320-08:00</updated><title type='text'>Open Source: It's the Law</title><content type='html'>Wisconsin governor Jim Doyle signed a &lt;a href="http://www.votetrustusa.org/index.php?option=com_content&amp;task=view&amp;id=248&amp;Itemid=113"&gt;bill &lt;/a&gt;recently that "...will require the software of touch-screen voting machines used in elections have its source code opened up to public viewing."&lt;br /&gt;&lt;br /&gt;After reading an &lt;a href="http://wistechnology.com/article.php?id=2585"&gt;article&lt;/a&gt; on the topic this morning (and some of the ensuing discussion there), it seems we're talking about "source that's available", not truly "Open Source" (or at least not by &lt;a href="http://en.wikipedia.org/wiki/Open_Source_Definition"&gt;this definition&lt;/a&gt; but hey: a step in the right direction for fraud prevention, if nothing else.&lt;br /&gt;&lt;br /&gt;Let's just all be thankful we finally can vote by touch screen.  I can't wait to tell my grandkids about how not only did I have to walk uphill both ways to school on -30F Wisconsin mornings, but I even had to use a pencil to draw a one inch long line to vote.  The humanity!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14058597-113647141030206440?l=jameshalberg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jameshalberg.blogspot.com/feeds/113647141030206440/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14058597&amp;postID=113647141030206440' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/113647141030206440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/113647141030206440'/><link rel='alternate' type='text/html' href='http://jameshalberg.blogspot.com/2006/01/open-source-its-law.html' title='Open Source: It&apos;s the Law'/><author><name>jimhalberg</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_72ioET0baFA/S2pYvmHMW-I/AAAAAAAAADY/VenBXpa0kAI/S220/profile.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14058597.post-113509881245771652</id><published>2005-12-20T09:09:00.000-08:00</published><updated>2005-12-20T09:13:32.466-08:00</updated><title type='text'>Simply Confusing</title><content type='html'>Any medium+ size application is going to call for quite a number of objects (java, jsp, css, etc, etc) to fit together to get a job done.  While it may be the complex algoryhtm that you developed that you put the most pride in - it's well worth taking a step back and making sure the simple names of your objects make sense.  Doing so (as discussed in &lt;a href="http://java.sun.com/docs/codeconv/"&gt;Sun's code conventions&lt;/a&gt;) can make things a bit more clear during initial development, but can pay great dividends during support.&lt;br /&gt;&lt;br /&gt;An example.  I recently worked on an application where the user signs in - selects what "org level" they would like to work with (unless they only are authorized to one) and is presented with the data (items) for that org level.  Very common.&lt;br /&gt;&lt;br /&gt;This process involved the following jsps: home.jsp, login.jsp, welcome.jsp&lt;br /&gt;&lt;br /&gt;To determine how those work together you'd have to get into the Struts config...  Checkout some Java code...  Checkout some of the form tags in the jsps...  This isn't difficult work but it definitely is frustrating when you're thinking: "I shouldn't have to do this". &lt;br /&gt;&lt;br /&gt;How about the following changes:&lt;br /&gt;home.jsp -&gt; welcome.jsp&lt;br /&gt;welcome.jsp -&gt; orgLevelNavigation.jsp&lt;br /&gt;login.jsp -&gt; baseDataEntry.jsp&lt;br /&gt;&lt;br /&gt;Now (hopefully) you can anticipate:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;welcome.jsp is the first screen: greet the user and provide some basic instructions, etc.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;orgLevelNavigation.jsp is a screen that will help guide the user to their desired org level.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;baseDataEntry.jsp turned out to be a screen that actually had nothing to do with someone logging in.  Go figure.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;... and I'll spare you what the Java objects supporting this project looked like!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14058597-113509881245771652?l=jameshalberg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jameshalberg.blogspot.com/feeds/113509881245771652/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14058597&amp;postID=113509881245771652' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/113509881245771652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/113509881245771652'/><link rel='alternate' type='text/html' href='http://jameshalberg.blogspot.com/2005/12/simply-confusing.html' title='Simply Confusing'/><author><name>jimhalberg</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_72ioET0baFA/S2pYvmHMW-I/AAAAAAAAADY/VenBXpa0kAI/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14058597.post-113426776704662606</id><published>2005-12-10T17:55:00.000-08:00</published><updated>2005-12-10T18:22:47.080-08:00</updated><title type='text'>The Spring Experience Wraps Up</title><content type='html'>Coming in I had some pretty high expectations for The Spring Experience (TSE) and it certainly didn't disapoint.  The speakers were exceptional, the style of the conference (manageable audience size, variety of topic choices at any given time, and speaker accessibility) were great.  Not to mention the Miami climate!&lt;br /&gt;&lt;br /&gt;I'm sure I've missed several people posting on TSE, but I'll throw a few more below.  In the meantime though, I wanted to report on something that I took away as quite important but haven't seen mentioned elsewhere:&lt;br /&gt;&lt;br /&gt;During &lt;a href="http://thespringexperience.com/speaker_view.jsp?speakerId=149"&gt;Rod Johnson's&lt;/a&gt; keynote on Friday he presented us with a list of "What you should be doing".  There are probably worse things you could do for your career than listen to Rod.&lt;br /&gt;&lt;br /&gt;(keep in mind that the topic of the keynote was Spring AOP/Aspect J)&lt;br /&gt;&lt;ol&gt;&lt;b&gt;A few to start with:&lt;/b&gt;&lt;li&gt;Develop a background in AOP.&lt;/li&gt;&lt;li&gt;Learn AspectJ pointcuts&lt;/li&gt;&lt;li&gt;Combine #1 and #2 by using Spring AOP with AspectJ pointcuts&lt;/li&gt;&lt;br /&gt;&lt;b&gt;Follow that up with the 2 more on AOP:&lt;/b&gt;&lt;li&gt;Look into design level assertions w/AspectJ to improve code quality.&lt;/li&gt;&lt;li&gt;Consider converting 'policy documents' to aspects&lt;/li&gt;&lt;br /&gt;&lt;b&gt;Finally, the catchall:&lt;/b&gt;&lt;li&gt;Look at: XML extensions, JMS, scoping, scripting, Spring MVC, remoting, WebFlow, Acegi security.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;The promised additional links...&lt;br /&gt;&lt;a href="http://jroller.com/page/JMoore/Weblog"&gt;Jim Moore&lt;/a&gt; has been doing quite a bit of blogging on individual sessions in addition to a post on the &lt;a href="http://jroller.com/trackback/JMoore/Weblog/ending_the_spring_experience_2005"&gt;presentation he gave&lt;/a&gt;.  I wanted to make that one but like he said... he was up against some pretty tough competition.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.blackbeanbag.net/blogs/index.php?title=more_tse_2005_coverage&amp;more=1&amp;c=1&amp;tb=1&amp;pb=1"&gt;Patrick Peralta&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And many more &lt;a href="http://thespringexperience.com/blogs_summary.jsp"&gt;here&lt;/a&gt;, of course.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14058597-113426776704662606?l=jameshalberg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jameshalberg.blogspot.com/feeds/113426776704662606/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14058597&amp;postID=113426776704662606' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/113426776704662606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/113426776704662606'/><link rel='alternate' type='text/html' href='http://jameshalberg.blogspot.com/2005/12/spring-experience-wraps-up.html' title='The Spring Experience Wraps Up'/><author><name>jimhalberg</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_72ioET0baFA/S2pYvmHMW-I/AAAAAAAAADY/VenBXpa0kAI/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14058597.post-113416467566804034</id><published>2005-12-09T13:30:00.000-08:00</published><updated>2005-12-09T15:23:35.593-08:00</updated><title type='text'>More of The Spring Experience</title><content type='html'>We're passed the midway point of the conference and so far I've been very happy with it.  As anticipated, Jay Zimmerman's running the show very much like &lt;a href="http://www.nofluffjuststuff.com/"&gt;NFJS&lt;/a&gt; shows, which works out great.  Laid back - plenty of access to the speakers, etc.&lt;br /&gt;&lt;br /&gt;To anyone reading this anywhere in the country other than Miami (and especially you suckers in Wisconsin), I would just like to say: ha ha, ha... ha ha... ha.  I hope you're enjoying the weather - I'll be back in a couple days.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://photos1.blogger.com/blogger/5679/1233/1600/weather.jpg" height="240"/&gt;&lt;br /&gt;&lt;br /&gt;A few of my favorite sessions so far...&lt;br /&gt;&lt;br /&gt;I've seen a couple of sessions from &lt;a href="http://thespringexperience.com/speaker_view.jsp?speakerId=149"&gt;Rod Johnson&lt;/a&gt;.  I enjoyed the 'Testing with Spring' session a bit more than the 'Spring Fundamentals' session... where I couldn't help myself and answered the "Knowledge of Subject" line, on the speaker evaluation, with a 1 out of 5.  &lt; grin /&gt;&lt;br /&gt;&lt;br /&gt;I had &lt;a href="http://jameshalberg.blogspot.com/2005/12/spring-experience-day-0.html"&gt;previously mentioned&lt;/a&gt; that I was struggling between whether to attend &lt;a href="http://thespringexperience.com/speaker_view.jsp?speakerId=45"&gt;Matt Raible's&lt;/a&gt; TDD session, or &lt;a href="http://thespringexperience.com/speaker_view.jsp?speakerId=27"&gt;Keith Donald's&lt;/a&gt; talk on Webflow.  I ended up going with the TDD talk.  It was the first talk I've seen Matt give and I enjoyed it.  The talk centered quite a bit on &lt;a href="http://raibledesigns.com/wiki/Wiki.jsp?page=AppFuse"&gt;AppFuse&lt;/a&gt;, but did also cover some TDD topics.  He also regularly poled the audience on "Who's currently using XYZ" etc for the various frameworks, taking it so far as to completely mold the demo to match what the majority wanted to see - definitely cool.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://thespringexperience.com/speaker_view.jsp?speakerId=5"&gt;Justin Gehtland&lt;/a&gt; gave a presentation on Spring MVC that may have been my favorite thus far.  He did have a bit of an unfair advantage as Spring MVC is something I am quite interested in + have no practical experience with (other than reading about it in &lt;a href="http://www.apress.com/book/bookDisplay.html?bID=405"&gt;Pro Spring&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Want more on what's going on around here?&lt;br /&gt;- I had a &lt;a href="http://jameshalberg.blogspot.com/2005/12/spring-experience-day-0.html"&gt;previous post&lt;/a&gt;&lt;br /&gt;- Craig has a &lt;a href="http://jroller.com/page/habuma?entry=blogging_from_the_spring_experience"&gt;post&lt;/a&gt;.&lt;br /&gt;- Colin has a &lt;a href="http://blog.exis.com/colin/archives/2005/12/08/spring-experience-2005-kicks-off/"&gt;post&lt;/a&gt;&lt;br /&gt;- Mr.Raible has some &lt;a href="http://jroller.com/page/raible?anchor=webwork_and_spring_with_matthew"&gt;very&lt;/a&gt; &lt;a href="http://jroller.com/page/raible?anchor=spring_agile_development_challenges_by"&gt;comprehensive&lt;/a&gt; &lt;a href="http://jroller.com/page/raible?anchor=the_spring_experience_rod_johnson"&gt;posts&lt;/a&gt; going.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14058597-113416467566804034?l=jameshalberg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jameshalberg.blogspot.com/feeds/113416467566804034/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14058597&amp;postID=113416467566804034' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/113416467566804034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/113416467566804034'/><link rel='alternate' type='text/html' href='http://jameshalberg.blogspot.com/2005/12/more-of-spring-experience.html' title='More of The Spring Experience'/><author><name>jimhalberg</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_72ioET0baFA/S2pYvmHMW-I/AAAAAAAAADY/VenBXpa0kAI/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14058597.post-113401166206448626</id><published>2005-12-07T18:41:00.000-08:00</published><updated>2005-12-07T19:14:22.086-08:00</updated><title type='text'>The Spring Experience - Day 0</title><content type='html'>After a &lt;a href="http://www.cnn.com/2005/US/12/07/airplane.gunshot/index.html"&gt;strange occurence&lt;/a&gt; at the airport on the way in (which somehow happened while I was there, yet I was unaware of); I've made it to &lt;a href="http://thespringexperience.com"&gt;The Spring Experience&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Not sure if I want to commit to reporting on what I see hear each day, but I figured I'd report back on the keynote of Day 0.&lt;br /&gt;&lt;br /&gt;Knowing going in that the keynote was from &lt;a href="http://www.springframework.com/people/rod.html"&gt;Rod Johnson&lt;/a&gt;, I was kinda expecting a "state of the world" talk illustrating how Spring was going to save us all.  Instead, what we got was a tagteam effort featuring Rod as the main contributor and MC.&lt;br /&gt;&lt;br /&gt;Early on Rod let us in on the big news: Spring going 2.0.  The plan is that 2.0 M1 will be released by the end of the conference - with an intention of having the legit 2.0 release in March ("Spring") of 2006.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.springframework.com/people/rob.html"&gt;Rob Harrop&lt;/a&gt; presented what sounds like the most impressive improvement in 2.0 : &lt;b&gt;incredibly&lt;/b&gt; simplified tags for some of the most common xml work.  If you've looked at these tags in the past you may think they're already pretty nice... you'll still be surprised at how slick the changes are.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.springframework.com/people/alef.html"&gt;Alef Arendsen&lt;/a&gt; demonstrated all of the changes that will be required to upgrade a Spring application to the 2.0 jars... nothing.  He swapped in the new jars and illustrated that the jPetStore app (modified from &lt;a href="http://www.ibatis.com/jpetstore/jpetstore.html"&gt;Clinton Begin's version&lt;/a&gt;) worked with absolutely no changes.  Another 45 seconds later he had swapped in the simplified xml changes that Rob had just demonstrated: again, no problems encountered.  Both Alef and Rod repeatedly said that they still have much testing and verification to do but that they know of nothing that would require change on an upgrade to 2.0.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.springframework.com/people/keith.html"&gt;Keith Donald&lt;/a&gt; then gave a great demo on &lt;a href="http://opensource.atlassian.com/confluence/spring/display/WEBFLOW/Home"&gt;Spring Webflow&lt;/a&gt;, of which he's co-lead.  "Conducting a logical conversation with the server to perform a complete transaction" pretty much summed it up.  The demo was amazingly clean and concise, illustrating the independence of flow logic from the rest of the application.  In fact, flow logic was even kept independant of other (sub) flow logic... real slick - I am going to be facing a tough decision tomorrow as Keith's session on the topic conflicts with &lt;a href="http://raibledesigns.com"&gt;Matt Raible's&lt;/a&gt; session on "TDD with Spring and Hibernate" which was one of my "must see" sessions coming into the show.&lt;br /&gt;&lt;br /&gt;Anyway, that's my story.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14058597-113401166206448626?l=jameshalberg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jameshalberg.blogspot.com/feeds/113401166206448626/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14058597&amp;postID=113401166206448626' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/113401166206448626'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/113401166206448626'/><link rel='alternate' type='text/html' href='http://jameshalberg.blogspot.com/2005/12/spring-experience-day-0.html' title='The Spring Experience - Day 0'/><author><name>jimhalberg</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_72ioET0baFA/S2pYvmHMW-I/AAAAAAAAADY/VenBXpa0kAI/S220/profile.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14058597.post-113327024611933405</id><published>2005-11-29T04:45:00.000-08:00</published><updated>2005-11-29T05:17:26.133-08:00</updated><title type='text'>Refactoring</title><content type='html'>As an increasingly big fan of refactoring and all that comes along with it, I still appreciated a point made by &lt;a href="http://weblogs.java.net/blog/johnreynolds/archive/2005/11/is_java_the_wro_1.html"&gt;John Reynolds&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;It is relatively hard to inherit Java because you have to comprehend the abstraction. It is like trying to explain a concept by using an analogy. If your listener shares your cultural background, an analogy can open the doors to greater insight. If your listener doesn't get the analogy, you may have slammed the doors to understanding shut. The wrong abstraction choices can destroy code maintainability.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;To take the quote only slightly (hopefully) out of context:  I find it an especially interesting point as I tend to work in environments where several of the Java developers are not really all that experienced with Java (converted COBOL developers, newbies, etc).  Initially, my thinking was: The answer isn't dumbing down the code/design, the answer is educating the person.  To an extent I still feel that way, but on the flip side of the coin: There has to be a point where a combination of &lt;a href="http://en.wikipedia.org/wiki/YAGNI"&gt;YAGNI&lt;/a&gt; and a plain desire to be obvious can override the point where abstraction is really benefitting your project (near and long term).&lt;br /&gt;&lt;br /&gt;I know that I've cursed and moaned about modifying some complicated piece of code only to find out later that I just didn't quite see where the original developer was going with their design: had I seen it in time, the mod would have been much easier.&lt;br /&gt;&lt;br /&gt;I've been on the other side too.  Wondering how this simple change could be taking someone two weeks and wandering over to find them re-inventing the wheel because they're missing the point.&lt;br /&gt;&lt;br /&gt;Anyway, the quote above and a few other &lt;a href="http://www.developerdotstar.com/community/node/284"&gt;posts&lt;/a&gt; &lt;a href="http://www.almaer.com/blog/archives/001102.html"&gt;that&lt;/a&gt; I've &lt;a href="http://www.developerdotstar.com/community/node/288"&gt;read&lt;/a&gt; &lt;a href="http://weblogs.java.net/blog/johnreynolds/archive/2005/11/is_java_the_wro_1.html"&gt;recently&lt;/a&gt; have me looking forward to tomorrow's &lt;a href="http://madjug.org/index.html"&gt;MADJUG&lt;/a&gt; &lt;a href="http://madjug.org/madjug/nextmeeting.jsp"&gt;meeting&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I'm not sure how much &lt;a href="http://www.robsanheim.com/"&gt;Rob&lt;/a&gt; plans on splitting his time up, but I'm hoping there will be some discussion of:&lt;br /&gt;1. How to refactor (patterns, tips, and techniques)&lt;br /&gt;2. How to refactor (how to leverage the IDE)&lt;br /&gt;3. How to refactor (how much is appropriate)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14058597-113327024611933405?l=jameshalberg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jameshalberg.blogspot.com/feeds/113327024611933405/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14058597&amp;postID=113327024611933405' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/113327024611933405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/113327024611933405'/><link rel='alternate' type='text/html' href='http://jameshalberg.blogspot.com/2005/11/refactoring.html' title='Refactoring'/><author><name>jimhalberg</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_72ioET0baFA/S2pYvmHMW-I/AAAAAAAAADY/VenBXpa0kAI/S220/profile.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14058597.post-113155083749293917</id><published>2005-11-09T07:09:00.000-08:00</published><updated>2005-11-09T07:47:06.346-08:00</updated><title type='text'>Ajax Flight Search</title><content type='html'>Flexible about your vacation destination?  &lt;a href="http://www.kayak.com/h/buzz/flights"&gt;This&lt;/a&gt; useful Google Maps extension, from &lt;a href="http://www.kayak.com"&gt;Kayak.com&lt;/a&gt;, let's you search for flights leaving your local airport by price range.  Behind the scenes is appears to be searching multiple sites for the best prices (and it credits them on the popup windows).&lt;br /&gt;&lt;br /&gt;Start typing your city and it'll pull back some recommendations (local airports) via Ajax.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://photos1.blogger.com/blogger/5679/1233/320/suggest.jpg"/&gt;&lt;br /&gt;&lt;br /&gt;Use the slider to set your price range.  As you slide, the routes in your range will appear and disapear (presumably Ajax as well).&lt;br /&gt;&lt;br /&gt;&lt;img src="http://photos1.blogger.com/blogger/5679/1233/320/slider.jpg"/&gt;&lt;br /&gt;&lt;br /&gt;And finally, click on one that you want to investigate to get a window to enter your dates.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://photos1.blogger.com/blogger/5679/1233/320/selected.jpg"/&gt;&lt;br /&gt;&lt;br /&gt;Pretty slick.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14058597-113155083749293917?l=jameshalberg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jameshalberg.blogspot.com/feeds/113155083749293917/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14058597&amp;postID=113155083749293917' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/113155083749293917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/113155083749293917'/><link rel='alternate' type='text/html' href='http://jameshalberg.blogspot.com/2005/11/ajax-flight-search.html' title='Ajax Flight Search'/><author><name>jimhalberg</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_72ioET0baFA/S2pYvmHMW-I/AAAAAAAAADY/VenBXpa0kAI/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14058597.post-113026996465058465</id><published>2005-10-25T12:50:00.000-07:00</published><updated>2005-10-25T12:52:44.660-07:00</updated><title type='text'>Wisconsin Represent</title><content type='html'>Some minor reorganization of my &lt;a href="http://www.bloglines.com/public/JimHalberg"&gt;blogrolls&lt;/a&gt; (see the right pane there) and now I have a special section for the Wisconsin guys.&lt;br /&gt;&lt;br /&gt;Notice there are precious few over there.  If you're a technical blogger here in WI let me know: I'd love to add you (or at least give you a chance).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14058597-113026996465058465?l=jameshalberg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jameshalberg.blogspot.com/feeds/113026996465058465/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14058597&amp;postID=113026996465058465' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/113026996465058465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/113026996465058465'/><link rel='alternate' type='text/html' href='http://jameshalberg.blogspot.com/2005/10/wisconsin-represent.html' title='Wisconsin Represent'/><author><name>jimhalberg</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_72ioET0baFA/S2pYvmHMW-I/AAAAAAAAADY/VenBXpa0kAI/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14058597.post-112983990521261304</id><published>2005-10-20T13:07:00.000-07:00</published><updated>2005-10-20T13:28:22.000-07:00</updated><title type='text'>Computer Programming... the board game?</title><content type='html'>That's right kids.  Just in time for Christmas!&lt;br /&gt;&lt;br /&gt;Over at &lt;a href="http://thehalblog.blogspot.com/2005/10/cool-gadgets-stuff.html"&gt;The Halblog&lt;/a&gt;, my sister-in-law is blogging about &lt;a href="http://www.c-jump.com/index.html"&gt;C-Jump&lt;/a&gt;, the hit board game of the season.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.c-jump.com/index.html"&gt;&lt;img src="http://www.c-jump.com/box002.JPG" width="400"/&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;(&lt;a href="http://www.wired.com/news/technology/0,1282,68872,00.html"&gt;article&lt;/a&gt; from a while back on &lt;a href="http://wired.com/"&gt;Wired News&lt;/a&gt;)&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14058597-112983990521261304?l=jameshalberg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jameshalberg.blogspot.com/feeds/112983990521261304/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14058597&amp;postID=112983990521261304' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/112983990521261304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/112983990521261304'/><link rel='alternate' type='text/html' href='http://jameshalberg.blogspot.com/2005/10/computer-programming-board-game.html' title='Computer Programming... the board game?'/><author><name>jimhalberg</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_72ioET0baFA/S2pYvmHMW-I/AAAAAAAAADY/VenBXpa0kAI/S220/profile.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14058597.post-112930814576202604</id><published>2005-10-14T09:35:00.000-07:00</published><updated>2005-10-14T09:42:25.766-07:00</updated><title type='text'>Adventures in Refactoring</title><content type='html'>My current 1 year - 6 developer project is winding down and I've found myself the last man standing.  As others have made the conversion to other projects, I've been left awaiting the final go ahead for deployment.  In the meantime, I've got some time to take a look back at this mountain of code and do a bit of cleanup and refactoring.&lt;br /&gt;&lt;br /&gt;As with most projects we had a variety of talent levels but felt like we did a pretty good job of monitoring the code base and refactoring as we went... I don't know if I would say that this feeling was wrong, but man there is &lt;b&gt;a ton&lt;/b&gt; of code to be cleaned up in here.&lt;br /&gt;&lt;br /&gt;Two days later I've refactored countless classes.  Straight-up deleted probably 2500-3000 lines of completely unused code.  And corrected 2 dangerous instances of blatant disregard for thread safety.&lt;br /&gt;&lt;br /&gt;Many of the things I'm encountering are straight from Kevin Cauble's 1991 &lt;i&gt;Syndromes of Forgotten Programmers&lt;/i&gt; (recently resurected over at &lt;a href="http://www.developerdotstar.com/mag/articles/cauble_forgotten_programm.html"&gt;developer.*&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;All that deleted code&lt;/b&gt; &lt;br /&gt;90% of the time this has been code that was never used.  Thousands of lines of code resulting from copy/paste without any (necessary) tailoring and trimming.  The cost of executing of the unnecessary code is quite low, but the cost of confusion is enormous.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;All that refactored code&lt;/b&gt;&lt;br /&gt;Most of this was objects stepping on each other's toes.  Logic that should be intimate to an object but instead it's in 5 places - and, of course, never quite exactly as efficient and accurate as it should be.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The threading issues&lt;/b&gt;&lt;br /&gt;Is there a line in the intro to Java book that says: &lt;i&gt;"When you're first getting started, make sure to &lt;b&gt;always&lt;/b&gt; implement the Singleton pattern."&lt;/i&gt;?  The thing about only having one instance of an object is that... you only have... one... instance... of the object.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14058597-112930814576202604?l=jameshalberg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jameshalberg.blogspot.com/feeds/112930814576202604/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14058597&amp;postID=112930814576202604' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/112930814576202604'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/112930814576202604'/><link rel='alternate' type='text/html' href='http://jameshalberg.blogspot.com/2005/10/adventures-in-refactoring.html' title='Adventures in Refactoring'/><author><name>jimhalberg</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_72ioET0baFA/S2pYvmHMW-I/AAAAAAAAADY/VenBXpa0kAI/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14058597.post-112809254566359630</id><published>2005-09-30T07:27:00.000-07:00</published><updated>2005-10-18T13:07:17.453-07:00</updated><title type='text'>Cats and Dogs, Living Together!</title><content type='html'>&lt;img src="http://www.itascapsych.com/images2/boyph.jpg" style="float:right" height="200"/&gt;&lt;br /&gt;&lt;br:clear="left"/&gt;&lt;br /&gt;Remember back in 5th grade (or sophmore year of college, in my case) when your best friend called the girl's best friend and asked if they liked you, because you like them but only if they liked you first?&lt;br /&gt;&lt;br /&gt;Eventually, you realized that this method of communication was getting you absolutely nowhere and you dropped the middle-men and just got the guts to call the girl yourself.&lt;br /&gt;&lt;br /&gt;I've been having deja vu lately involving workflow.  While I could probably have a decent blog entry on the various approaches we've tried while implementing, I'd rather talk about why we've had to take various approaches in the first place!&lt;br /&gt;&lt;br /&gt;Initial requirements gathering turned out to be invalid for a variety of reasons.  We deserve some blame on the IT side for not really cementing the process in place - we could have done a better job of forcing users to really walk through the process on paper.  Another major issue was not getting beyond the liason's and into the true end users.  &lt;br /&gt;&lt;br /&gt;The end result is something like: Bob sends to Cindy who can reject in which case it goes to Tom but an approval goes to Al unless Bob hasn't entered the id in which case...  yuck.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://phantomstheater.com/make-up/Mummy/name.jpg" align="left" alt="" border="0" style="padding-right: 1em" height="75"&gt;&lt;br /&gt;When we eventually had "what the users wanted", you could take a step back and already identify points that just didn't make sense... You mean to tell me that the CEO at HugeCo wants to have to sign in and click "ok" for every new item coming down the pipe?  We're going to get calls on Day2 telling us that we have to take that out because it's a serious kink, etc, etc.&lt;br /&gt;&lt;br /&gt;Well, you can't be surprised that this workflow evolved quite a bit as we went a long.  We'd put out something for the users - a week later someone would tell them it was there - a week later someone would tell us it "didn't work".  &lt;br /&gt;&lt;br /&gt;Did it really work?  Well, it did exactly what it was intended to do (as code often does), but... no, frankly: it was a piece of crap!&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.brothersky.net/folder1/templates/graphics/images/hourglass.jpg" style="float:right" height="150"/&gt;&lt;br /&gt;&lt;br:clear="left"/&gt;&lt;br /&gt;So, month 10 rolls around and things are getting outrageous as the deadline approaches.  Finally, not only are we working with liason's but (gasp) in the same room as the end users and actually (triple gasp) talking with them directly!  So, now everything went perfectly... THE END.  &lt;br /&gt;&lt;br /&gt;ok, maybe not.  Actually, looking back on the last week I have done what I would normally rate a poor/fair job of getting requirements ironed out.  &lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.waterfordva-wca.org/graphics/headers-extras/retro-man-man-phone.gif" align="left" height="200" alt="" border="0" style="padding-right: 1em"&gt;&lt;br /&gt;&lt;b&gt;BUT, using a technique I call "communicating with the user"&lt;/b&gt; I have been able to make my mistakes: have them corrected, implement what they think they want: have them realize it's wrong, etc all in the course of maybe 10 hours of legit work.  As opposed to the 8 months of make a mistake - wait a week for communication to occur - retry, that we've been going through up until this point.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The moral of the story:&lt;/b&gt; Having an open communication line is essential.  You can benefit greatly from having technical people talk directly to the client.  People who will eventually write the code know what typically needs to be done to actually get the code written!  Seems like common sense but it's not always that easy to communicate this need.&lt;br /&gt;&lt;br /&gt;Seem like common sense?  Of course it does, you're a technical person: now go explain it to your boss.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14058597-112809254566359630?l=jameshalberg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jameshalberg.blogspot.com/feeds/112809254566359630/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14058597&amp;postID=112809254566359630' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/112809254566359630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/112809254566359630'/><link rel='alternate' type='text/html' href='http://jameshalberg.blogspot.com/2005/09/cats-and-dogs-living-together.html' title='Cats and Dogs, Living Together!'/><author><name>jimhalberg</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_72ioET0baFA/S2pYvmHMW-I/AAAAAAAAADY/VenBXpa0kAI/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14058597.post-112681489105902891</id><published>2005-09-15T15:07:00.000-07:00</published><updated>2005-09-15T13:08:11.066-07:00</updated><title type='text'>Becoming a Greasemonkey, one banana at a time</title><content type='html'>Alright, so I've finally gotten around to my first real taste of creating &lt;a href="http://greasemonkey.mozdev.org/"&gt;Greasemonkey&lt;/a&gt; user scripts.  &lt;br /&gt;&lt;br /&gt;I was thinking about what scripts I could write that I might actually use: the best I could do was some little tweaks to the ole' fantasy football site.&lt;br /&gt;&lt;br /&gt;Here's what's been annoying me.  I look at my list of players and each has a little 'note' icon next to them - letting me know that there's some news to be read.  To get to the news I go through this:  &lt;br /&gt;&lt;ol&gt;&lt;li&gt;click the note icon&lt;/li&gt;&lt;li&gt;new window opens&lt;/li&gt;&lt;li&gt;read&lt;/li&gt;&lt;li&gt;close window&lt;/li&gt;&lt;li&gt;Repeat for each player&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;It's not many steps but it's a pretty obvious spot where the UI really could make my life easier.  So, I set out with the goal of creating a hidden div in the page - on mouseover of a note I'd show the div and simultaneously populate it with the guys news via xmlhttp.  All was going well and the script was running well against html on my PC when I decided to actually point it to the real URLs.  I hadn't noticed that the player notes and the list of players were from different domains!  Ugh!&lt;br /&gt;&lt;br /&gt;Anyway, in the interest of just getting the thing working I gave up on the xmlhttp/hidden div and switched over to opening a new window with the note.  It's not so bad since I still close that window onmouseout, but it's not ideal.&lt;br /&gt;&lt;br /&gt;Now I have:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;hover over note icon&lt;/li&gt;&lt;li&gt;read&lt;/li&gt;&lt;li&gt;mouse off to close note&lt;/li&gt;&lt;li&gt;Repeat for each player&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;My goal was to write my first script and that I did, so we'll count it as a success.  If anyone has any (somewhat) straightforward advice on getting around the single domain requirement for javascript (xmlhttp) it would be much appreciated!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14058597-112681489105902891?l=jameshalberg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jameshalberg.blogspot.com/feeds/112681489105902891/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14058597&amp;postID=112681489105902891' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/112681489105902891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/112681489105902891'/><link rel='alternate' type='text/html' href='http://jameshalberg.blogspot.com/2005/09/becoming-greasemonkey-one-banana-at.html' title='Becoming a Greasemonkey, one banana at a time'/><author><name>jimhalberg</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_72ioET0baFA/S2pYvmHMW-I/AAAAAAAAADY/VenBXpa0kAI/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14058597.post-112681384132781146</id><published>2005-09-15T12:47:00.000-07:00</published><updated>2005-09-15T12:50:41.333-07:00</updated><title type='text'>Echo2 (Ajax Based Rendering Engine) - RC3 available</title><content type='html'>Now, to synch it before or after No Fluff this weekend?&lt;br /&gt;&lt;br /&gt;I think I'm going to err on the side of caution and hold off until after the 'Effective Ajax' presentation that &lt;a href="http://robsanheim.com"&gt;Rob&lt;/a&gt; and I are giving Saturday night.  The release candidate (&lt;a href="http://forum.nextapp.com/forum/index.php?showtopic=1355"&gt;announced&lt;/a&gt; yesterday by Tod Liebeck) doesn't make earthshattering improvements, so I don't think the presentation will suffer... hey, I'm not complaining though: progress is progress!&lt;br /&gt;&lt;br /&gt;By the way, if you've missed Rob's announcement, the presentation (slides + examples) is available out on his &lt;a href="http://www.robsanheim.com/2005/09/13/effective-ajax-slides-and-examples-online/"&gt;site&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14058597-112681384132781146?l=jameshalberg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jameshalberg.blogspot.com/feeds/112681384132781146/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14058597&amp;postID=112681384132781146' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/112681384132781146'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/112681384132781146'/><link rel='alternate' type='text/html' href='http://jameshalberg.blogspot.com/2005/09/echo2-ajax-based-rendering-engine-rc3.html' title='Echo2 (Ajax Based Rendering Engine) - RC3 available'/><author><name>jimhalberg</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_72ioET0baFA/S2pYvmHMW-I/AAAAAAAAADY/VenBXpa0kAI/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14058597.post-112552588643681910</id><published>2005-08-31T15:01:00.000-07:00</published><updated>2005-08-31T15:04:46.436-07:00</updated><title type='text'>Composing Semi-Formal Technical Email</title><content type='html'>Recently, I’ve put some effort into writing more effective technical email.  Partly to be more effective in delivering the correct message, but largely to make sure the email gets read at all!  Following are the formatting tips that I find most effective.&lt;br /&gt;&lt;br /&gt;* Executive Summary - Explain high level intention of the email.  What are you talking about?  Why is it important?  NOT technical - write this as though it's only for the high-level managers.  This should be &lt; 8 lines long (and you get bonus points for every line under that!).&lt;br /&gt;&lt;br /&gt;* Bullet Point List - Issues that would guide the discussion if your email were to turn into a meeting.  This is a great place for some ballpark estimates but don't get stuck in  justifying your estimates at length.  It’s ok if you get slightly technical, but try to avoid it - write this as though the CIO is no longer reading, but some management may still be with you.  These should each be &lt; 4 lines long and you’re trying to make the list short too.  My magic number is 16 lines (not counting the white space): get much longer than that and they aren’t consistently read.&lt;br /&gt;&lt;br /&gt;* More Details Section - Expand on the bullet points.  Throw in your opinions and  recommendations.  Get technical if you need to.  Keep your paragraphs pretty well defined.  Each should be &lt; 8 lines long and if there are going to be several paragraphs, the average should definitely be &lt; 4 lines long.  Don’t feel like you &lt;b&gt;must&lt;/b&gt; talk about each bullet: some can be considered “covered” in your short list above.&lt;br /&gt;&lt;br /&gt;You are writing under the assumption that the more you ramble on, the more you start to lose people.  This goes hand-in-hand with the assumption that you are losing people in descending order of “title”.  In your meeting the next day, you’re going to find that the client VP read the first paragraph, your manager read the first paragraph and the bullet points, and the only people that made it all the way to the end were the technical-developers: perfect.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14058597-112552588643681910?l=jameshalberg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jameshalberg.blogspot.com/feeds/112552588643681910/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14058597&amp;postID=112552588643681910' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/112552588643681910'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/112552588643681910'/><link rel='alternate' type='text/html' href='http://jameshalberg.blogspot.com/2005/08/composing-semi-formal-technical-email.html' title='Composing Semi-Formal Technical Email'/><author><name>jimhalberg</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_72ioET0baFA/S2pYvmHMW-I/AAAAAAAAADY/VenBXpa0kAI/S220/profile.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14058597.post-112324841834830248</id><published>2005-08-05T06:15:00.000-07:00</published><updated>2005-08-05T06:26:58.353-07:00</updated><title type='text'>Echo2 draft documentation available</title><content type='html'>I noticed today that &lt;a href="http://www.nextapp.com/"&gt;Nextapp&lt;/a&gt; has recently added '&lt;a href="http://www.nextapp.com/products/echo2/doc/tutorial/"&gt;draft tutorial documentation&lt;/a&gt;', for Echo2, on their site.  I haven't had a chance to look through all of it yet but I'm assuming that I can still probably get quite a bit out of it after being self-taught the basics.&lt;br /&gt;&lt;br /&gt;If you're not at all familiar: Echo2 is a component based framework that generates html/js/etc via a 'Ajax Based Rendering Engine'.  The goal being that you could develop a web application (utilizing Ajax) with very little knowledge of anything http-related.  Of course, there are going to be some edge cases (i.e. creating custom components) that will likely require a very solid knowledge of these technologies, but you see the point...&lt;br /&gt;&lt;br /&gt;I was trying to think of a good example application that I could try implementing with this and came across something in &lt;a href="http://weblogs.java.net/blog/johnreynolds/"&gt;John Reynolds&lt;/a&gt; blog:  An Echo1 implementation of a pretty straight forward &lt;a href="http://weblogs.java.net/blog/johnreynolds/archive/2004/08/creating_custom.html"&gt;hangman game&lt;/a&gt;.  &lt;br /&gt;&lt;br /&gt;My plan is to build something quite similar using Echo2 components.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14058597-112324841834830248?l=jameshalberg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jameshalberg.blogspot.com/feeds/112324841834830248/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14058597&amp;postID=112324841834830248' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/112324841834830248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/112324841834830248'/><link rel='alternate' type='text/html' href='http://jameshalberg.blogspot.com/2005/08/echo2-draft-documentation-available.html' title='Echo2 draft documentation available'/><author><name>jimhalberg</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_72ioET0baFA/S2pYvmHMW-I/AAAAAAAAADY/VenBXpa0kAI/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14058597.post-112261314365755453</id><published>2005-07-28T21:38:00.000-07:00</published><updated>2005-07-28T21:59:03.663-07:00</updated><title type='text'>Fox Valley JUG</title><content type='html'>&lt;a href="http://robsanheim.com"&gt;Rob&lt;/a&gt; and I just got back from presenting at the Fox Valley JUG, in Appleton, WI (Green Bay for those not from around here).  Our topic was Ajax, providing a general overview and introduction before delving into the DWR, JSON-RPC-Java, and Echo2.  &lt;br /&gt;&lt;br /&gt;Rob also announced our very simple demonstrations being made available &lt;a href="http://robsanheim.com/Ajax/"&gt;on his site&lt;/a&gt;.  Definitely feel free to check them out but do keep in mind that these are used only to illustrate very simple (hello world type) examples, so don't expect too much in the way of spectacular!  We will be updating our presentation and these examples for another talk in September, so you may also want to check back later.&lt;br /&gt;&lt;br /&gt;... back to the Fox Valley JUG... It was a very conversational presentation which was great.  I think everyone, including the presentor(s), gets more out of it when there is a more open environment for questions and feedback.&lt;br /&gt;&lt;br /&gt;The one somewhat unfortunate effect of the light atmosphere was that it did slow down the presentation a bit.  I gave a little higher overview of JSON-RPC-Java and Echo2 than I would normally have liked but it was towards the end of the presentation anyway and I think the audience was in a "skip the details" sort of mood anyway.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14058597-112261314365755453?l=jameshalberg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jameshalberg.blogspot.com/feeds/112261314365755453/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14058597&amp;postID=112261314365755453' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/112261314365755453'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/112261314365755453'/><link rel='alternate' type='text/html' href='http://jameshalberg.blogspot.com/2005/07/fox-valley-jug.html' title='Fox Valley JUG'/><author><name>jimhalberg</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_72ioET0baFA/S2pYvmHMW-I/AAAAAAAAADY/VenBXpa0kAI/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14058597.post-112197810554445554</id><published>2005-07-21T13:26:00.000-07:00</published><updated>2005-07-21T13:35:05.550-07:00</updated><title type='text'>SQL code beautifier and SQL Formatter</title><content type='html'>Looks like while I've been wandering in the land of Hibernate I missed out on &lt;a href="http://www.sqlinform.com/"&gt;SQLinForm&lt;/a&gt; getting a new look. For those of us frequently waste deep in unformatted SQL statements this is an incredibly handy (and incredibly free) tool. I've used it for about a year now and it's saved me a lot of hassle.&lt;br /&gt;&lt;br /&gt;Sounds like he's working on a desktop version too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14058597-112197810554445554?l=jameshalberg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jameshalberg.blogspot.com/feeds/112197810554445554/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14058597&amp;postID=112197810554445554' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/112197810554445554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/112197810554445554'/><link rel='alternate' type='text/html' href='http://jameshalberg.blogspot.com/2005/07/sql-code-beautifier-and-sql-formatter.html' title='SQL code beautifier and SQL Formatter'/><author><name>jimhalberg</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_72ioET0baFA/S2pYvmHMW-I/AAAAAAAAADY/VenBXpa0kAI/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14058597.post-112192041742887113</id><published>2005-07-20T20:44:00.000-07:00</published><updated>2005-07-20T21:33:37.433-07:00</updated><title type='text'>MADJUG meeting</title><content type='html'>I went over to the &lt;a href="http://madjug.org"&gt;MADJUG&lt;/a&gt; meeting tonight to check out "The Art of Agility and the Agile Unified Process (AUP)", with &lt;a href="http://home.comcast.net/~salhir/"&gt;Sinan Si Alhir&lt;/a&gt; tonight.&lt;br /&gt;&lt;br /&gt;Si compared the 'agile revolution' to the 'object oriented revolution' in the 80s-90s.  Stating that agile principles and concepts will serve a similar purpose, overhauling the way that sofware development is approached - and I suppose for many of us, this is already taking place.&lt;br /&gt;&lt;br /&gt;I have recently received my first dose of 'real world' exposure in a serious RUP shop and it's been quite eye opening, largely due to the raw amount of documentation being generated.  I quite enjoyed hearing Si discuss that RUP done properly (still talking RUP, not AUP) does not require all of these documents and in many cases not even most of them.  Instead a more 'common sense' strategy should be applied, generating documents that either aid the creation of a working end product or provide meaningful documentation for those that will maintain the system (or required documentation for gov't bodies, etc).&lt;br /&gt;&lt;br /&gt;When you take a step back and look at it, it does appear to be 'common sense', but it's pretty simple to glaze over and just start generating documentation for documentation-sake when you're faced with a checklist.  Especially when that checklist ends with a line for your signature and (gasp) that of your superior's boss, or something to that effect. &lt;span style="font-family:arial;font-size:85%;"&gt;&lt;span style="font-size: 12px;"&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;&lt;span style="font-size: 12px;"&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;&lt;span style="font-size: 12px;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&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/14058597-112192041742887113?l=jameshalberg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jameshalberg.blogspot.com/feeds/112192041742887113/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14058597&amp;postID=112192041742887113' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/112192041742887113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/112192041742887113'/><link rel='alternate' type='text/html' href='http://jameshalberg.blogspot.com/2005/07/madjug-meeting.html' title='MADJUG meeting'/><author><name>jimhalberg</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_72ioET0baFA/S2pYvmHMW-I/AAAAAAAAADY/VenBXpa0kAI/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14058597.post-112171025210281548</id><published>2005-07-18T11:06:00.000-07:00</published><updated>2005-07-18T11:10:52.106-07:00</updated><title type='text'>iBatis</title><content type='html'>So, I've done some looking into &lt;a href="http://ibatis.apache.org/"&gt;iBatis&lt;/a&gt; after a colleague (names are hidden to protect the innocent, so let's just call him Gike Mengler) recommended I check it out. Following my first Java-ORM experience (&lt;a href="http://www.hibernate.org/"&gt;Hibernate&lt;/a&gt;), iBatis looks very appealing to me. &lt;br /&gt;&lt;br /&gt;Looking back on my first Hibernate exposure, my biggest struggle was "giving up so much control" to Hibernate. That's in quotes because I realize that this is only my perception and an experienced Hibernate developer would surely argue that they gain a lot of control from Hibernate. My experience is/was that I was coming from an environment where I felt like I had a lot of control and could make my data retrieval and persistance do what I wanted... writing SQL statements with bells and whistles to shape data before mapping that data to Java objects with a custom framework has become second nature. It is what I've experienced in the vast majority of applications I've done to this point. In &lt;b&gt;my specific Hibernate experience&lt;/b&gt;, this was not the case.&lt;br /&gt;&lt;br /&gt;Another struggle was regarding unit testing. I was not too happy with Hibernate mappings coupling together mapping files which it views as being a single unit. I can see where it's coming from: in its eyes, it's populating and persisting (etc) all of these objects at once, so it makes sense that they should also be tested together. It makes sense in my head, but creating tests that make sense with this in mind proved challenging.&lt;br /&gt;&lt;br /&gt;From what I've learned on iBatis in the last week, it makes no claims at being an ORM tool. Instead of "automatic" SQL statement creation, I have to (&lt;b&gt;get to&lt;/b&gt;) provide my own SQL statents. I also can provide the logic needed to map them in a way that (to me) seems a bit more straightforward.&lt;br /&gt;&lt;br /&gt;As it says in the first line on the iBatis homepage: &lt;i&gt;Simplicity is the biggest advantage of the iBATIS Data Mapper over object relational mapping tools.&lt;/i&gt;  I am looking forward to investigating the accuracy of this statement.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14058597-112171025210281548?l=jameshalberg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jameshalberg.blogspot.com/feeds/112171025210281548/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14058597&amp;postID=112171025210281548' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/112171025210281548'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/112171025210281548'/><link rel='alternate' type='text/html' href='http://jameshalberg.blogspot.com/2005/07/ibatis.html' title='iBatis'/><author><name>jimhalberg</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_72ioET0baFA/S2pYvmHMW-I/AAAAAAAAADY/VenBXpa0kAI/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14058597.post-112119369055743783</id><published>2005-07-12T11:37:00.000-07:00</published><updated>2005-07-12T11:41:30.563-07:00</updated><title type='text'>Echo2 - Initial Progress Report</title><content type='html'>Well, I've moved through the Echo1 stuff pretty quickly.  It served it's purpose of basically giving me a well documented look at what they're trying to achieve with both Echo products.  I would admit though that I didn't look at things in a ton of detail - which I don't think will get me in trouble.  I can always refer back.&lt;br /&gt;&lt;br /&gt;Getting the Echo2 test email app setup was pretty simple.  A couple bumps since there isn't a whole lot of documentation and they didn't include a couple of jars that probably should be there.  All of the missing things were readily available for download elsewhere so it wasn't a big deal... although it would have been nice of them to give me a readme.txt that told me what was missing, oh well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14058597-112119369055743783?l=jameshalberg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jameshalberg.blogspot.com/feeds/112119369055743783/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14058597&amp;postID=112119369055743783' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/112119369055743783'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/112119369055743783'/><link rel='alternate' type='text/html' href='http://jameshalberg.blogspot.com/2005/07/echo2-initial-progress-report.html' title='Echo2 - Initial Progress Report'/><author><name>jimhalberg</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_72ioET0baFA/S2pYvmHMW-I/AAAAAAAAADY/VenBXpa0kAI/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14058597.post-112104307690834807</id><published>2005-07-10T17:34:00.000-07:00</published><updated>2005-07-10T17:51:16.913-07:00</updated><title type='text'>Echo2</title><content type='html'>I/&lt;a href="http://robsanheim.com/"&gt;we&lt;/a&gt; are considering replacing the JSON-RPC-Java portion of our Ajax presentation with &lt;a href="http://www.nextapp.com/products/echo2/"&gt;Echo2&lt;/a&gt;. To sum up what Echo2 is attempting: it is a component based web framework that would allow developers to create web applications (utilizing Ajax) with relatively little knowledge of html and javascript.&lt;br /&gt;&lt;br /&gt;The original &lt;a href="http://www.nextapp.com/products/echo/"&gt;Echo&lt;/a&gt; attempted a very similar goal but leveraged iFrames to accomplish it. The new version leverages the XmlHttpRequest object; yet another example of the power of this approach.&lt;br /&gt;&lt;br /&gt;Probably the most intriguing part of this would be that the final solution will contain &lt;span style="font-weight:bold;"&gt;lots&lt;/span&gt; of javascript and html.  It will be interesting to see how this all works out.  I am expecting to find that anything more than a very basic implementation will require javascript and html knowledge, as you expand on what they are providing, but we'll see.&lt;br /&gt;&lt;br /&gt;Anyway, I am in the very early stages of looking at it but am hoping to make some progress pretty quickly.  I'd like to have a couple of slides ready for the Fox Valley JUG presentation coming up in a couple of weeks, and expand that out to 20-30 minutes for the &lt;a href="http://www.nofluffjuststuff.com/"&gt;NFJS&lt;/a&gt; conference.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14058597-112104307690834807?l=jameshalberg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jameshalberg.blogspot.com/feeds/112104307690834807/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14058597&amp;postID=112104307690834807' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/112104307690834807'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/112104307690834807'/><link rel='alternate' type='text/html' href='http://jameshalberg.blogspot.com/2005/07/echo2.html' title='Echo2'/><author><name>jimhalberg</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_72ioET0baFA/S2pYvmHMW-I/AAAAAAAAADY/VenBXpa0kAI/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14058597.post-112070951795413159</id><published>2005-07-06T21:10:00.000-07:00</published><updated>2005-07-06T21:11:57.956-07:00</updated><title type='text'>Domain registered</title><content type='html'>This blog can/should now be accessed by http://jameshalberg.com&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14058597-112070951795413159?l=jameshalberg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jameshalberg.blogspot.com/feeds/112070951795413159/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14058597&amp;postID=112070951795413159' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/112070951795413159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/112070951795413159'/><link rel='alternate' type='text/html' href='http://jameshalberg.blogspot.com/2005/07/domain-registered.html' title='Domain registered'/><author><name>jimhalberg</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_72ioET0baFA/S2pYvmHMW-I/AAAAAAAAADY/VenBXpa0kAI/S220/profile.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14058597.post-112007020956162193</id><published>2005-06-29T11:24:00.000-07:00</published><updated>2005-06-29T12:27:50.740-07:00</updated><title type='text'>Upcoming Presentations</title><content type='html'>Some good news on the presentation front.  &lt;a href="http://robsanheim.com"&gt;Rob Sanheim&lt;/a&gt; and I confirmed today that we will be presenting at a &lt;a href="http://www.nofluffjuststuff.com/"&gt;No Fluff Just Stuff&lt;/a&gt; tour stop in Chicago.  We both attended that conference at it's Milwaukee stop earlier this year and were very impressed with the content and presentor's there, so it will be very good to join up for a bit.  We'll be starting work immediately on defining what changes we need to make for a presentation to a group like this.  Likely we'll be able to assume that the audience has quite a bit more background knowledge than at a Java User Group (JUG) meeting, so we'll be able to get into a lot more detail.&lt;br /&gt;&lt;br /&gt;We also have a presentation coming up at the Fox Valley JUG, July 28.  There we plan on delivering a presentation similar to the one we delivered in Madison (&lt;a href="http://madjug.org"&gt;MADJUG&lt;/a&gt;) and Milwaukee (&lt;a href="http://wjug.org"&gt;WJUG&lt;/a&gt;) earlier this year.  It will provide an overview of &lt;a href="http://www.adaptivepath.com/publications/essays/archives/000385.php"&gt;Ajax&lt;/a&gt; and a little detail.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14058597-112007020956162193?l=jameshalberg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jameshalberg.blogspot.com/feeds/112007020956162193/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14058597&amp;postID=112007020956162193' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/112007020956162193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/112007020956162193'/><link rel='alternate' type='text/html' href='http://jameshalberg.blogspot.com/2005/06/upcoming-presentations.html' title='Upcoming Presentations'/><author><name>jimhalberg</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_72ioET0baFA/S2pYvmHMW-I/AAAAAAAAADY/VenBXpa0kAI/S220/profile.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14058597.post-112006947836633876</id><published>2005-06-29T11:05:00.000-07:00</published><updated>2005-06-29T12:28:05.770-07:00</updated><title type='text'>Best Places to work in IT</title><content type='html'>According to the annual &lt;a href="http://www.computerworld.com/careertopics/careers/story/0,10801,102737,00.html"&gt;ComputerWorld report&lt;/a&gt;, American Family Insurance (my current client) ranks #30 in the country for places to work in IT (#7 in the Midwest). Not bad, not bad at all. &lt;br /&gt;&lt;br /&gt;Reading over what goes into the &lt;a href="http://www.computerworld.com/careertopics/careers/story/0,10801,102310,00.html"&gt;ranking process&lt;/a&gt; it seems like American Family is reading from the same script as ComputerWorld regarding 'what makes for a good IT environment'. Not to say that they are actually tailoring their business to this one survey... just saying that their HR guys and the AmFam HR guys probably see each other at a lot of the same conferences. &lt;br /&gt;&lt;br /&gt;One thing I am curious about in these criteria is how having females and minorities figure into being one of the "best places to work"? Can I assume that this is because if I were a female or minority, I would feel better about my chance to succeed in a place where others in my profile have been able to succeed? Or is there something else that I am missing here? Being someone that considers himself far from racist/sexist, I would say that it is definitely good to have these people in prominent positions but I don't know that having a female boss would make me like working here more (or less).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14058597-112006947836633876?l=jameshalberg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jameshalberg.blogspot.com/feeds/112006947836633876/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14058597&amp;postID=112006947836633876' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/112006947836633876'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14058597/posts/default/112006947836633876'/><link rel='alternate' type='text/html' href='http://jameshalberg.blogspot.com/2005/06/best-places-to-work-in-it.html' title='Best Places to work in IT'/><author><name>jimhalberg</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_72ioET0baFA/S2pYvmHMW-I/AAAAAAAAADY/VenBXpa0kAI/S220/profile.jpg'/></author><thr:total>3</thr:total></entry></feed>
