<?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-9842007</id><updated>2012-02-16T04:57:37.376-05:00</updated><category term='hibernate'/><category term='gwt'/><category term='tocollege.net'/><category term='git'/><title type='text'>jeff's blog</title><subtitle type='html'>vox clamantis in interneto</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default?start-index=101&amp;max-results=100'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>207</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9842007.post-3389448856372436880</id><published>2011-04-06T13:52:00.001-05:00</published><updated>2011-04-06T13:53:35.805-05:00</updated><title type='text'>WillPaginate in Half the Time</title><content type='html'>Finally got around to writing up a cool PostgreSQL trick on the PatientsLikeMe tech blog. &lt;a href="http://tech.patientslikeme.com/2011/04/06/will_paginate_in_half_the_time/"&gt;WillPaginate in Half the Time&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-3389448856372436880?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/3389448856372436880/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=3389448856372436880' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/3389448856372436880'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/3389448856372436880'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2011/04/willpaginate-in-half-time.html' title='WillPaginate in Half the Time'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-2073739306340953264</id><published>2010-11-22T13:00:00.005-05:00</published><updated>2010-11-22T15:01:41.155-05:00</updated><title type='text'>Reader 9.4.1! a Adobe Reader Version History</title><content type='html'>I'm very happy to welcome Adobe Acrobat Reader version 9.4.1 to the world. I'm so excited about this new version. In fact, I'm so excited that I thought I'd take this as a chance to look back at some of the previous versions of Reader that we all know and love.&lt;br /&gt;&lt;br /&gt;Version       : Features&lt;br /&gt;Reader 1.0 : Opens PDFs!! Also Crashes&lt;br /&gt;Reader 1.1 : Still opens PDFs. More Crashes&lt;br /&gt;Reader 1.2 : Still opens PDFs. Fewer Crashes&lt;br /&gt;Reader 1.3 : Still opens PDFs. More Crashes&lt;br /&gt;Reader 2.0 : Still opens PDFs. Fewer Crashes&lt;br /&gt;Reader 2.1 : Still opens PDFs. More Crashes&lt;br /&gt;Reader 2.2 : Still opens PDFs. More Crashes&lt;br /&gt;Reader 3.0 : Still opens PDFs. Fewer Crashes&lt;br /&gt;Reader 3.1 : Still opens PDFs. Fewer Crashes&lt;br /&gt;Reader 3.2 : Still opens PDFs. Fewer Crashes&lt;br /&gt;Reader 3.3 : Still opens PDFs. Fewer Crashes&lt;br /&gt;Reader 4.0 : Still opens PDFs. More Crashes. New Logo!&lt;br /&gt;Reader 4.1 : Still opens PDFs. More Crashes&lt;br /&gt;Reader 4.2 : Still opens PDFs. Fewer Crashes&lt;br /&gt;Reader 4.3 : Still opens PDFs. More Crashes&lt;br /&gt;Reader 5.0 : Still opens PDFs. More Crashes&lt;br /&gt;Reader 5.1 : Still opens PDFs. Fewer Crashes&lt;br /&gt;Reader 5.2 : Still opens PDFs. More Crashes&lt;br /&gt;Reader 6.0 : Still opens PDFs. Fewer Crashes&lt;br /&gt;Reader 6.1 : Still opens PDFs. More Crashes&lt;br /&gt;Reader 6.2 : Still opens PDFs. More Crashes&lt;br /&gt;Reader 6.3 : Still opens PDFs. Fewer Crashes&lt;br /&gt;Reader 7.0 : Still opens PDFs. Fewer Crashes. New logo!&lt;br /&gt;Reader 7.1 : Still opens PDFs. More Crashes&lt;br /&gt;Reader 7.2 : Still opens PDFs. Fewer Crashes&lt;br /&gt;Reader 8.0 : Still opens PDFs. More Crashes&lt;br /&gt;Reader 8.1 : Still opens PDFs. Fewer Crashes&lt;br /&gt;Reader 8.2 : Still opens PDFs. Fewer Crashes&lt;br /&gt;Reader 8.3 : Still opens PDFs. Fewer Crashes&lt;br /&gt;Reader 9.0 : Still opens PDFs. Fewer Crashes&lt;br /&gt;Reader 9.1 : Still opens PDFs. Fewer Crashes&lt;br /&gt;Reader 9.2 : Still opens PDFs. Fewer Crashes&lt;br /&gt;Reader 9.3 : Still opens PDFs. More Crashes&lt;br /&gt;Reader 9.4 : ???? A brave new world!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-2073739306340953264?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/2073739306340953264/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=2073739306340953264' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/2073739306340953264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/2073739306340953264'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2010/11/reader-941-adobe-reader-version-history.html' title='Reader 9.4.1! a Adobe Reader Version History'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-5515189382485114704</id><published>2010-10-27T10:04:00.001-05:00</published><updated>2010-10-27T10:06:20.651-05:00</updated><title type='text'>Dealing with Git Merge Revisions</title><content type='html'>Forgot to astroturf my post on the PLM tech blog. Everything you wanted to know about &lt;a href="http://tech.patientslikeme.com/2010/09/29/dealing-with-git-merge-revisions/"&gt;Dealing with Git Merge Revisions&lt;/a&gt; but were afraid to ask.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-5515189382485114704?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/5515189382485114704/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=5515189382485114704' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/5515189382485114704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/5515189382485114704'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2010/10/dealing-with-git-merge-revisions.html' title='Dealing with Git Merge Revisions'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-5767510636249001816</id><published>2009-12-08T10:40:00.005-05:00</published><updated>2009-12-08T11:13:24.662-05:00</updated><title type='text'>Decrypting Ruby AES Encryption</title><content type='html'>Want to encrypt something in Ruby and decrypt it in another language like AS3 using As3Crypto? Sure you can encrypt 'test string' and 'foo, without any problems. But say you want to encode something long.. like 16 character long. After much suffering, the following worked for me.&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/251749.js"&gt;&lt;/script&gt; &lt;br /&gt;&lt;br /&gt;The main gotcha is that Base64.encode64 has a nasty habit of sprinkling newline characters to your strings. I can't imagine why it does this, particularly when there's a method b64encode(bin, len = 60) that is meant to do this, but I can tell you that AES sure doesn't like you adding random characters to ciphertexts.&lt;br /&gt;&lt;br /&gt;Of course rails already thought of this and a method:&lt;br /&gt;&lt;a href="http://api.rubyonrails.org/classes/ActiveSupport/CoreExtensions/Base64/Encoding.html"&gt;encode64s&lt;/a&gt; exists. So you could use encode64s instead of encode64, although I would argue that they should have called it something a bit more explicit eg Base64.encode64InAWayThatIsActuallyDecodesToTheSameStringYouStartedWith(string). Just a thought.&lt;br /&gt;&lt;br /&gt;Anyway this &lt;a href="http://crypto.hurlant.com/demo/"&gt;As3Crypto Demo&lt;/a&gt; is a sweet way to test out the decrypt-ability of your encryption complete with all manners of paddings, encryption modes and schemes. Highly recommended.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-5767510636249001816?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/5767510636249001816/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=5767510636249001816' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/5767510636249001816'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/5767510636249001816'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2009/12/decrypting-ruby-aes-encryption.html' title='Decrypting Ruby AES Encryption'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-3807913073378030507</id><published>2009-11-17T11:39:00.002-05:00</published><updated>2009-11-17T11:47:40.162-05:00</updated><title type='text'>Smoke</title><content type='html'>I SIT in a chair and wait for my IDE to respond. &lt;br /&gt;&lt;br /&gt;Millions of lines of code are run unnecessarily, indices are created and forgotten, gigabytes of ram are expended, the developers of RubyMine, Netbeans, Aptana chase the windmills of autocompletion, smoke pours across the fields of circuits and the spectre of kill -9 looms.&lt;br /&gt;&lt;br /&gt;I sit in a chair and wait for my IDE to respond.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(with infinite apologies to Carl Sandburg who wrote the thundering &lt;a href="http://www.bartleby.com/134/101.html"&gt;poem&lt;/a&gt; mimicked here)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-3807913073378030507?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/3807913073378030507/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=3807913073378030507' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/3807913073378030507'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/3807913073378030507'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2009/11/smoke.html' title='Smoke'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-8577738078281506403</id><published>2009-06-24T18:14:00.004-05:00</published><updated>2009-06-24T18:36:03.649-05:00</updated><title type='text'>Security Theater</title><content type='html'>&lt;div&gt;In &lt;a href="http://jdwyah.blogspot.com/2009/06/fooled-by-testing.html"&gt;Fooled By Testing&lt;/a&gt; I looked at some general concerns I've had about testing and what we can expect from it. In this part I'd like expose myself to the Internet at large and let you in on:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;With no further ado, here are the past ~5 bugs I've let slip into production:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;b&gt;Production Bug #1&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;One of the joys of 'crowd-sourcing' some aspects of our application is that we regularly need to merge the symptoms that our user's report due to mispellings. When we do this, we automatically email the affected users so they know what's up. Normally this is merging 'tramors' into 'tremors' with 2 people reporting 'tramors' and 1500 reporting 'tremors'. It recently came up that we had 'headache' and 'headaches' as separate symptoms and each were reported by thousands of users. The task fell to engineering that we wanted to be able to do this merge without sending thousands of emails to users. I spent a good while writing pretty good tests that email didn't get sent and upgrading the merge tests in general and I felt pretty confident in my code. We got to QA and we realized that doing a merge like this was going to take 10+ minutes so we decided to move on and check it later. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Bottom line:&lt;/b&gt; Not once did we check to see if the site worked after we merged headache into headaches, the very functionality we were attempting to achieve.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Good News:&lt;/b&gt; The code I wrote worked. The merge happened successfully and no email was sent.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Bad News: &lt;/b&gt;The second the merge completed, all hell broke loose. You see, headaches is a primary symptom in our mood community and, long story and a bit of meta-programming magic later it turns out that primary symptoms get methods like 'has_headache?' created for them. The merge blew this symptom away thence there was no method and by this declension we proceed into the madness whereupon Hoptoad lit up like a christmas tree.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now you are perfectly justified in claiming that &lt;i&gt;only an idiot&lt;/i&gt; would let this happen, but I declare that &lt;i&gt;I am often an idiot&lt;/i&gt;. Furthermore I do solemnly swear that I would have picked up on this without TDD. The great joy and efficiency of TDD, that I can exercise code through tests, is a A+ way to avoid rigorously seeing if the site actually works. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;b&gt;Production Bug #2&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;Added a css file that broke some style things in a different part of the site.&lt;/div&gt;&lt;div&gt;I grant you, this isn't an example of the evils of testing, but I will say that from a user perspective CSS-fail can look an awful lot like site fail. writing a test case to prevent this would be a monster task with poor ROI. If you a page to render in IE, you'd best load the page in IE.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" ;font-size:large;"&gt;&lt;b&gt;Production Bug #3&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;Nobody merged the old production branch, so we regressed (tests existed... but they we're part of what didn't get merged).&lt;/div&gt;&lt;div&gt;Again, not testings fault, but what we're looking at here is 'Things that break production' and whether tests helped and in this case they did not. Sometime there is no substitute for manual labor.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" ;font-size:large;"&gt;&lt;b&gt;Production Bug #4&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;Cannot Update Frozen Hash. This was some squirly ActiveRecord nuissance. The kind of thing that cropped up in Hibernate every 3 seconds bit which ActiveRecord generally seems robust to. It's in the middle of a gross controller that no one is proud of. A coworker couldn't reproduce this bug using the site, but 'fixed' this bug by writing a functional test that produced the same exception. He then fixed that, but the bug was still there. Eventually we found a way to exercise it using the app and then exorcised it, but I would argue that we got a false sense of 'fixedness' from this test.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" ;font-size:large;"&gt;&lt;b&gt;Production Bug #5&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;Performance Disaster when searching for multiple treatments.&lt;/div&gt;&lt;div&gt;I know I know, nobody ever said unit testing was performance testing and technically this got stopped just short of production, but it got darn close and it was another episode of me writing my tests and thinking all was well and not testing the app as thoroughly as I should.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" ;font-size:large;"&gt;&lt;b&gt;Production Bug #6&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;Tested: &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;User.for_disease(disease)&lt;/span&gt;, but actual form submits looked like &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;User.for_disease([disease])&lt;/span&gt;.  Turns out that array was bad news and could have had a major affect in production though thankfully no one actually used the feature involved. &lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Bottom line: &lt;/b&gt;It is astoundingly easy to write tests that seem to exercise the full functionality of the code, but for which subtle differences in initial conditions have catastrophic effects. (See &lt;a href="http://www.amazon.com/gp/product/0374200114?ie=UTF8&amp;amp;tag=jesbl-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0374200114"&gt;Atmospheric Disturbances&lt;/a&gt; for more info on the profound psychological effects of perturbations in initial conditions :)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:x-large;"&gt;So is testing dangerous?&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Well no, obviously not, but also yes a little. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Let's take a little break from development work and ask a similar question: &lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;blockquote&gt;"Were the past 20 years of sharpe's ratio's and Case/Schiller financial analytics dangerous?"&lt;/blockquote&gt;&lt;/i&gt; Of course not. Before these tools existed, financial holdings were opaque and this was indeed dangerous. Once again however, as we've all learned, it &lt;i&gt;was&lt;/i&gt; dangerous. Banks blew up in the 60's and 70's but knowledge of imperfect information breeds caution. Knowing 50% more but have 90% more confidence is dangerous in the extreme. A 99% chance the site works means 3.6 days/year of the site not working.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Obviously most of our rails apps are not 'too big to fail' (besides Twitter) but as confidence rises and paranoia decreases the chance of a killer bug grows sharply. If our profession is to avoid a &lt;a href="http://www.techcrunch.com/2009/04/26/the-sorry-state-of-online-privacy/"&gt;backlash&lt;/a&gt; at the reliability of online applications, we can not simply throw all our eggs in the automated testing basket.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Let's say it 3 times together:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Unit-Testing doesn't find bugs&lt;/div&gt;&lt;div&gt;Unit-Testing doesn't find bugs&lt;/div&gt;&lt;div&gt;Unit-Testing doesn't find bugs&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Bottom Line:&lt;/b&gt; Saying 'we can trust this, it's been unit tested' is a lot like saying 'what could go wrong? That debt is insured by AIG'&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-8577738078281506403?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/8577738078281506403/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=8577738078281506403' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/8577738078281506403'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/8577738078281506403'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2009/06/security-theater.html' title='Security Theater'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-2110462958193682877</id><published>2009-06-23T15:34:00.011-05:00</published><updated>2009-06-24T18:59:01.334-05:00</updated><title type='text'>Fooled By Testing</title><content type='html'>&lt;div&gt;This post comes as the byproduct of taking a break from testing rails apps and reading Nicholas Nassim Taleb's &lt;a href="http://www.amazon.com/gp/product/1400063515?ie=UTF8&amp;amp;tag=jesbl-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=1400063515"&gt;The Black Swan&lt;/a&gt; (also author of the less preachy &lt;a href="http://www.amazon.com/gp/product/1400067936?ie=UTF8&amp;amp;tag=jesbl-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=1400067936"&gt;Fooled By Randomness&lt;/a&gt;, hence the title) while laying on the beach for my honeymoon. As such it should be noted that any lack of coherence can be directly attributed to the balmy Caribbean backdrop under which this was conceived.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the software development community and particularly in the Rails world, unit testing is the dominant paradigm of professionalism. I don't think it's much of a stretch to say that most rails coders would agree that if you're not testing, you're doing it wrong and perhaps that it's possible classify coders as either 'software engineers' or 'programmers' and that this would basically be the split between 'unit testers' and 'non-testing, script-kiddie hacks'. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;These posts are my attempt to think a bit about whether testing should really be sufficient to bestow the coveted status of 'engineering' on our profession and about dangers of relying on tests.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:x-large;"&gt;Don't be a turkey&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:x-large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;The best graph in &lt;a href="http://www.amazon.com/gp/product/1400063515?ie=UTF8&amp;amp;tag=jesbl-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=1400063515"&gt;The Black Swan&lt;/a&gt; is (similar to) the following: &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;img src="http://chart.apis.google.com/chart?cht=lc&amp;amp;chs=200x125&amp;amp;chd=t:40,41,44,43,45,48,50,50,51,52,53,55,58,60,61,62,63,66,68,70,71,74,73,72,74,74" /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;What can we tell about this graph, absent any other dimensional information? Well, it might seem like we can tell quite a lot. We have a generally increasing metric and it would seem we could be fairly confident that an extrapolation from this data would be a valid conclusion. Of course this actual graph looks like this:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;img src="http://chart.apis.google.com/chart?cht=lc&amp;amp;chs=200x125&amp;amp;chd=t:40,41,44,43,45,48,50,50,51,52,53,55,58,60,61,62,63,66,68,70,71,74,73,72,74,74,0" /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;and it turns out that it's a graph of &lt;i&gt;Food Eaten&lt;/i&gt; over &lt;i&gt;Time&lt;/i&gt; for turkeys. I'll leave it as an exercise for the reader to determine where Thanksgiving lies on the timeline.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In development terms, this reminds me very much of the first application I wrote using Freemarker as a templating language. The following worked brilliantly... until it didn't.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&amp;lt;#list products as product&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;  &amp;lt;a href="products/${product.id}"&amp;gt;${product.name}&amp;lt;/a&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&amp;lt;/#list&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Can you spot the bug? Does it help if I mention that it worked for the first 999 products? Sadly, product 1000 rendered as '1,000' which is not a integer, breaking the link. (the solution &lt;a href="http://jdwyah.blogspot.com/2006/05/travels-travails-freemarker.html"&gt;Travels-travails-freemarker&lt;/a&gt;)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:x-large;"&gt;Past performance not indicative of future results. &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:x-large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;To quote NTT:&lt;br /&gt;&lt;blockquote&gt;"our emotional apparatus is designed for linear causality".&lt;/blockquote&gt;&lt;br /&gt;He describes this sort of problem as a 'black swan'. An unpredictable event that has dramatic, game-changing effect. The central thesis of the Black Swan is that these events are, in some respects, the only things that matter. Worse, they happen &lt;i&gt;much&lt;/i&gt; more often than your brain was built to expect. I think this jives with any seasoned developer's sense of the amazing ability of code to break under duress (numbers greater than 1000, demo-ing for the boss, butterfly wings, etc).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:x-large;"&gt;So what does this have to do with testing?&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Testing is billed as a way to get early, continual positive feedback. NTT would say that we're attempting to 'platonicize' software: to wrest order and predictability from chaos. I think it does do a great job of that, or at least, I think it does a great job of making us &lt;i&gt;feel&lt;/i&gt; like we've created order from chaos. &lt;a href="http://smartic.us/2008/8/15/tatft-i-feel-a-revolution-coming-on/"&gt;TATFT&lt;/a&gt; == 'dopamine release'. It makes us feel good. Better yet, since our ancestral environment was made of of small, localized, linear events and it is thus hedonistically better to spread positive effects over time we've developed continuous integration and this compounds the hedonistic effect.&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new', fantasy;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;def gather(berry) &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;   return :good_taste&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;end&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new', fantasy;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Wash, rinse, repeat. After a long day of successful unit testing I feel like I'm the king of the world.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But let's face it: software couldn't be less linear if we tried, (and we're trying: ie concurrency). The &lt;i&gt;big problem&lt;/i&gt; category: cascading fails, server flapping, the slashdot effect are all highly non-linear problems and the &lt;i&gt;small problem&lt;/i&gt; category: unexpected input, unexpected side-effects is populated principally by unknown unknowns.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:x-large;"&gt;To write good software we need to stay vigilant.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Gaining confidence from testing is akin to like throwing a shawl on in a hurricane. I went to a talk from ThoughtBot a couple weeks ago about TDD and they showed an (admittedly awesome) slide of a cat walking calmly past a line of massive german shepards. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;img src="http://www.yowazzup.com/blog/images/cute-animals-02_20070430.jpg" /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Look back at the turkey graph. That turkey felt probably felt pretty confident about getting fed right before he got led off behind the woodshed. That cat is not the kind of code I want to release. That cat trusts that her tests &amp;gt; uncertainty. I want my cat to be a paranoid, ex-CIA, wacko, wearing a bullet proof vest, tin foil hat and packing an uzi. Confidence is the enemy.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, "just write awesome tests" you say? Let me pick a couple bones:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:x-large;"&gt;Testing is complex:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Test This:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;def suggest_event?&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;  user.can_report_events? &amp;amp;&amp;amp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; (effects &gt; 0 || side_effects.any?{ |s| s.severity &gt;= 2})&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;end&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We can generalize this to the form: A &amp;amp;&amp;amp; (B || C) and this humble one liner seems like it should be a great candidate for a test, easy setup.&lt;/div&gt;&lt;div&gt;In reality it has 8 separate execution paths, essentially forcing us to test at least a 2^3 truth table, and even that won't really capture the numerical comparators eg checking the &gt;=. &lt;/div&gt;&lt;div&gt;(If you're thinking that you don't need to individually test ¬A, B, C and ¬A, ¬B, C, because ¬A should short-circuit the AND, then I would say you're not really thinking of this as a black box)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now imagine how you might do set this up with shoulda or context? I shudder to think of it. Some custom truth table asserter would probably work, and maybe you do decide to spend a half hour writing your test frameworks. Good job, but at the end of the day all you're really doing is exercising the ruby interpreter's logical expressions evaluator. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So testing all possible code paths starts to get impossible for complex applications. So what do we do in response? I believe that all too often, the solution is to: test trivial applications! Yes, we mock out the expected interactions, stub the thing to death and are rewarded by the sweet success of our favorite color 'Test Pass Green'. The tests run fast and true, but there's just one little problem: the site doesn't work. I call as expert witness Yehuda Katz, who just had a nice post about this sort of problem on the Rail codebase. &lt;a href="http://yehudakatz.com/2009/06/20/on-rails-testing/"&gt;http://yehudakatz.com/2009/06/20/on-rails-testing&lt;/a&gt;/ Yehuda?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;My general rule is “Don’t mock anything you own” and more strictly “Don’t mock anything happening inside your own process”.&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Thanks, Yehuda. Just what I was trying to say and (unlike me) people presume you know what you're talking about.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So what &lt;i&gt;is &lt;/i&gt;the point here? The point of this exercise is primarily to remind me that testing is not a panacea and that overconfidence is to be avoided. As I read &amp;amp; write more 'well-tested' code I'm becoming suspicious that it is more common for pernicious edge cases to slip towards production because as developers we're thinking too much inside the testing box. That is my thesis. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So what's next? Part 2 "&lt;a href="http://jdwyah.blogspot.com/2009/06/security-theater.html"&gt;Security Theatre&lt;/a&gt;", where we look at a few case studies including a list of the past 5 bugs I've let slip into production.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;FWIW, I'm aware that Unit Testing and TDD were never truly billed as an answer to all these woes. I'm also aware that I'm not the first to think about this stuff:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="  line-height: 18px; font-family:georgia, Arial, sans-serif;font-size:medium;"&gt;&lt;a href="http://blog.mattwynne.net/2009/01/17/acceptance-tests-trump-unit-tests/"&gt;Acceptance Tests Trump Unit Tests&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://blog.jayfields.com/2009/02/thoughts-on-developer-testing.html"&gt;Thoughts on Developer Testing&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://jasonrudolph.com/blog/testing-anti-patterns-how-to-fail-with-100-test-coverage/"&gt;How to fail with 100% test coverage&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-2110462958193682877?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/2110462958193682877/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=2110462958193682877' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/2110462958193682877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/2110462958193682877'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2009/06/fooled-by-testing.html' title='Fooled By Testing'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-3052993232199888957</id><published>2009-04-13T12:48:00.002-05:00</published><updated>2009-04-13T12:52:15.313-05:00</updated><title type='text'>#AmazonFail</title><content type='html'>Always enjoy doing my e-civic duty with a little Google-Bombing. Interested in &lt;a href="http://www.smartbitchestrashybooks.com/index.php/weblog/comments/amazon-rank/"&gt;Amazon Rank&lt;/a&gt;? &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Or keep up to date on Amazon forgetting what age they live in with &lt;a href="http://search.twitter.com/search?q=amazonfail"&gt;twitter&lt;/a&gt;. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-3052993232199888957?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/3052993232199888957/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=3052993232199888957' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/3052993232199888957'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/3052993232199888957'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2009/04/amazonfail.html' title='#AmazonFail'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-216253286947650898</id><published>2009-04-08T15:05:00.003-05:00</published><updated>2009-04-09T07:39:02.934-05:00</updated><title type='text'>git panic</title><content type='html'>Not sure about that rebase, merge or pull? Worried that &lt;a href="http://jdwyah.blogspot.com/2009/03/git-rebase-interactive-maverick-style.html"&gt;listening to Kenny Loggins&lt;/a&gt; while you work might hose the repo? Don't let &lt;a href="http://thejeremy.weiskotten.com/post/87247074/git-i-dont-know-what-just-happened"&gt;this&lt;/a&gt; happen to you.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Introducing &lt;b&gt;&lt;i&gt;Git Panic&lt;/i&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;, your 1-step disaster prevention toolkit. If you wouldn't walk around a hallway in Doom without auto-saving, why would you use version control without the same measure of paranoid caution? Remember, git is one of the most dangerous tools on your system. While it is powerful, using git means that with one simple command you could easily trash the remote repository and simultaneously downgrade from OS X to Windows 98.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;git config --global alias.panic '!tar cvf ../git_panic.tar *'&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Now whenever you get nervous, just push the 'git panic' button and breath deeply, you can always restore from a tarball. Good ole tar.&lt;br /&gt;&lt;br /&gt;Extra points if you hook it up to a red button on your keyboard.&lt;br /&gt;&lt;br /&gt;-mav&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-216253286947650898?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/216253286947650898/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=216253286947650898' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/216253286947650898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/216253286947650898'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2009/04/git-panic.html' title='git panic'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-8752514410453709073</id><published>2009-03-20T09:36:00.002-05:00</published><updated>2009-03-20T09:39:29.744-05:00</updated><title type='text'>git rebase interactive: maverick style</title><content type='html'>Re-writing history? You know you feel like a bad-ass. Why rock git in silence?&lt;br /&gt;&lt;br /&gt;function git-mav {&lt;br /&gt;  afplay -s 0 12 ~/Music/iTunes/iTunes\ Music/Kenny\ Loggins/Top\ Gun/Danger\ Zone.mp3 &amp;amp;&lt;br /&gt;  git rebase -i $1&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Usage:&lt;br /&gt;git-mav HEAD~10&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-8752514410453709073?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/8752514410453709073/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=8752514410453709073' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/8752514410453709073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/8752514410453709073'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2009/03/git-rebase-interactive-maverick-style.html' title='git rebase interactive: maverick style'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-4726018092026671276</id><published>2009-01-21T14:05:00.004-05:00</published><updated>2010-03-30T10:27:34.503-05:00</updated><title type='text'>vi in five minutes</title><content type='html'>For a long time I was pretty merciless with vi users. Me and my IDE posse would hide the icons on their desktop, pants them in front of girls, etc. Mostly though, everything was fine. I used my tools and they used theirs. But as we all know vi stands for virus (well, it's a shortcut for virus) and the vi plot is to take over all the editors on your system. That's why even if you're a loyal IDE-bound code monkey, honking away and generating thousands of lines of configuration XML, home interfaces and remote interfaces, vi still manages to sneak up on you when you do something silly like svn commit and leave off the -m to add your own message.&lt;br /&gt;&lt;br /&gt;At this point I would scream out over the cubicle wall &lt;span style="font-style: italic;"&gt;'how in the @*#(! hell do I close vi!!'&lt;/span&gt; And they would tell me :q! and I would stop listening after the first colon and just close the offending terminal.&lt;br /&gt;&lt;br /&gt;But sometimes we'd get into the issue in a little more depth.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;I'd say &lt;span style="font-style: italic;"&gt;'vi sucks.'&lt;/span&gt;&lt;/li&gt;&lt;li&gt;And they'd say: &lt;span style="font-style: italic;"&gt;"you just don't know how to use it."&lt;/span&gt;&lt;/li&gt;&lt;li&gt;And I'd say: &lt;span style="font-style: italic;"&gt;"any bleeding editor where the arrow keys only work if your config file asks nicely and I need to switch modes just to type is an abomination."&lt;/span&gt;&lt;/li&gt;&lt;li&gt;And they say something like &lt;span style="font-style: italic;"&gt;"If I want to start all the paragraphs in the document with '========' I just type 'a9 i8= . wtfbbq'."&lt;/span&gt;&lt;/li&gt;&lt;li&gt;And I just stand there and have pity over their poor abused souls.&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;But now that I'm on git, what was once a passing annoyance has now become a daily part of life.&lt;br /&gt;&lt;br /&gt;Happily this time everything is different. Different because of the actions of one man: &lt;span style="font-style: italic;"&gt;Jon&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Much as the heroes of &lt;a href="http://www.amazon.com/gp/product/B000UAFDP2?ie=UTF8&amp;amp;tag=jesbl-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=B000UAFDP2"&gt;Starship Troopers&lt;/a&gt; find that they need to understand the bug to beat the bug, it turns out that spending the five minutes it takes to get a handle on vi is actually worth it. Counterintuitive I know, but it must be done. &lt;span style="font-style: italic;"&gt;Jon&lt;/span&gt; has written up something that very nicely explains &lt;a href="http://www.viemu.com/a-why-vi-vim.html"&gt;Why, oh WHY, do those #?@! nutheads use vi? &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now, armed with a grounding of wtf vi is trying to do, we are now prepared to do battle with the beast.&lt;br /&gt;&lt;br /&gt;And &lt;a href="http://www.bemroses.net/images/curves.jpg"&gt;beast&lt;/a&gt; it is. With no further ado I present:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;font-size:180%;" &gt;vi in 11 simple years&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Year 0:&lt;/span&gt; Accidentally end up in vi. Close terminal.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Year 5:&lt;/span&gt; Tape a Post-It note with  ":q!" to your monitor. This is a significant improvement.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Year 6:&lt;/span&gt; Type i to enter insert mode. Use it like notepad. Type "esc :wq" to save and quit. Add these to the post-it note.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Year 11:&lt;/span&gt; Read the aforementioned post. Decide it's time to take the plunge. Learn 5 new key combos and finally, finally get the &lt;span style="font-weight: bold;"&gt;sweet sweet power of copy and paste&lt;/span&gt; back!&lt;br /&gt;Insert Mode: &lt;span style="font-weight: bold;"&gt;i&lt;/span&gt;&lt;br /&gt;Cut line &lt;span style="font-weight: bold;"&gt;dd&lt;/span&gt;&lt;br /&gt;Paste buffer &lt;span style="font-weight: bold;"&gt;p&lt;/span&gt; (or &lt;span style="font-weight: bold;"&gt;P&lt;/span&gt; to paste above)&lt;br /&gt;Cut 3 lines at the same time!! &lt;span style="font-weight: bold;"&gt;d3&lt;/span&gt;&lt;br /&gt;Delete word &lt;span style="font-weight: bold;"&gt;dw&lt;/span&gt;&lt;br /&gt;Quit without saving &lt;span style="font-weight: bold;"&gt;:q!&lt;/span&gt;&lt;br /&gt;Save and Quit &lt;span style="font-weight: bold;"&gt;:wq&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;There it is. vi in 5 minutes. Plus 10 something years. Who says you can't teach old dogs new tricks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-4726018092026671276?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/4726018092026671276/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=4726018092026671276' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/4726018092026671276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/4726018092026671276'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2009/01/vi-in-five-minutes.html' title='vi in five minutes'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-5747103325294551649</id><published>2008-12-31T15:09:00.001-05:00</published><updated>2009-01-21T15:25:27.725-05:00</updated><title type='text'>Top 17 Netbeans Ruby and Rails keyboard shortcuts</title><content type='html'>&lt;span style="font-weight: bold;"&gt;cmd-shift-1 &lt;/span&gt;show selected file in project&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;cmd-shift-f &lt;/span&gt;search whole project&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ctrl-tab &lt;/span&gt;switch between files&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ctrl-shift-o &lt;/span&gt;open file&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;shift-esc &lt;/span&gt; maximize view&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ctrl-enter&lt;/span&gt; ooo... redoing blocks and logic is sexy.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;cmd-space&lt;/span&gt; actually works. sometimes. meh. &lt;span style="font-weight: bold;"&gt;cmd-r &lt;/span&gt;rename&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ctrl-shift right/left&lt;/span&gt; indentation&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ctrl-g&lt;/span&gt; goto line&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;cmd-shift-w&lt;/span&gt; close all editors&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;shift-enter&lt;/span&gt; new line below this one (sexy!)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;cmd-b&lt;/span&gt; goto works sometimes, but 1 million times better than aptana because if it's not going to work it fails fast and never just freezes up for 40 seconds.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;cmd-shift down&lt;/span&gt; duplicate line&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ctrl-shift down&lt;/span&gt; move line down&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ctrl-shift .  &lt;/span&gt;expand selection&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ctrl-shift , &lt;/span&gt; retract selection&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;cmd /&lt;/span&gt;  comment&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ctrl-shift-f &lt;/span&gt;format&lt;br /&gt;&lt;br /&gt;Now with 4 more!&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;cmd-shift t&lt;/span&gt;  open test for file (or file for test)&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;cmd-shift a &lt;/span&gt;open action for controller&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;cmd +&lt;/span&gt; expand fold&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;cmd -&lt;/span&gt; collapse fold&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-5747103325294551649?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/5747103325294551649/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=5747103325294551649' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/5747103325294551649'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/5747103325294551649'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2008/12/top-17-netbeans-ruby-and-rails-keyboard.html' title='Top 17 Netbeans Ruby and Rails keyboard shortcuts'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-1819191502496681981</id><published>2008-12-30T15:21:00.011-05:00</published><updated>2011-08-01T06:18:42.021-05:00</updated><title type='text'>NetBeans 6.5 vs Aptana RadRails</title><content type='html'>Well after finally &lt;a href="http://jdwyah.blogspot.com/2008/12/open-letter-to-aptana-re-radrails.html"&gt;losing my cool&lt;/a&gt; and pitching in the Aptana towel I decided to erase a couple years of Eclipse finger muscle memory and start again with Netbeans.&lt;br /&gt;&lt;br /&gt;Before I did that, I did give &lt;a href="http://www.n-brain.net/"&gt;UNA&lt;/a&gt;  a 10 second look and actually liked a lot of the ideas. Logical keyboard shortcuts sounds brilliant and sane, and collaborative features sounds neato, but I'm not looking for flashy new relationships at this point of my life. So, NetBeans it is!&lt;br /&gt;&lt;br /&gt;In general, coding in NetBeans is a good experience. For the most part it feels like it's focused on helping you get real development tasks done quickly (as opposed to pie in the sky GUI generator editors that I'll never use). The best bits are the slick little things like the functionality around inserting variables in a string by typing #. It's tough to pinpoint just how these things are better than Eclipse/Aptana, but they feel nice and have me thinking that NetBeans may yet win me over.&lt;br /&gt;&lt;br /&gt;It's definitely opinionated software though and it takes a bit of getting used to. For me at least the icons aren't very intuitive and being a new user it's obviously a pain to get my fingers on the right shortcuts. Of course that brings up the main sticking point, which is the preferences system. Ouch. (&lt;span style="font-style: italic; color: rgb(0, 153, 0);"&gt;Update: NetBeans FTW! NetBeans 7 totally fixes this!!&lt;/span&gt;) While Eclipse's preference window may feel labyrinthine the addition of the search bar makes finding things workable. On NetBeans, there may be fewer options, but they're organized in a illogical un-searchable heap that had me cursing. Can't win them all I suppose. At least my damnable home and end keys worked without having to fix them &lt;a href="http://jdwyah.blogspot.com/2008/03/mac-leopard-os-x-windows-convert-color.html"&gt;like I did in Eclipse&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;Cool NetBeans Features:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Neat rake task browser&lt;/li&gt;&lt;li&gt;Neat db:migration tool&lt;/li&gt;&lt;li&gt;Integrated JavaScript debugging. Wow. Haven't used it in anger yet, but it is definitely sexy.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Sadly JRuby is dead to me, so I can't comment on that. I ended up running everything with MRI instead, which seems to work fine. While JRuby is cool and looks like it's &lt;a href="http://antoniocangiano.com/2008/12/09/the-great-ruby-shootout-december-2008/"&gt;almost as fast as Ruby 1.9&lt;/a&gt;, if it can't do native C stuff like sphinx / image magick it's of no use to me right now.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Overall, I think I'm going to be staying here a while. Netbeans certainly isn't an extension of my brain yet, but it doesn't freeze up and the search is fast so at least I feel like it isn't working against me. It also seems to handle Git switching branches beneath it much better. Aptana would freak out from time to time and force me to refresh the entire project. NetBeans just trundles along.&lt;br /&gt;&lt;br /&gt;Anybody know if the &lt;a href="http://www.amazon.com/gp/product/1430216360?ie=UTF8&amp;amp;tag=jesbl-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=1430216360"&gt;NetBeans for Ruby and Rails &lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=jesbl-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=1430216360" alt="" style="border: medium none  ! important; margin: 0px ! important; display: none;" border="0" height="1" width="1" /&gt; book is worth getting? OMG there's a new &lt;a href="http://www.amazon.com/gp/product/0061977969/ref=as_li_ss_tl?ie=UTF8&amp;tag=jesbl-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399373&amp;creativeASIN=0061977969"&gt;Neal Stephenson book: Readme&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=&amp;l=as2&amp;o=1&amp;a=0061977969&amp;camp=217145&amp;creative=399373" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;Miscellaneous thoughts:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;Help -&gt; Keyboard Shortcuts Card&lt;/span&gt; Is a great idea... but it doesn't know I'm on a Mac so it just spits up the PC versions and is thus rendered less useful. Worse, it doesn't actually take into account your keyboard shortcuts! It's just a static PDF. So, nice idea, but doesn't it kind of miss the whole point?&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Bookmarking.&lt;/span&gt; Again, nice idea, but wtf it only works within one file? Fail.&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Format and save on exit. &lt;/span&gt;Didn't see any way to do this in NetBeans. Loved it in Java/Eclipse-land.&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Link file to project navigator. &lt;/span&gt;Command-shift-1 is a substitute I guess, but I do miss automatic linking. It's a pain switching between partials otherwise.(&lt;span style="font-style: italic; color: rgb(0, 153, 0);"&gt;Update: NetBeans FTW! NetBeans 7 totally fixes this!!&lt;/span&gt;)&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Can't copy paste from test result window into editor wtf? &lt;/span&gt;Totally annoying.&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;Awful Awful Awful keymapping UI. &lt;/span&gt; Want to add a keymapping for 'goto test'? It's hidden behind one of 25 doors. Is it in the door marked Ruby? Test? Navigation? I'm not telling because I gave up. Oh and each door has a list of 20 things to scroll through. Eclipse is 1000% better in this regards.(&lt;span style="font-style: italic; color: rgb(0, 153, 0);"&gt;Update: NetBeans FTW! NetBeans 7 totally fixes this!!&lt;/span&gt;)&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;Test window is braindead. &lt;/span&gt;Clicking on show this test failure show me where in test_process it failed. Um.. I think I'd prefer to see the assertion kthxbai. (Maybe this is just shoulda throwing for a loop)&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;DB Service,  right click on table -&gt; view data. Automatically does a select * from table. &lt;/span&gt;Not so helpful when the table has a million rows. How about a default limit 100?&lt;br /&gt;&lt;br /&gt;Finally, here's a list of my &lt;a href="http://jdwyah.blogspot.com/2008/12/top-17-netbeans-ruby-and-rails-keyboard.html"&gt;top 17 NetBeans keyboard shortcuts&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-size:180%;"&gt;IRB AWESOMNESS&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;Finally, if you've read this far I figure it can't hurt to give a shout out to two killer tips that have been making me happy:&lt;/span&gt;&lt;br /&gt;&lt;a href="http://giantrobots.thoughtbot.com/2008/12/23/script-console-tips"&gt;http://giantrobots.thoughtbot.com/2008/12/23/script-console-tips&lt;/a&gt;&lt;br /&gt;&lt;a href="http://utilitybelt.rubyforge.org/usage.html"&gt;http://utilitybelt.rubyforge.org/usage.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;being able to use emacs or vi from within a irb session is out_of_control brilliant. Thank you utility-belt gods!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-1819191502496681981?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/1819191502496681981/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=1819191502496681981' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/1819191502496681981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/1819191502496681981'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2008/12/netbeans-65-vs-aptana-radrails.html' title='NetBeans 6.5 vs Aptana RadRails'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-4807437044232328297</id><published>2008-12-08T11:20:00.005-05:00</published><updated>2008-12-12T13:10:34.581-05:00</updated><title type='text'>An Open Letter to Aptana, re: RadRails</title><content type='html'>Dear Aptana,&lt;br /&gt;I just wanted to give you my $.02 about Aptana &amp;amp; RadRails.&lt;br /&gt;&lt;br /&gt;I'm an eclipse guy from my java past, so radrails was my first stop looking for a rails editor.&lt;br /&gt;&lt;br /&gt;I was pretty happy with the free version. It worked ok.&lt;br /&gt;&lt;br /&gt;Everything was fine until HAML came along as the new hotness and I couldn't find a good HAML syntax highlighter.&lt;br /&gt;&lt;br /&gt;Then somebody here bought Aptana and said that in the beta releases there was a HAML editor.&lt;br /&gt;&lt;br /&gt;We bought 5 licenses for ~$500 total.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;But me and the other guys are getting pretty close to tossing this whole stack.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Every time Eclipse freezes up 'Saving the Cloud model' I think about switching to textmate.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Every time I have to click away from the useless Rails Search to the slow as nuts Aptana search. I think of switching to I don't know what.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Every time there is a bug that doesn't allow me to type { to start a line, I assume that none of you actually uses this to develop rails apps on a day to day basis.&lt;/li&gt;&lt;li&gt;Will clicking f3 to go to the method declaration? Or will it freeze up for 2 minutes? It tough to predict.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;I could not care less about rails helper GUI things that run script/generate for me. Or run my rake tasks. None of us could. We use the command line and it's fine.&lt;br /&gt;&lt;br /&gt;I could not care less about 'the cloud'. Or Jaxster. Or pretty much any of the other features that you seem to be working on. Are you an IDE company or a hosting provider? I have a hosting provider. I have no idea what you are doing in this space.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;What we want:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Faster search.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Awesome Git Support.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Code completion that isn't brain dead. (I saw &lt;a href="http://blog.hasmanythrough.com/"&gt;Josh Susser&lt;/a&gt; present some awesome ideas on how to make this happen! (registering observed classes with the meta callbacks that happen when you run tests))&lt;br /&gt;&lt;/li&gt;&lt;li&gt;And as much refactoring support as you can make happen.&lt;/li&gt;&lt;/ol&gt;Code Editor + Git support + the standard eclipse outline, problems etc views.&lt;br /&gt;&lt;br /&gt;We will pay for this. We paid $500 for HAML syntax highlighting for goodness sake, but I feel like what you're doing and what I want are diverging. Quickly. Maybe that's just the way it is and it'll be a better future for us both, but I can't say I understand it. I feel like you guys should be making the killer rails IDE but instead you're doing things that have no value (to me) and driving me away in the process.&lt;br /&gt;&lt;br /&gt;Thanks for absorbing my rant. Personally, I know I appreciate hearing from users, even if they're frustrated and I figured it's more useful to send it your way than to grumble silently here.&lt;br /&gt;&lt;br /&gt;good luck,&lt;br /&gt;&lt;br /&gt;&lt;div&gt;-Jeff&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-4807437044232328297?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/4807437044232328297/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=4807437044232328297' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/4807437044232328297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/4807437044232328297'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2008/12/open-letter-to-aptana-re-radrails.html' title='An Open Letter to Aptana, re: RadRails'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-1373158816917386044</id><published>2008-11-06T18:22:00.006-05:00</published><updated>2008-11-18T15:51:42.611-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tocollege.net'/><title type='text'>ubuntu slicehost sun java apt-get</title><content type='html'>So as part of the &lt;a href="http://tocollege.net/"&gt;ToCollege.net&lt;/a&gt; migration from GoDaddy to &lt;a href="http://slicehost.com/"&gt;SliceHost&lt;/a&gt; I had the 'opportunity' to learn a new linux distro. After some going back and forth about whether I really felt like doing this and with much reassurance from the assorted linux-heads I decided to take the ubuntu plunge. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Reassured that &lt;span class="Apple-style-span" style="font-style: italic;"&gt;apt-get&lt;/span&gt; was the indeed the new hotness, I proceeded to attempt the very difficult and subtle and arcane process of... installing java. Easy right?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;That's what I thought. Turns out that the open-sources freakos in Ubuntu land are so fixated on free software, that installing Java on Ubuntu is not painless. (Yes I know you thought Java was free, but it turns out it's not free enough to qualify as really free, or something like that. I quite frankly don't care.) &lt;br /&gt;&lt;div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;Long story short, you need to update your source list. Anyway, you might think that adding 'universe' to the list of apt-get sources would be good enough to tell apt that you don't care about the useless OpenJDK, go get me the real Sun JDK, but you'd be wrong. You'd be wrong, because universe actually isn't the largest scope.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But what's bigger than the universe? Well, for standard window/mac user's maybe the universe is as big as it gets, but in Linux land the new hotness is... 'multiverse'&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Yes I do know what the multiverse is. Yes I did read &lt;a href="http://www.amazon.com/gp/product/0345468260?ie=UTF8&amp;tag=jesbl-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0345468260"&gt;Timeline&lt;/a&gt;. Yes it is neat. But no, this should not be a prereq for installing Java. The next person who tells me linux is ready for desktop users everywhere gets punched in the nose.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;code&gt;vim /etc/apt/sources.list&lt;br /&gt;add 'multiverse' to the end of all of the strings.&lt;br /&gt;&lt;br /&gt;sudo apt-get update&lt;br /&gt;sudo apt-get install sun-java6-jdk&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Then, if you were unfortunate enough to get tricked into installing the OpenJDK in your fruitless struggle to get this working.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;sudo update-java-alternatives -s java-6-sun&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;To test that everything is no longer rogered:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;java -version&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;You're looking for something akin to the following.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;java version "1.6.0_06"&lt;br /&gt;Java(TM) SE Runtime Environment (build 1.6.0_06-b02)&lt;br /&gt;Java HotSpot(TM) 64-Bit Server VM (build 10.0-b22, mixed mode)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-1373158816917386044?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/1373158816917386044/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=1373158816917386044' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/1373158816917386044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/1373158816917386044'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2008/11/ubuntu-slicehost-sun-java-apt-get.html' title='ubuntu slicehost sun java apt-get'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-1912252682679042571</id><published>2008-09-30T14:46:00.005-05:00</published><updated>2008-11-18T15:51:28.475-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git'/><title type='text'>Merging with Git: conflicts!</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Dramatis Personae:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;git-svn rebase:&lt;/span&gt; our hero/ protagonist&lt;br /&gt;&lt;span style="font-style: italic;"&gt;(no-branch):&lt;/span&gt; a mysterious stranger&lt;br /&gt;&lt;span style="font-style: italic;"&gt;.dotest:&lt;/span&gt; an even more mysterious interloper&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Scene I&lt;/span&gt;&lt;span style="font-style: italic;"&gt; - The Setup&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;tra-lala-lala&lt;br /&gt;&gt;&gt;mate config/environment.rb&lt;br /&gt;&gt;&gt;git add config/environment.rb&lt;br /&gt;&gt;&gt;git-svn rebase&lt;br /&gt;&lt;br /&gt;eek!!&lt;br /&gt;&gt;&gt;CONFLICT (content): Merge conflict in config/environment.rb&lt;br /&gt;&lt;br /&gt;merging...&lt;br /&gt;&gt;&gt;mate config/environment.rb  (and fix problem...)&lt;br /&gt;&gt;&gt;git add config/environment.rb&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;Scene 2&lt;/span&gt; - &lt;span style="font-style: italic;"&gt;Where it all goes wrong&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Well, since we just added, maybe we should just commit.&lt;br /&gt;&gt;&gt;git commit -m "merged conflict&lt;br /&gt;&lt;br /&gt;At this point, everyone dies, commits are forever lost and you are left to rot in the bizarre (no branch) land that your $9 git tutorial, or &lt;a href="http://www.amazon.com/Pragmatic-Version-Control-Using-Git/dp/1934356158/"&gt;not-yet-published book&lt;/a&gt;, never mentioned. Return to start.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;Scene 2 --ammend&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&gt;&gt; git rebase --continue !!!&lt;br /&gt;&lt;br /&gt;Milk &amp;amp; Honey*&lt;br /&gt;(or not. see the postscript)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Scene 3 &lt;/span&gt;- &lt;span style="font-style: italic;"&gt;Where all is explained&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The problem with scene 2 is that once a conflict occurs, git pops you into a new 'branch'-ish thing called (no branch). This is not a regular old branch afaict however. If you were to decide not to fix the conflict and just go on your merry way committing new code you'll be in for a lot of pain. You can tell if you're in this mysterious state by running 'git branch'. On git &lt;&gt;&gt;[jdwyah@silvia sample]$ git rebase --continue&lt;br /&gt;&gt;&gt;Applying: test&lt;br /&gt;&gt;&gt;No changes - did you forget to use 'git add'?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Basically when you committed you essenitally stole your continue's thunder and it isn't happy about it.&lt;br /&gt;&lt;br /&gt;Now you can do a --skip instead, and this is also written up here: &lt;a href="http://tech.hickorywind.org/articles/2008/06/10/larry-vs-the-git-rebase-merge-conflict"&gt;Larry vs. the Git Rebase Merge Conflict&lt;/a&gt; but from what I've been able to reproduce I think he must've done the commit accidentally like I did and there's no reason not to do the continue instead. It's such a twitch reaction to add then commit I'm guessing that he did the same thing I did. That said, git rebase --skip does work as a way to get out of this mess.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Postscript&lt;/span&gt; &lt;span style="font-style: italic;"&gt;(--ammend --ammend)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;* Note, it might not necessarily be all milk &amp;amp; honey here. You may in fact, be left with... MORE CONFLICTS! Now why might this be? Well, the fact is that you may be rebasing onto your local branch which may have &lt;span style="font-style: italic;"&gt;multiple commits&lt;/span&gt;. If this is the case, when git goes to replay your changes after the rebase merge it may well conflict multiple times: once for your first local commit, once for your second, etc...&lt;br /&gt;&lt;br /&gt;It's quite possible to think that you're losing your mind at this point, since you can continue to get conflicts for the same darn file over and over again, but if you do keep merging things you should eventually make it out of the rabbit hole. Hodgies merge option is probably a good solution here, or alternatively you could merge your local commits into one big commit.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-1912252682679042571?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/1912252682679042571/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=1912252682679042571' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/1912252682679042571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/1912252682679042571'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2008/09/merging-with-git-conflicts.html' title='Merging with Git: conflicts!'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-6925331007987549702</id><published>2008-09-30T14:34:00.006-05:00</published><updated>2008-11-18T15:52:50.837-05:00</updated><title type='text'>firefox bookmark bar broken and I can't tab</title><content type='html'>fwiw I'm dropping Firefox like a sharp knife the second chrome comes to mac. I'll admit I got my hopes up that 3.0.2 might fix one or more of:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;the out of control CPU usage&lt;/li&gt;&lt;br /&gt;&lt;li&gt;the bookmark sidebar that won't close&lt;/li&gt;&lt;br /&gt;&lt;li&gt;or the bookmark autocomplete which isn't keyboard navigable&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;but I should've know better.&lt;br /&gt;&lt;br /&gt;Who else is running chrome under vmware in unity mode so they can pretend that they're not feeling left out of the fun?&lt;br /&gt;&lt;br /&gt;Non sequitor, but I have to say I'm hugely tempted to just continue reading &lt;a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;amp;location=http%3A%2F%2Fwww.amazon.com%2FTime-Was-Soft-There-Shakespeare%2Fdp%2F0312347405%2F&amp;amp;tag=jesbl-20&amp;amp;linkCode=ur2&amp;amp;camp=1789&amp;amp;creative=9325"&gt;The Time Was Soft There&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=jesbl-20&amp;amp;l=ur2&amp;amp;o=1" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt; and dream about Paris for the rest of the day. Now that's browsing I could get in to.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-6925331007987549702?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/6925331007987549702/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=6925331007987549702' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/6925331007987549702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/6925331007987549702'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2008/09/firefox-bookmark-bar-broken-and-i-cant.html' title='firefox bookmark bar broken and I can&apos;t tab'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-6762927927479672593</id><published>2008-09-19T13:51:00.002-05:00</published><updated>2008-09-19T13:56:53.717-05:00</updated><title type='text'>InfoQ interview and GWT SEO Sample Chapter</title><content type='html'>I'm pleased to announce that there is an interview I did with InfoQ is now available online here: &lt;a href="http://www.infoq.com/articles/progwt"&gt;http://www.infoq.com/articles/progwt&lt;/a&gt;  &lt;br /&gt;&lt;br /&gt;As an added bonus, &lt;span style="font-weight:bold;"&gt;Chapter 12: Search Engine Optimization Making AJAX Searchable&lt;/span&gt; of &lt;a href="http://www.amazon.com/gp/product/1590599853?ie=UTF8&amp;tag=jdwyah-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=1590599853"&gt;Pro Web 2.0 application Development with GWT&lt;/a&gt; is available as a sample chapter with the interview.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;In this chapter, we’re going to look at how to make our GWT site search engine&lt;br /&gt;friendly. To do this, we’re going to reimagine the way that we get data to our GWT widgets,&lt;br /&gt;moving from RPC to a bootstrapping method where we’ll use GWT serialization to serialize&lt;br /&gt;our objects right into the HTML host page.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-6762927927479672593?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/6762927927479672593/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=6762927927479672593' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/6762927927479672593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/6762927927479672593'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2008/09/infoq-interview-and-gwt-seo-sample.html' title='InfoQ interview and GWT SEO Sample Chapter'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-6898325420485021684</id><published>2008-09-02T10:21:00.002-05:00</published><updated>2008-09-02T10:34:33.829-05:00</updated><title type='text'>Pro Web 2.0 Application Dev with GWT links</title><content type='html'>Jeff Oakes put together a great document that captures all of the weblinks from my book &lt;a href="http://www.amazon.com/gp/product/1590599853?ie=UTF8&amp;tag=jdwyah-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=1590599853"&gt;Pro Web 2.0 Application Development with GWT&lt;/a&gt;. You can find them here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://docs.google.com/Doc?id=dhftzx5_669z4wwgc4"&gt;http://docs.google.com/Doc?id=dhftzx5_669z4wwgc4&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Thanks Jeff!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-6898325420485021684?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/6898325420485021684/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=6898325420485021684' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/6898325420485021684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/6898325420485021684'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2008/09/pro-web-20-application-dev-with-gwt.html' title='Pro Web 2.0 Application Dev with GWT links'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-4253802002137543491</id><published>2008-06-22T15:11:00.002-05:00</published><updated>2008-06-22T15:14:58.158-05:00</updated><title type='text'>Your Amazon Wish List is Public!</title><content type='html'>I'll bet you didn't know that! I sure didn't.&lt;br /&gt;&lt;br /&gt;Just go to &lt;a href="http://www.amazon.com/gp/pdp/search"&gt;http://www.amazon.com/gp/pdp/search&lt;/a&gt; and search for your friends &amp; enemies.&lt;br /&gt;&lt;br /&gt;Hours (well ok, minutes) of fun seeing what everyone desires.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-4253802002137543491?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/4253802002137543491/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=4253802002137543491' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/4253802002137543491'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/4253802002137543491'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2008/06/your-amazon-wish-list-is-public.html' title='Your Amazon Wish List is Public!'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-3469387362288982244</id><published>2008-06-22T10:39:00.004-05:00</published><updated>2008-06-22T15:21:04.459-05:00</updated><title type='text'>We're number 1!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_yooHuL8p0hw/SF5ySULdyuI/AAAAAAAAAbs/pJwlLZ-X10I/s1600-h/Picture+1.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_yooHuL8p0hw/SF5ySULdyuI/AAAAAAAAAbs/pJwlLZ-X10I/s400/Picture+1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5214731077521623778" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I found a neat app called &lt;a href="http://rankforest.com/"&gt;RankForest&lt;/a&gt;, which simplifies an authors task of checking their Amazon sales statistics every 20 minutes. Looks like &lt;a href="http://www.amazon.com/gp/product/1590599853?ie=UTF8&amp;tag=jdwyah-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=1590599853"&gt;Pro Web 2.0 Application Development with GWT&lt;/a&gt; is doing well! (Ok that's #1 out of GWT books and not #1 out of all books on Amazon, but still, considering there's no magic wands in the whole book it's not bad. &lt;a href="http://www.amazon.com/gp/bestsellers/books/?ie=UTF8&amp;tag=jdwyah-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=1590599853 "&gt;Amazon Top 100&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;The book also got it's first review on Amazon the other day and I'm pleased to report that that was positive as well. Whew.&lt;br /&gt;&lt;br /&gt;Thanks to everyone who came to my talk on Real GWT Applications at &lt;a href="http://javasymposium.techtarget.com/europe/index.html"&gt;TheServerSide Prague&lt;/a&gt;. If you missed it, the presentation is up on ToCollege.net's &lt;a href="http://code.google.com/p/tocollege-net/downloads/list"&gt;download section&lt;/a&gt;. I focussed on the three stumbling blocks that I've found when using GWT. Design patterns for integration with a web framework, Hibernate, and Security.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-3469387362288982244?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/3469387362288982244/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=3469387362288982244' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/3469387362288982244'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/3469387362288982244'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2008/06/were-number-1.html' title='We&apos;re number 1!'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_yooHuL8p0hw/SF5ySULdyuI/AAAAAAAAAbs/pJwlLZ-X10I/s72-c/Picture+1.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-5125389186547742818</id><published>2008-06-14T11:00:00.005-05:00</published><updated>2008-11-18T15:50:26.755-05:00</updated><title type='text'>MySQL Apology</title><content type='html'>I need to apologize for recommending MySQL in my book &lt;a href="http://tinyurl.com/44y3df"&gt;Pro Web 2.0 Application Development with GWT&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;I didn't realize it didn't support DDL in transactions.&lt;br /&gt;&lt;br /&gt;I thought it was a real database.&lt;br /&gt;&lt;br /&gt;Please forgive me.&lt;br /&gt;&lt;br /&gt;I promise never to do it again and to always use PostgreSQL. &lt;br /&gt;&lt;br /&gt;Seriously, migrations have been one of my favorite parts of working with Rails at my new company and using the transactional_migration plugin made working with them all the sweeter. Not being able to do this on &lt;a href="http://www.ToCollege.net"&gt;ToCollege.net&lt;/a&gt; without a switch to Postgres is really bumming me out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-5125389186547742818?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/5125389186547742818/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=5125389186547742818' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/5125389186547742818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/5125389186547742818'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2008/06/mysql-apology.html' title='MySQL Apology'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-20970769883395747</id><published>2008-06-10T17:02:00.003-05:00</published><updated>2008-06-10T17:24:47.545-05:00</updated><title type='text'>Maven &amp; GWT a new simple plugin</title><content type='html'>One small part of the &lt;a href="http://www.tocollege.net"&gt;ToCollege.net&lt;/a&gt; site is its Maven / GWT integration. While there were a number of projects that tried to make this work I found them either overkill or dead in the water. &lt;br /&gt;&lt;br /&gt;As of today, I've released the net.tocollege.gwt_maven plugin as open source on Google Code. &lt;br /&gt;&lt;br /&gt;See how to integrate this into your pom.xml &lt;a href="http://code.google.com/p/tocollege-net/source/browse/ProGWT/trunk/pom.xml"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;See the source code &lt;a href="http://code.google.com/p/tocollege-net/source/browse/gwt_maven/trunk/"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;And check out Pro Web 2.0 Application Development with GWT for some 400 pages of walk through of the &lt;a href="http://code.google.com/p/tocollege-net/"&gt;ToCollege.net project&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-20970769883395747?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/20970769883395747/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=20970769883395747' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/20970769883395747'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/20970769883395747'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2008/06/maven-gwt-new-simple-plugin.html' title='Maven &amp; GWT a new simple plugin'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-3349714960382004344</id><published>2008-05-29T16:35:00.004-05:00</published><updated>2008-06-02T10:54:09.813-05:00</updated><title type='text'>Updating ToCollege.net to 1.5 RC1</title><content type='html'>With the very exciting release of &lt;a href="http://code.google.com/webtoolkit/download.html"&gt;GWT 1.5 RC1&lt;/a&gt; finally here, I thought I'd drop a quick post in to show you how to upgrade &lt;a href="http://code.google.com/p/tocollege-net/"&gt;ToCollege.net&lt;/a&gt; to RC1. If you're not familiar with it, ToCollege.net is an open source GWT 1.5 example codebase that serves as the sample code for the book &lt;a href="http://tinyurl.com/44y3df"&gt;Pro Web 2.0 Application Development with GWT&lt;/a&gt;. Read more about it &lt;a href="http://jdwyah.blogspot.com/2008/05/gwt-book-released-time-for-reviews.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Add GWT 1.5 RC1 to your Maven Repository&lt;/h3&gt;&lt;br /&gt;1) Download GWT 1.5 RC1 for your OS http://code.google.com/webtoolkit/download.html&lt;br /&gt;2) Unzip&lt;br /&gt;3) cp workspace/ProGWT/Setup/maven/gwt/install-* Downloads/gwt-mac-1.5.0.rc1/&lt;br /&gt;4) cd Downloads/gwt-mac-1.5.0.rc1/&lt;br /&gt;5) chmod a+x install*&lt;br /&gt;6) ./install-mac 1.5.0.rc1&lt;br /&gt;&lt;br /&gt;This should look something like this:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;[INFO] Scanning for projects...&lt;br /&gt;[INFO] Searching repository for plugin with prefix: 'install'.&lt;br /&gt;[INFO] ----------------------------------------------------------------------------&lt;br /&gt;[INFO] Building Maven Default Project&lt;br /&gt;[INFO]    task-segment: [install:install-file] (aggregator-style)&lt;br /&gt;[INFO] ----------------------------------------------------------------------------&lt;br /&gt;[INFO] [install:install-file]&lt;br /&gt;[INFO] Installing /Users/jdwyah/Downloads/gwt-mac-1.5.0.rc1/gwt-servlet.jar to /Users/jdwyah/.m2/repository/com/google/gwt-servlet/1.5.0.rc1/gwt-servlet-1.5.0.rc1.jar&lt;br /&gt;[INFO] ------------------------------------------------------------------------&lt;br /&gt;[INFO] BUILD SUCCESSFUL&lt;br /&gt;[INFO] ------------------------------------------------------------------------&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Update ToCollege.net to revision 85:&lt;/h3&gt; http://code.google.com/p/tocollege-net/source/detail?r=85&lt;br /&gt;&lt;pre&gt;svn up&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Revision notes: Update for GWT 1.5.0 RC1:&lt;br /&gt;*Needed to change TabPanel to DecoratedTabPanel and PopupPanel to DecoratedPopupPanel&lt;br /&gt;*Copied in changed to GWT css.&lt;br /&gt;*Moving to the net.tocollege.gwt_maven GWT Maven plugin. Had been using xi8ix-gwtc, but this plugin did unescessary work and didn't seem to be up to date. Run Setup/maven/install-all to install the net.tocollege GWT Maven plugin. (See the pom in &lt;a href="http://code.google.com/p/tocollege-net/source/browse/ProGWT/trunk/pom.xml"&gt;revision 85&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Install the new net.tocollege.gwt_maven plugin&lt;/h3&gt;&lt;br /&gt;cd Setup/maven/&lt;br /&gt;./install-all&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Run:&lt;/h3&gt;&lt;br /&gt;./run_jetty_gwt&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-3349714960382004344?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/3349714960382004344/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=3349714960382004344' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/3349714960382004344'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/3349714960382004344'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2008/05/updating-tocollegenet-to-15-rc1.html' title='Updating ToCollege.net to 1.5 RC1'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-6161559907231572295</id><published>2008-05-20T09:26:00.003-05:00</published><updated>2008-05-20T09:37:38.978-05:00</updated><title type='text'>Big GWT App!</title><content type='html'>Wondering about using GWT on a big project? Curious whether Google's eating it's own dog food? Well look no further than &lt;a href="https://www.google.com/health/"&gt;Google Health&lt;/a&gt;.  &lt;br /&gt;&lt;br /&gt;A quick 'view source' of the just launched Google Health site will show some code that should be very familiar to GWT developers.&lt;br /&gt;&lt;br /&gt;&amp;lt;script language="javascript" &lt;br /&gt;src="../gwt/dashboard/com.google.healthcare.weaver.frontend2.client.WeaverDashboard.nocache.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;   &amp;lt;iframe id="__gwt_historyFrame" src="javascript:''" style="width:0;height:0;border:0;overflow:auto"&gt;&amp;lt;/iframe&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Get kick-started with your own GWT app with 15,000 lines of GWT source and my book &lt;a href="http://tinyurl.com/44y3df"&gt;Web 2.0 Application Development with GWT&lt;/a&gt; which will show you how integrate GWT with Spring MVC, Hibernate and Spring Security and a host of other Java technologies.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;-Jeff&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-6161559907231572295?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/6161559907231572295/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=6161559907231572295' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/6161559907231572295'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/6161559907231572295'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2008/05/big-gwt-app.html' title='Big GWT App!'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-8002774819148784643</id><published>2008-05-14T20:36:00.008-05:00</published><updated>2008-12-08T10:32:54.889-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gwt'/><category scheme='http://www.blogger.com/atom/ns#' term='tocollege.net'/><title type='text'>GWT and Tickling your Google Analytics Urchin</title><content type='html'>To see how the new Google Analytics Urchin is integrated with GWT &lt;a href="http://tocollege.net"&gt;ToCollege.net&lt;/a&gt; see the decorator&lt;br /&gt;&lt;a href="http://github.com/jdwyah/tocollege.net/tree/master/src/main/webapp/decorators/default.dec"&gt;tocollege.net/src/main/webapp/decorators/default.dec&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;At the bottom it contains the Analytics page tracker:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");&lt;br /&gt;document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;var pageTracker = _gat._getTracker("UA-YOUR_TRACKER");&lt;br /&gt;pageTracker._initData();&lt;br /&gt;pageTracker._trackPageview();&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The analytics code is in this one file. &lt;a href="http://www.tocollege.net/"&gt;ToCollege.net&lt;/a&gt; uses&lt;br /&gt;&lt;a href="http://www.opensymphony.com/sitemesh/"&gt;SiteMesh&lt;/a&gt; to decorate all of the pages in the site with this decorator, so if you're using SiteMesh this is still the HTML you'll need.&lt;br /&gt;&lt;br /&gt;Because GWT will allow you to navigation within a page without reloading the page, you may end up with fewer page views than you'd like and no way to track what users are doing on your site. The way around this is to poke the urchin to let it know that it should record another page view.&lt;br /&gt;&lt;br /&gt;See the &lt;a href="http://github.com/jdwyah/tocollege.net/tree/master/src/main/java/com/apress/progwt/client/college/gui/ext/JSUtil.java"&gt;JSUtils.java&lt;/a&gt; file, which has a 'tickleUrchin'&lt;br /&gt;method. This is a JSNI hook so that you can trigger a Google Analytics&lt;br /&gt;page view from within GWT.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;For more info on the GWT 1.5.3 code behind ToCollege.net check out the &lt;a href="http://code.google.com/p/tocollege-net/"&gt;Google Group&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-8002774819148784643?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/8002774819148784643/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=8002774819148784643' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/8002774819148784643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/8002774819148784643'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2008/05/gwt-and-tickling-your-google-analytics.html' title='GWT and Tickling your Google Analytics Urchin'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-7003136633513333105</id><published>2008-05-08T20:42:00.004-05:00</published><updated>2008-05-14T18:35:20.390-05:00</updated><title type='text'>GWT Book Released, Time For Reviews</title><content type='html'>Well, she's out there. &lt;a href="http://www.amazon.com/gp/product/1590599853?ie=UTF8&amp;amp;tag=jdwyah-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=1590599853"&gt;Web 2.0 Application Development with GWT&lt;/a&gt; from Apress has finally hit the shelves. I'm can't tell you how happy this makes me.&lt;br /&gt;&lt;br /&gt;    I've really tried to write the book that I would've wanted to read when I started with GWT, so I hope you like it. For me, GWT itself was fantastic and easy to use, but the biggest stumbling blocks towards getting GWT to work within a complex Java ecosystem. To that end, I've tried to save some trees and leave API specs where they belong (in your IDE's autocomplete).&lt;br /&gt;&lt;br /&gt;    Continuing with this line of reasoning, instead of giving you a bunch of trivial sample applications, ninety percent of the book is devoted to one big, real world example: a full tour of a real Web 2.0 startup’s codebase. The example is &lt;a href="http://www.tocollege.net"&gt;ToCollege.net&lt;/a&gt;, a real world startup with an open source codebase. That means that along with the book you get 15,000 lines of source code that includes everything from Google Gears integration to Acegi OpenID, Compass full–text search, and Google Maps, all of it integrated with GWT 1.5.&lt;br /&gt;&lt;br /&gt;    My idea is that you should be able to leveraging this book’s available source code, to see the nitty–gritty details of how to merge a modern Web 2.0 application stack including Hibernate, Spring, Spring MVC 2.5, SiteMesh, and Freemarker.&lt;br /&gt;&lt;br /&gt;     Packaging GWT into a WAR file can be a bit of a headache out of the box, so you'll also see how I've wired GWT into an industry standard Maven build environment, which will help you get up to speed quickly and avoid configuration headaches.&lt;br /&gt;&lt;br /&gt;        One of the The great pitfall of many Ajax applications is they’re mostly opaque to search engines. I spend a lot of time in the book going over ToCollege.net solution to this thorny problem.&lt;br /&gt;&lt;br /&gt;    Finally, I spend a good bit of time showing how ToCollege.net protects itself from XSS and XSRF attacks. Security is often left as an 'exercise for the reader', but this is a real concern for a site like ToCollege.net. The book will cover the ToCollege.net security architecture in detail.&lt;br /&gt;&lt;br /&gt;Thanks for reading and please feel free to get in touch with any questions. There is a Google Group setup here: &lt;a href="http://groups.google.com/group/tocollege-net"&gt;http://groups.google.com/group/tocollege-net&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Cheers!&lt;br /&gt;&lt;br /&gt;-Jeff Dwyer&lt;br /&gt;Author of &lt;a href="http://www.amazon.com/gp/product/1590599853?ie=UTF8&amp;amp;tag=jdwyah-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=1590599853"&gt;Web 2.0 Application Development with GWT&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-7003136633513333105?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/7003136633513333105/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=7003136633513333105' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/7003136633513333105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/7003136633513333105'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2008/05/gwt-book-released-time-for-reviews.html' title='GWT Book Released, Time For Reviews'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-5994641262441520795</id><published>2008-03-10T13:07:00.013-05:00</published><updated>2008-04-25T10:36:47.896-05:00</updated><title type='text'>Mac Leopard OS X, Windows Convert: Color Terminal, Fixing Spaces, Home &amp; End Keys, Mouse</title><content type='html'>As a new Mac convert, I was pretty excited to get my hands on Leopard. In general it's been lovely, though I can't say there weren't a couple rough edges on the way to mac nirvana. I've chronicled the things I needed to do to get my mac working the way I wanted it to.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Better Terminal&lt;/h2&gt;&lt;br /&gt;The first thing any self respecting programmer comme mac user will do with a new leopard box is, of course, to drop into the terminal and setup my shell. Bash is fine with me, so here's my ~/.bash_profile&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;#better prompt&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;PS1='[\u@\h \W]\$ '&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;#better prompt for sudo&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;SUDO_PS1='[\u@\h \W]\$ '&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;alias ll='ls -l'&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;alias emcas=emacs&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;alias ss='ssh -l username site.com'&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;#easy copy&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;alias sc='scp $1 username@site.com:/var/tmp/ '&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;#Color for mac leopard bash terminal&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;export CLICOLOR=1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;export TERM=xterm-color&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;alias pstart='sudo -u postgres postmaster -D /usr/local/pgsql/data'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Fixing Leopard Spaces&lt;/h2&gt;&lt;br /&gt;Ok, spaces is allright, but by default I'm getting whiplash. Any little popup window can make the space switch, which means that a gmail calendar alert will take away the focus from your window and you'll end up typing into a void. blech. I'm not the only one to have notice this thankfully. All you need is the following in the terminal.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;defaults write com.apple.dock workspaces-auto-swoosh -bool NO&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I also did:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;defaults write com.apple.dock workspaces-wrap-arrows -bool NO&lt;/span&gt;&lt;br /&gt;which stopped letting spaces wrap around and seems infinitely more sane.&lt;br /&gt;&lt;br /&gt;Thanks be to:&lt;br /&gt;&lt;a href="http://www.macosxhints.com/article.php"&gt;http://www.macosxhints.com/article.php&lt;/a&gt;&lt;br /&gt;&lt;a href="http://blogs.sun.com/bblfish/entry/why_apple_spaces_is_broken"&gt;http://blogs.sun.com/bblfish/entry/why_apple_spaces_is_broken&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Still Not Perfect&lt;/h2&gt;&lt;br /&gt;Spaces and command-tab are now essentially useless however. Command-tab has no idea what apps are in the current space. This isn't ideal, but worth it for me since I think expose is close to being as fast. Sadly, clicking on an icon on the dock is now insufficient to switch your space.&lt;br /&gt;&lt;br /&gt;OK, here's a 1/2 solution. A cool little utility called Witch gives me command tabbing between applications within a single space. Excellent! Mapping it to option-tab seems like a decent compromise. That way you can get quicksilver on ctrl-tab, witch on option-tab and regular old tab switcher on cmd-tab.&lt;br /&gt;&lt;a href="http://www.manytricks.com/witch/"&gt;http://www.manytricks.com/witch/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;function keys without 'fn'&lt;/h2&gt;Keyboard and mouse settings, use function keys without fn is a must have as well.&lt;br /&gt;Now f8 for spaces and f9, f10,f11 for expose work great. plus f5,f3,f2 (refresh, go to type declaration, rename) work in eclipse. Much better.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Quicksilver&lt;/h2&gt;&lt;br /&gt;Quicksilver is the hotness. You know you want it.&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=EBvFUhTqKK4"&gt;http://www.youtube.com/watch?v=EBvFUhTqKK4&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Subversion visualization in OS X ie TortoiseSVN for Mac&lt;/h2&gt;&lt;br /&gt;OK, I've tried &lt;a href="http://scplugin.tigris.org/"&gt;http://scplugin.tigris.org/&lt;/a&gt;  but I've been pretty meh about it so far. Not sure what's going on, but icons only appears sometimes. And it's total hidden in the "more" menu. This needs work.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Cyberduck&lt;br /&gt;Seems to do the trick for FTP&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Keyboard Home &amp;amp; End&lt;/h2&gt;&lt;br /&gt;First, I think something needs to be done to get my windows keyboard on board. Ah yes, switching option and command in the keyboard modifiers screen is much better. Otherwise my fingers can't cope switching between pc &amp;amp; mac keyboards.&lt;br /&gt;&lt;br /&gt;But the real joy is getting the darn Home &amp;amp; End keys to work. I can't believe anyone thinks the default behavior is useful. Home flings me to the top of the page? Blech blech blech. Can someone explain this to me? Happily there's help to be had, but you need to do things pretty piecemeal. Once for Firefox, once for OSX and then seemingly infinitely depending on how many other apps you use that do their own keyboard bindings (ie Eclipse)&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;a href="http://www.starryhope.com/tech/2007/keyfixer-firefox-version/"&gt;http://www.starryhope.com/tech/2007/keyfixer-firefox-version/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.starryhope.com/tech/apple/2006/keyfixer/"&gt;http://www.starryhope.com/tech/apple/2006/keyfixer/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Of course for Eclipse you still need to erase the bindings for 'text end' and add bindings for 'line end'. Sigh.&lt;/div&gt;&lt;div&gt;oh and modify the bindings for 'select text end/start' to be shift page up/down and modify 'select line start/end' to be shift-home/end. phew... finally.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Finally to get home/end in terminal you need to do Terminal Preferences and then set Home and End to 'Send signal to terminal' then do ctrl-A and ctrl-E respectively.  I'm sure the Mac-guy ads will detail this procedure soon. What could be simpler?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now if I could just cut and paste files in Finder...  I'm sorry, but drag n' drop is in no way faster than cut n' paste.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Mouse&lt;/h2&gt;&lt;br /&gt;Now coming back to my old home setup, my normal mouse is waaay too slow. Installing MouseZoom 2.2. solves this... kinda. Restarting works even better. Grumble. I still feel like using a mouse on this machine is unbelievably imprecise.&lt;br /&gt;&lt;br /&gt;Well, there's my story. Hopefully this compendium of hard googled forum postings will save you some time.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-5994641262441520795?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/5994641262441520795/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=5994641262441520795' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/5994641262441520795'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/5994641262441520795'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2008/03/mac-leopard-os-x-windows-convert-color.html' title='Mac Leopard OS X, Windows Convert: Color Terminal, Fixing Spaces, Home &amp; End Keys, Mouse'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-5480112780517775212</id><published>2007-12-18T11:12:00.003-05:00</published><updated>2008-03-19T17:05:41.948-05:00</updated><title type='text'>The Books of 2007</title><content type='html'>So, 2007 is coming to a close and there's only so many more days for reading. I'm trying to pick out my Christmas reading by the fire list and I figured I'd take a look to see what I've done in 2007. Of course this is easily done using MyHippocampus so let's start there. &lt;a href="http://www.myhippocampus.com/site/browse/jdwyah.blogspot.com/Books"&gt;Jeff's Books at MyHippocampus&lt;/a&gt; If you want to see the timeline, click on the 'eye' and select the timeline view and then zoom around.&lt;br /&gt;&lt;br /&gt;The 2007 list as of December 18th&lt;br /&gt;---------------------------------&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/1932416404?ie=UTF8&amp;tag=jdwyah-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=1932416404"&gt;Voyage Along the Horizon: A Novel&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=jdwyah-20&amp;l=as2&amp;o=1&amp;a=1932416404" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/0375706860?ie=UTF8&amp;tag=jdwyah-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0375706860"&gt;Snow&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=jdwyah-20&amp;l=as2&amp;o=1&amp;a=0375706860" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/0596007655?ie=UTF8&amp;tag=jdwyah-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0596007655"&gt;Ambient Findability: What We Find Changes Who We Become&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=jdwyah-20&amp;l=as2&amp;o=1&amp;a=0596007655" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/1594480710?ie=UTF8&amp;tag=jdwyah-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=1594480710"&gt;Goodbye Lemon&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=jdwyah-20&amp;l=as2&amp;o=1&amp;a=1594480710" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/006091307X?ie=UTF8&amp;tag=jdwyah-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=006091307X"&gt;The Crying of Lot 49 (Perennial Fiction Library)&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=jdwyah-20&amp;l=as2&amp;o=1&amp;a=006091307X" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/1600964338?ie=UTF8&amp;tag=jdwyah-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=1600964338"&gt;The Death of Ivan Ilych&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=jdwyah-20&amp;l=as2&amp;o=1&amp;a=1600964338" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/0486433986?ie=UTF8&amp;tag=jdwyah-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0486433986"&gt;The Revolution Betrayed&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=jdwyah-20&amp;l=as2&amp;o=1&amp;a=0486433986" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/0486266893?ie=UTF8&amp;tag=jesbl-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0486266893"&gt;Candide (Dover Thrift Editions)&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=jesbl-20&amp;l=as2&amp;o=1&amp;a=0486266893" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/0312427050?ie=UTF8&amp;tag=jesbl-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0312427050"&gt;Interpretation of Murder&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=jesbl-20&amp;l=as2&amp;o=1&amp;a=0312427050" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/0811215474?ie=UTF8&amp;tag=jesbl-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0811215474"&gt;By Night in Chile&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=jesbl-20&amp;l=as2&amp;o=1&amp;a=0811215474" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/1573227951?ie=UTF8&amp;tag=jesbl-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=1573227951"&gt;Instance of the Fingerpost&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=jesbl-20&amp;l=as2&amp;o=1&amp;a=1573227951" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/0312421176?ie=UTF8&amp;tag=jesbl-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0312421176"&gt;Spies&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=jesbl-20&amp;l=as2&amp;o=1&amp;a=0312421176" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/0020768702?ie=UTF8&amp;tag=jesbl-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0020768702"&gt;Maps of the Mind&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=jesbl-20&amp;l=as2&amp;o=1&amp;a=0020768702" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/1582341001?ie=UTF8&amp;tag=jesbl-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=1582341001"&gt;Atlas Of Experience&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=jesbl-20&amp;l=as2&amp;o=1&amp;a=1582341001" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/0545010225?ie=UTF8&amp;tag=jesbl-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0545010225"&gt;Harry Potter&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=jesbl-20&amp;l=as2&amp;o=1&amp;a=0545010225" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/0141008253?ie=UTF8&amp;tag=jesbl-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0141008253"&gt;Everything is Illuminated&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=jesbl-20&amp;l=as2&amp;o=1&amp;a=0141008253" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/0375725784?ie=UTF8&amp;tag=jesbl-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0375725784"&gt;Heartbreaking Work of Staggering Genius&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=jesbl-20&amp;l=as2&amp;o=1&amp;a=0375725784" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/0375502874?ie=UTF8&amp;tag=jesbl-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0375502874"&gt;Box of Matches - Nicholson Baker&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=jesbl-20&amp;l=as2&amp;o=1&amp;a=0375502874" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/0140714545?ie=UTF8&amp;tag=jesbl-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0140714545"&gt;Hamlet&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=jesbl-20&amp;l=as2&amp;o=1&amp;a=0140714545" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/0143034820?ie=UTF8&amp;tag=jesbl-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0143034820"&gt;Death in a Strange Country Donna Leon&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=jesbl-20&amp;l=as2&amp;o=1&amp;a=0143034820" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/0679879242?ie=UTF8&amp;tag=jesbl-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0679879242"&gt;Golden Compass&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=jesbl-20&amp;l=as2&amp;o=1&amp;a=0679879242" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/0449911519?ie=UTF8&amp;tag=jesbl-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0449911519"&gt;Secret History - Donna Tartt&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=jesbl-20&amp;l=as2&amp;o=1&amp;a=0449911519" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I have to say, I'm not a bit displeased with myself. Before I went to look I had the sinking suspicion that there were only going to be a handful of books on there, but there's actually quite a few (or at least more than one a month, which I felt was in no way guaranteed). Go me! And go &lt;a href="http://www.myhippocampus.com/"&gt;MyHippocampus &lt;/a&gt;for making me feel good! I knew I'd written that site for some reason ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-5480112780517775212?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/5480112780517775212/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=5480112780517775212' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/5480112780517775212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/5480112780517775212'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2007/12/books-of-2007.html' title='The Books of 2007'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-8706728042085953526</id><published>2007-11-08T17:32:00.000-05:00</published><updated>2007-11-08T17:41:18.760-05:00</updated><title type='text'>Global Warming 'Greatest Scam in History'</title><content type='html'>I had John Coleman's &lt;a href="http://icecap.us/index.php/go/joes-blog/comments_about_global_warming/"&gt;Global Warming 'Greatest Scam in History'&lt;/a&gt; forwarded to me today as a defense of climate change scepticism. Here's the heart of his argument:&lt;br /&gt;&lt;blockquote&gt;I have read dozens of scientific papers. I have talked with numerous&lt;br /&gt;scientists. I have studied. I have thought about it. I know I am &lt;br /&gt;correct.&lt;/blockquote&gt;Yeah, it does seem tough to argue with this guy. I mean, you could say "he doesn't contradict anything, he just levels a broad claim of conspiracy and says 'he's sure!'", but then again, he does seem &lt;em&gt;SO&lt;/em&gt; sure. And offended. Plus that's a &lt;em&gt;LOT&lt;/em&gt; of papers to read (literally dozens!). Those things can be really long too. &lt;br /&gt; &lt;br /&gt;I know the EPA, UN, World Meteoroligical Association, Nobel Comittee &amp; Big Media, are all in cahoots anyway, but it does seem like it might be worth taking a look at &lt;a href="http://www.epa.gov/climatechange/science/index.html"&gt;some of their findings&lt;/a&gt;.&lt;br /&gt; &lt;br /&gt;Wait, better, than above is the &lt;a href="http://ipcc-wg1.ucar.edu/wg1/Report/AR4WG1_Print_SPM.pdf"&gt;summary for policy makers &lt;/a&gt;(read: people reading this blog):&lt;br /&gt;&lt;br /&gt;Be careful when you read this though, don't let their cold scientist-like objectivity cloud your vision. Remember to ask yourself the 4 questions that determine scientific validity:&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;"Are they 'offended' by reports to the contrary?"&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"Are their opponents engaged in a 'conspiracy' against them?"&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"Are non-believers 'wackos'?"&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"Are they really, really convinced they're right?"&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;If these aren't true, it's probably not good science.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-8706728042085953526?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/8706728042085953526/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=8706728042085953526' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/8706728042085953526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/8706728042085953526'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2007/11/global-warming-greatest-scam-in-history.html' title='Global Warming &apos;Greatest Scam in History&apos;'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-8503831238388300476</id><published>2007-11-08T11:23:00.003-05:00</published><updated>2011-08-01T06:13:32.370-05:00</updated><title type='text'>Using Maps of objects in Freemarker</title><content type='html'>Because sometimes helpful, well-written FAQ's that address precisely your problem are no substitute for an example, I present you with:&lt;p&gt; &lt;span style="font-weight:bold;"&gt;Using Maps of objects in Freemarker&lt;/span&gt;, the missing example for:&lt;p&gt;&lt;br /&gt;&lt;a href="http://fmpp.sourceforge.net/freemarker/app_faq.html#faq_question_14"&gt;Why I can't use non-string key in the myMap[myKey] expression? And what to do now? &lt;/a&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Here's our class and its HashMap and regular getter:&lt;br /&gt;&lt;div class="alt2" style=""&gt;&lt;br /&gt;&lt;pre style="background-color: white; border: 1px inset ; margin: 0px; padding: 6px; overflow: auto; width: 640px; height: 150px; text-align: left;" dir="ltr" class="alt2"&gt;&lt;br /&gt;public class Application implements Serializable {&lt;br /&gt;    private &amp;lt;ProcessType, ProcessValue&amp;gt; process = new HashMap&amp;lt;ProcessType,ProcessValue&amp;gt;();&lt;br /&gt;&lt;br /&gt;    public Map&amp;lt;ProcessType, ProcessValue&amp;gt; getProcess() {&lt;br /&gt;        return process;&lt;br /&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;We can't use this getter because it's wrapped by the Freemarker BeanModel and only accepts Strings. &lt;br /&gt;&lt;br /&gt;Here's the new getter that we'll add:&lt;br /&gt;&lt;div class="alt2" style=""&gt;&lt;br /&gt;&lt;pre style="background-color: white; border: 1px inset ; margin: 0px; padding: 6px; overflow: auto; width: 640px; height: 70px; text-align: left;" dir="ltr" class="alt2"&gt;    public ProcessValue getTheProcess(ProcessType type) {&lt;br /&gt;        return getProcess().get(type);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;And then in our Freemarker template, we call the new getter method.&lt;br /&gt;&lt;div class="alt2" style=""&gt;&lt;br /&gt;&lt;pre style="background-color: white; border: 1px inset ; margin: 0px; padding: 6px; overflow: auto; width: 640px; height: 80px; text-align: left;" dir="ltr" class="alt2"&gt;&amp;lt;#list application.process?keys as processType&amp;gt;&lt;br /&gt;   &amp;lt;td&amp;gt;  &lt;br /&gt;   ${application.getTheProcess(processType).pctComplete}&lt;br /&gt;   &amp;lt;/td&amp;gt;  &lt;br /&gt;&amp;lt;/#list&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;OMG there's a new &lt;a href="http://www.amazon.com/gp/product/0061977969/ref=as_li_ss_tl?ie=UTF8&amp;tag=jesbl-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399373&amp;creativeASIN=0061977969"&gt;Neal Stephenson book.&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=&amp;l=as2&amp;o=1&amp;a=0061977969&amp;camp=217145&amp;creative=399373" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-8503831238388300476?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/8503831238388300476/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=8503831238388300476' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/8503831238388300476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/8503831238388300476'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2007/11/using-maps-of-objects-in-freemarker.html' title='Using Maps of objects in Freemarker'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-4224887002093055130</id><published>2007-09-19T12:45:00.000-05:00</published><updated>2007-09-19T13:29:40.972-05:00</updated><title type='text'>Re: You're Probably Storing Passwords Incorrectly</title><content type='html'>As always the problem with best practices is that you often hear about them after you've gone and implemented something less ideal.&lt;br /&gt;&lt;br /&gt;CodingHorror's post was pretty good at guilting me into salting passwords&lt;br /&gt;&lt;a href="http://www.codinghorror.com/blog/archives/000953.html"&gt;http://www.codinghorror.com/blog/archives/000953.html&lt;/a&gt;&lt;br /&gt;I knew this would be easy with Acegi and of course it was a breeze...&lt;br /&gt;&lt;br /&gt;Except for that little problem about existing users who would still like to log in.&lt;br /&gt;&lt;br /&gt;Clearly salting passwords is a decision you'd prefer to make BEFORE you've hashed a whole bunch of passwords. As tempting as it is to rainbow attack your own passwords and then convert them to salted versions (which wouldn't work anyway) and without making everyone reset their passwords you're left a bit in the lurch. But never fear, TransitionReflectionSaltSource is here! (Second choice after 'doh!ReflectionSaltSource')&lt;br /&gt;&lt;br /&gt;This class allows you to transition to using salt in an AcegiSecurity system. New users get salt, old users still work. You pick the date field and time to start applying salt. This class will salt users from after the useSaltAfterDate. Null useSaltAfterDate will not be salted. You could easily change this to some other User property.&lt;br /&gt;&lt;div class="alt2" style=""&gt;&lt;br /&gt;&lt;pre style="background-color: white; border: 1px inset ; margin: 0px; padding: 6px; overflow: auto; width: 640px; height: 226px; text-align: left;" dir="ltr" class="alt2"&gt;/**&lt;br /&gt;*&lt;br /&gt;* @author Jeff Dwyer (blog) http://jdwyah.blogspot.com&lt;br /&gt;*&lt;br /&gt;*/&lt;br /&gt;public class TransitionReflectionSaltSource extends ReflectionSaltSource {&lt;br /&gt; private static final Logger log = Logger.getLoggerTransitionReflectionSaltSource.class);&lt;br /&gt;&lt;br /&gt; private String useSaltAfterDateProperty;&lt;br /&gt; private Date useSaltAfterDate;&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; public Object getSalt(UserDetails user) {&lt;br /&gt;   try {&lt;br /&gt;     Method reflectionMethod = user.getClass().getMethod(this.useSaltAfterDateProperty,&lt;br /&gt;new Class[] {});&lt;br /&gt;     Date userDate = (Date) reflectionMethod.invoke(user, new Object[] {});&lt;br /&gt;     if (null == userDate  userDate.before(useSaltAfterDate)) {&lt;br /&gt;        log.debug("No Salt " + user + " " + userDate);&lt;br /&gt;        return null;&lt;br /&gt;     } else {&lt;br /&gt;        log.debug("Using Salt " + user + " " + userDate);&lt;br /&gt;        return super.getSalt(user);&lt;br /&gt;     }&lt;br /&gt;   } catch (Exception exception) {&lt;br /&gt;     throw new AuthenticationServiceException(exception.getMessage(), exception);&lt;br /&gt;   }&lt;br /&gt; }&lt;br /&gt; @Required&lt;br /&gt; public void setUseSaltAfterDateProperty(String useSaltAfterDateProperty) {&lt;br /&gt;     this.useSaltAfterDateProperty = useSaltAfterDateProperty;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; @Required&lt;br /&gt; public void setUseSaltAfterDate(Date useSaltAfterDate) {&lt;br /&gt;     this.useSaltAfterDate = useSaltAfterDate;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Now we setup our TransitionalReflectionSaltSource to only salt things created after today, (the day we got guilted into fixing this)&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: white; border: 1px inset ; margin: 0px; padding: 6px; overflow: auto; width: 640px; height: 226px; text-align: left;" dir="ltr" class="alt2"&gt;&amp;lt;bean id="userSaltSource" class="com.aavu.server.util.TransitionReflectionSaltSource"&amp;gt;&lt;br /&gt;  &amp;lt;property name="userPropertyToUse" value="getId" /&amp;gt;&lt;br /&gt;  &amp;lt;property name="useSaltAfterDateProperty" value="getDateCreated" /&amp;gt;&lt;br /&gt;  &amp;lt;property name="useSaltAfterDate"&amp;gt;&lt;br /&gt;   &amp;lt;bean class="java.util.Date"&amp;gt;&lt;br /&gt;    &amp;lt;constructor-arg&amp;gt;&lt;br /&gt;     &amp;lt;value&amp;gt;107&amp;lt;/value&amp;gt;&lt;br /&gt;    &amp;lt;/constructor-arg&amp;gt;&lt;br /&gt;    &amp;lt;constructor-arg&amp;gt;&lt;br /&gt;     &amp;lt;value&amp;gt;8&amp;lt;/value&amp;gt;&lt;br /&gt;    &amp;lt;/constructor-arg&amp;gt;&lt;br /&gt;    &amp;lt;constructor-arg&amp;gt;&lt;br /&gt;     &amp;lt;value&amp;gt;18&amp;lt;/value&amp;gt;&lt;br /&gt;    &amp;lt;/constructor-arg&amp;gt;&lt;br /&gt;   &amp;lt;/bean&amp;gt;&lt;br /&gt;  &amp;lt;/property&amp;gt;&lt;br /&gt; &amp;lt;/bean&amp;gt;&lt;br /&gt; &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Easy! Is there a better way to inject a date though?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-4224887002093055130?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/4224887002093055130/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=4224887002093055130' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/4224887002093055130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/4224887002093055130'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2007/09/re-youre-probably-storing-passwords.html' title='Re: You&apos;re Probably Storing Passwords Incorrectly'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-7763360534022303117</id><published>2007-05-16T08:59:00.000-05:00</published><updated>2007-05-16T15:12:00.085-05:00</updated><title type='text'>Acegi OpenID tricks &amp; tribulations</title><content type='html'>Well, after a couple headaches of my own creation, Acegi OpenID is up and running on &lt;a href="http://www.myhippocampus.com/"&gt;MyHippocampus&lt;/a&gt;&lt;br /&gt;&lt;span style=""&gt;&lt;pre&gt;&lt;br /&gt;  &amp;lt;bean id="openIDStore" class="com.janrain.openid.store.MemoryStore"&amp;gt;&lt;br /&gt;      &amp;lt;constructor-arg value="changeThis"/&amp;gt;&lt;br /&gt;  &amp;lt;/bean&amp;gt;&lt;br /&gt;  &amp;lt;bean id="openIDConsumer" class="org.acegisecurity.ui.openid.consumers.JanRainOpenIDConsumer"&amp;gt;&lt;br /&gt;      &amp;lt;property name="store" ref="openIDStore"/&amp;gt;&lt;br /&gt;  &amp;lt;/bean&amp;gt;&lt;br /&gt;  &amp;lt;bean id="openIDResponseProcess" class="org.acegisecurity.ui.openid.OpenIDResponseProcessingFilter"&amp;gt;&lt;br /&gt;      &amp;lt;property name="consumer" ref="openIDConsumer"/&amp;gt;&lt;br /&gt;      &amp;lt;property name="defaultTargetUrl" value="/site/index.html"/&amp;gt;&lt;br /&gt;      &amp;lt;property name="authenticationFailureUrl" value="/site/acegilogin.html?login_error=1"/&amp;gt;&lt;br /&gt;      &amp;lt;property name="authenticationManager" ref="authenticationManager"&amp;gt;&amp;lt;/property&amp;gt;&lt;br /&gt;      &amp;lt;property name="rememberMeServices" ref="rememberMeServices"&amp;gt;&amp;lt;/property&amp;gt;&lt;br /&gt;  &amp;lt;/bean&amp;gt;&lt;br /&gt;  &amp;lt;bean id="openIDAuthProvider" class="org.acegisecurity.providers.openid.OpenIDAuthenticationProvider"&amp;gt;&lt;br /&gt;      &amp;lt;property name="ssoAuthoritiesPopulator" ref="userDAO"/&amp;gt;&lt;br /&gt;  &amp;lt;/bean&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Once I realized that my userDAO would make a fine ssoAuthoritiesPopulator and I didn't have to go figure out was CAS was all about I was off and running. Happily I rewrote the OpenIDLoginInitiationServlet to be a OpenIDLoginController so I could back out the changed to web.xml, which is a good thing only because everytime I touch it I feel like something somewhere goes haywire.&lt;br /&gt;&lt;br /&gt;The last hurdle, of course was that it all tested fine, but that when deployed, req.getServer() would still return "localhost" instead of my domain name. Here's to the power of opensource! Saving peoples butts by letting you put hardcode in the source and recompile ;) Clearly I'm missing something. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Unfortunately functional logging in is was half the battle.&lt;br /&gt;&lt;br /&gt;The real difficulty arises when you'd like to figure out what to store as the eventual username in the database &amp; you go to implement the signup process.&lt;br /&gt;&lt;br /&gt;someopenid.myopenid.net&lt;br /&gt;someopenid.myopenid.net/&lt;br /&gt;http://someopenid.myopenid.net&lt;br /&gt;&amp;amp;&lt;br /&gt;http://someopenid.myopenid.net/&lt;br /&gt;&lt;br /&gt;may all be the same ID, but they sure aren't the same string. JanRain seems to deal with this ok, and always asks me to lookup something of the form "http://someopenid.myopenid.net/" which seems like it should sort me out.&lt;br /&gt;&lt;br /&gt;The trick is when your user goes to create an account. If I just ask them for their ID on the signup page, &lt;strike&gt;then I have to go a string munge it myself to put it in the correct form and if they mistype, or I mis-munge things go haywire.&lt;/strike&gt; Ah, com.janrain.openid.Util.normalizeUrl(userUrl); &lt;br /&gt;Alternatively, I could have them login first, then signup, but if I allow just any old OpenID to login, I end up with these weird sort of 'no-account but I'm technically logged in' users, which makes for a bit of a headache ensuring that they aren't allowed to do things a real user can.&lt;br /&gt;&lt;br /&gt;Complicating all of this is that all other manner of things may be acceptable openID identifiers, depending on what FAQ / RFC / random blog posting you read. What's the regular expression that validates an openID identifier when&lt;br /&gt;"=Mary.Jones*Henry" and "=@Example.Corp*Ecuador*Quito"&lt;br /&gt;are valid as well as the above? You've got me.&lt;br /&gt;&lt;br /&gt;None of this would be so bad except for the fact that I was hoping to have username@hipcamp.com be a nice simple way for users to email themselves information. I suppose that's what you get when you try to reconcile "nice &amp;amp; simple" with the cutting edge nerd street cred of OpenID.&lt;br /&gt;&lt;br /&gt;For now, just supporting URL's &amp; not i-names seems to be what most people do, so that's my plan. Not precisely sure what to do about the email thing. I'm hoping that stripping off the http:// and trailing / is a solution, but is "openid.com/bob" a valid openID? I can't seem to find that answer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-7763360534022303117?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/7763360534022303117/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=7763360534022303117' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/7763360534022303117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/7763360534022303117'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2007/05/acegi-openid-tricks-tribulations.html' title='Acegi OpenID tricks &amp; tribulations'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-3821895276736924509</id><published>2007-04-16T15:39:00.000-05:00</published><updated>2007-04-16T16:07:29.380-05:00</updated><title type='text'>Freemarker Spring</title><content type='html'>Sorry, another soporific blog post for those of you not building websites.&lt;br /&gt;&lt;br /&gt;So you get:&lt;br /&gt;freemarker.template.TemplateModelException: To do URL encoding, the framework that encloses FreeMarker must specify the output encoding or the URL encoding charset, so ask the programmers to fix it. Or, as a last chance, you can set the url_encoding_charset setting in the template, e.g. &lt;#setting url_escaping_charset='ISO-8859-1'&gt;, or give the charset explicitly to the buit-in, e.g. foo?url('ISO-8859-1').&lt;br /&gt;&lt;br /&gt;And you feel bad about doing things described as "last chance" but where to specify freemarker variable in you spring config?&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer" abstract="false"&lt;br /&gt;singleton="true" lazy-init="default" autowire="default" dependency-check="default"&amp;gt;&lt;br /&gt;&amp;lt;property name="templateLoaderPath"&amp;gt;&lt;br /&gt;&amp;lt;value&amp;gt;/&amp;lt;/value&amp;gt;&lt;br /&gt;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;lt;property name="freemarkerSettings"&amp;gt;&lt;br /&gt;&amp;lt;props&amp;gt;&lt;br /&gt;&amp;lt;prop key="datetime_format"&amp;gt;MM/dd/yyyy&amp;lt;/prop&amp;gt;&lt;br /&gt;&amp;lt;prop key="number_format"&amp;gt;0.#####&amp;lt;/prop&amp;gt;&lt;br /&gt;&amp;lt;prop key="url_escaping_charset"&amp;gt;ISO-8859-1&amp;lt;/prop&amp;gt;&lt;br /&gt;&amp;lt;/props&amp;gt;&lt;br /&gt;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;lt;/bean&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-3821895276736924509?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/3821895276736924509/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=3821895276736924509' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/3821895276736924509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/3821895276736924509'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2007/04/freemarker-spring.html' title='Freemarker Spring'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-6175750608348049016</id><published>2007-01-19T12:36:00.000-05:00</published><updated>2007-01-19T12:37:19.916-05:00</updated><title type='text'>Tommy's Oscar preDickies</title><content type='html'>Woo! Best oscar predictions on the whole world wide web. &lt;a href="http://www.geocities.com/tdoscar/"&gt; Tommy's Oscar preDickies&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-6175750608348049016?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/6175750608348049016/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=6175750608348049016' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/6175750608348049016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/6175750608348049016'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2007/01/tommys-oscar-predickies.html' title='Tommy&apos;s Oscar preDickies'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-8191446498613768285</id><published>2007-01-16T09:47:00.000-05:00</published><updated>2007-01-16T11:20:26.326-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><title type='text'>Hibernate NonUniqueExceptions</title><content type='html'>So I knew I was in trouble this morning when I googled "hibernate nonuniqueidentifier" and only came up with references to my own blog. That's happened once before and it's never a good thing to find out that google believes you're the world expert on the very thing you're having a problem with. &lt;br /&gt;&lt;br /&gt;Anyway here was the solution to my Hibernate NonUniqueException. I hadn't had any problems until I made the entire service layer transactional with some a little AOP magic, but once I did that all updates started throwing these NonUniqueExceptions.&lt;br /&gt;&lt;br /&gt;Here's the code w/ the addition of:&lt;br /&gt;&lt;pre&gt;getHibernateTemplate().evict(sameNamed);&lt;/pre&gt;&lt;br /&gt;to prevent the Exception. Basically Hibernate is just trying to protect me from updating over myself, but since I really do want to just read properties of "sameNamed" Topic and then write over it, eviction is just fine.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public Topic save(Topic t) throws BusinessException {&lt;br /&gt;&lt;br /&gt; if(t.getTitle().equals("")){&lt;br /&gt; throw new BusinessException("Empty Title");&lt;br /&gt;  } &lt;br /&gt; if(t.mustHaveUniqueName()){&lt;br /&gt;  Object[] args = {t.getTitle(),t.getUser()};&lt;br /&gt;  Topic sameNamed = (Topic)     DataAccessUtils.uniqueResult(getHibernateTemplate().find("from Topic where title = ? and user = ?",args));&lt;br /&gt;&lt;br /&gt; if(sameNamed != null &amp;&amp; sameNamed.getId() != t.getId()){&lt;br /&gt;  throw new BusinessException("Duplicate Name");&lt;br /&gt; }&lt;br /&gt; //need to evict or we'll get a NonUniqueException&lt;br /&gt; getHibernateTemplate().evict(sameNamed);&lt;br /&gt;  }&lt;br /&gt; getHibernateTemplate().saveOrUpdate(t);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-8191446498613768285?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/8191446498613768285/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=8191446498613768285' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/8191446498613768285'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/8191446498613768285'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2007/01/hibernate-nonuniqueexceptions.html' title='Hibernate NonUniqueExceptions'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-3044773442812939772</id><published>2006-12-11T19:58:00.000-05:00</published><updated>2006-12-11T20:03:16.748-05:00</updated><title type='text'>X60 Tablet Memory Prices</title><content type='html'>&lt;ul&gt;&lt;br /&gt;&lt;li&gt;512 MB PC2-5300 DDR2 667MHz Memory (1 DIMM)  [add $0.00] &lt;/li&gt;&lt;br /&gt;&lt;li&gt;1 GB PC2-5300 DDR2 667MHz Memory (2 DIMM)  Memory Sale! Additional 512MB memory is free (You save: $80).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;1 GB PC2-5300 DDR2 667MHz Memory (1 DIMM) [add $90.00]  &lt;/li&gt;&lt;br /&gt;&lt;li&gt;1.5 GB PC2-5300 DDR2 667MHz Memory (2 DIMM) [add $99.00] [Lenovo recommended]&lt;/li&gt;&lt;br /&gt;&lt;li&gt;2 GB PC2-4200 DDR2 533MHz Memory (1 DIMM) &lt;span style="font-weight:bold;"&gt;&lt;span style="font-style:italic;"&gt;[add $820.00]&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;  &lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Does this make sense to anyone? This is just bizarre right?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-3044773442812939772?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/3044773442812939772/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=3044773442812939772' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/3044773442812939772'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/3044773442812939772'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2006/12/x60-tablet-memory-prices.html' title='X60 Tablet Memory Prices'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-131743897416409627</id><published>2006-12-06T10:45:00.000-05:00</published><updated>2007-11-08T11:45:17.341-05:00</updated><title type='text'>Updated Spring Configuration</title><content type='html'>Here's an updated version of the HostPrecedingPropertyPlaceholderConfigurer that I introduced &lt;a href="http://jdwyah.blogspot.com/2006/06/alternatives-to-advanced-configuration.html"&gt;here.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This version makes for cleaner property files since you don't need to duplicate everything for each HOST, just the properties that are different.&lt;br /&gt;&lt;br /&gt;The goal of this class is to be able to deploy your spring project to multiple hosts without needed to reconfigure / edit any properties files. This method makes it much easier to keep properties files in svn or cvs as well, because when Bob makes a change to the testDB server properties, he won't blow away your DB username etc when you checkout his changes.&lt;br /&gt;&lt;br /&gt;&lt;div class="alt2" style=""&gt;&lt;br /&gt;&lt;pre style="background-color: white; border: 1px inset ; margin: 0px; padding: 6px; overflow: auto; width: 640px; height: 350px; text-align: left;" dir="ltr" class="alt2"&gt;&lt;br /&gt;package com.aavu.server.util;&lt;br /&gt;&lt;br /&gt;import java.net.InetAddress;&lt;br /&gt;import java.net.UnknownHostException;&lt;br /&gt;import java.util.Properties;&lt;br /&gt;&lt;br /&gt;import org.apache.log4j.Logger;&lt;br /&gt;import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * HostPrecedingPropertyPlaceholderConfigurer&lt;br /&gt; * &lt;br /&gt; * Extends PropertyPlaceholderConfigurer to insert $hostname.property if&lt;br /&gt; * the property name starts with HOST&lt;br /&gt; * sample properties file:&lt;br /&gt; * &lt;br /&gt; *  jdbc.user=live_user&lt;br /&gt; *  server.jdbc.url=jdbc:postgresql://db.host.com:5432/db&lt;br /&gt; *  server.magic.file.location=/var/magic_file&lt;br /&gt; *&lt;br /&gt; *  jdbc.user=devel_user&lt;br /&gt; *  devel.jdbc.url=jdbc:postgresql://devel-db.host.com:5432/db&lt;br /&gt; *  devel.magic.file.location=c:\\var\magic_file&lt;br /&gt; *    &lt;br /&gt; * my.property=a property referenced through a method besides&lt;br /&gt; * HostPrecedingPropertyPlaceholderConfigurer&lt;br /&gt; * &lt;br /&gt; *  &amp;lt;bean id="propertyConfigurer"&lt;br /&gt; *  class="com.util.spring.HostPrecedingPropertyPlaceholderConfigurer"&amp;gt;&lt;br /&gt; *  &amp;lt;property name="location" value="classpath:config.properties" /&amp;gt;&lt;br /&gt; * &amp;lt;/bean&amp;gt;&lt;br /&gt; *&lt;br /&gt; * &amp;lt;bean id="dataSource"&lt;br /&gt; *  class="com.mchange.v2.c3p0.ComboPooledDataSource"&lt;br /&gt; *  destroy-method="close"&amp;gt;&lt;br /&gt; *  &amp;lt;property name="driverClass" value="${jdbc.driverClass}" /&amp;gt;&lt;br /&gt; *  &amp;lt;property name="jdbcUrl" value="${HOST.jdbc.url}" /&amp;gt;&amp;lt;!--Do a host lookup!--&amp;gt;&lt;br /&gt; *  &amp;lt;property name="user" value="${jdbc.user}" /&amp;gt;&lt;br /&gt; *  &amp;lt;property name="password" value="${jdbc.password}" /&amp;gt;  &lt;br /&gt; * &amp;lt;/bean&amp;gt;&lt;br /&gt; * &lt;br /&gt; * &lt;br /&gt; * @author Jeff Dwyer (blog) http://jdwyah.blogspot.com&lt;br /&gt; *&lt;br /&gt; */&lt;br /&gt;public class HostPrecedingPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {&lt;br /&gt;&lt;br /&gt; private static Logger log = Logger.getLogger(HostPrecedingPropertyPlaceholderConfigurer.class);&lt;br /&gt;&lt;br /&gt; protected String resolvePlaceholder(String placeholder, Properties props) {&lt;br /&gt;  &lt;br /&gt;  try {&lt;br /&gt;   &lt;br /&gt;   if(placeholder.startsWith("HOST.")){&lt;br /&gt;    log.debug("Host: "+InetAddress.getLocalHost().getHostName()+" for property "+placeholder);    &lt;br /&gt;    String replace = placeholder.replaceFirst("HOST", InetAddress.getLocalHost().getHostName());    &lt;br /&gt;    return props.getProperty(replace);&lt;br /&gt;   }else{&lt;br /&gt;    log.debug("reg");&lt;br /&gt;    return props.getProperty(placeholder);    &lt;br /&gt;   }&lt;br /&gt;  } catch (UnknownHostException e) {&lt;br /&gt;   log.warn(e);&lt;br /&gt;   return null;&lt;br /&gt;  }&lt;br /&gt; } &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-131743897416409627?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/131743897416409627/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=131743897416409627' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/131743897416409627'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/131743897416409627'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2006/12/updated-spring-configuration.html' title='Updated Spring Configuration'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-8237042187041220433</id><published>2006-12-01T14:11:00.006-05:00</published><updated>2009-07-29T15:30:53.503-05:00</updated><title type='text'>Changing cats into dogs</title><content type='html'>Hibernate &lt;a href="http://forum.hibernate.org/viewtopic.php?p=2332228"&gt;Modifying subclass's discriminator value on update&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Well, despite the naysayers above I've succeeded in doing the unnatural and have changed the type of a polymorphic Hibernate class.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Dog changeCatToDog(Cat cat){&lt;br /&gt;   int res = (Integer) getHibernateTemplate().execute(new HibernateCallback(){&lt;br /&gt; public Object doInHibernate(Session sess) throws Exception {&lt;br /&gt; String hqlUpdate = "update Animal set discriminator = 'dog' where animal_id = :id";&lt;br /&gt;        int updatedEntities = sess.createQuery( hqlUpdate )&lt;br /&gt;          .setLong( "id", cat.getId() )                            &lt;br /&gt;   .executeUpdate();   &lt;br /&gt;   return updatedEntities;   &lt;br /&gt;  }});&lt;br /&gt;&lt;br /&gt;    getHibernateTemplate().evict(t);&lt;br /&gt;&lt;br /&gt;    return (Dog) getHibernateTemplate().get(Dog.class, cat.getId());&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-8237042187041220433?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/8237042187041220433/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=8237042187041220433' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/8237042187041220433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/8237042187041220433'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2006/12/changing-cats-into-dogs.html' title='Changing cats into dogs'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-4136005304501529197</id><published>2006-11-27T19:01:00.000-05:00</published><updated>2006-11-28T20:18:55.621-05:00</updated><title type='text'>Micro$oft Money 2007</title><content type='html'>"Pissing off your customer before the software is even installed." &lt;br /&gt;&lt;br /&gt;A play in 3 parts with one nano-spam bot.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Act 1&lt;/span&gt;&lt;br /&gt;We'd like to keep you informed via email about product updates, upgrades, special offers and pricing. We will not pass your details onto third parties. &lt;span style="font-weight:bold;"&gt;&lt;span style="font-style:italic;"&gt;If you do not wish to be contacted via email, please ensure that the box is not checked.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Nice one M$oft. Nice one. This is how you win my trust. Don't even pretend you're illiterate and that that wasn't intentionally confusing. How about "If you wish to be contacted, check the box."&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Act 2&lt;/span&gt;&lt;br /&gt;Some $6 extended download protection crapola that has absolutely no description of what it does. What, am I just supposed to quiver in fear of what might happen if I &lt;span style="font-weight:bold;"&gt;don't&lt;/span&gt; buy it? Assoles.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Act 3&lt;/span&gt;&lt;br /&gt;oo more fun.&lt;br /&gt;Hidden at the bottom of the rebate in the smallest text you've ever seen is a little 'please check here not to be spammed' box. I guess they decided the double negative wasn't necessary since it was in 6 point font. Really, it's almost worth purchasing the software so you can download this pdf and see how absurdly small it is. It would almost be cute if it weren't so evil. Kind of like a nano-spam bot.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;and now that we've installed... Act 4&lt;br /&gt;Microsoft Money 2007 is a steaming pile of $hit. I've just frozen it three times in as many minutes. Seems that "Is this your regularly scheduled transaction?" actually means "Go into endless loop?"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-4136005304501529197?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/4136005304501529197/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=4136005304501529197' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/4136005304501529197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/4136005304501529197'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2006/11/microoft-money-2007.html' title='Micro$oft Money 2007'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-8619266424925366984</id><published>2006-11-19T21:47:00.000-05:00</published><updated>2006-11-28T17:35:38.271-05:00</updated><title type='text'>Don't miss this</title><content type='html'>My god. Or.. do I mean 'his' God?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-8619266424925366984?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/8619266424925366984/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=8619266424925366984' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/8619266424925366984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/8619266424925366984'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2006/11/dont-miss-this.html' title='Don&apos;t miss &lt;a href=&quot;http://www.correntewire.com/republican_loser_demands_hindu_democrat_winner_convert_to_christianity&quot;&gt;this&lt;/a&gt;'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-8741598708883554655</id><published>2006-10-08T19:16:00.000-05:00</published><updated>2006-10-08T19:39:37.684-05:00</updated><title type='text'>bile</title><content type='html'>I'm not a particularly bilous fellow, but the advantages of disgorging one's Bile on the Internet are well known, so here goes.&lt;br /&gt;&lt;br /&gt;One. When did NOVA become a childrens show. They just introduced the periodic table. And there's a neutron cartoon with a bungie cord. I remembered NOVA as being an interesting show operating with a small assumption of a shared scientific background. No? Maybe that was just me. &lt;br /&gt;&lt;br /&gt;Two. Tony Kornheiser. Now there's a reason to listen to football on univision like I do for the world cup (side-bile: ABC, here's how you sort this out. Fly to Dublin. Go into a pub. Find a mean looking guy and knock him over the head and drag him back. Now fly to Italy, Turkey and Mexico. Repeat. Give them all microphones &amp; free beer. Now you're sorted. Repeat for all major sports telecasts except wrestling, which would be much more entertaining hosted by the 5 queer eye guys. Actually have them host everything on your network. Them or the MST3K guys.) The only good news to come out of this is that I've never really like Joe Theismann's style much, but now I really like to hear him get irritated w/ Kornheiser, since I'm so darn irritated myself. If there's a rumble in the studio at some point this season I promise I'll watch more than 2 games next year. But c'mon, he sounds like a man who's never watched a football game. And my god he wouldn't shut up about the game being over. Who does that? Isn't the whole point of commentators to get you to stay there and watch the ads until MNF finished at 1:30 in the morning in some 37-10 rout? But now I've got Kornheiser calling the game after the half and giving me special insight into the fact that the momentum isn't going their way. Bring back Dennis Miller. He didn't belong either, but who cares.&lt;br /&gt;&lt;br /&gt;Erm Three. Not sure. I'll think of something. I told you I wasn't very bilous. Um.. the state of health care in the US. Not very bilous eh? fine. go see &lt;a href="http://www.jroller.com/page/fate"&gt;hani&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-8741598708883554655?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/8741598708883554655/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=8741598708883554655' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/8741598708883554655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/8741598708883554655'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2006/10/bile.html' title='bile'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-25644640360589938</id><published>2006-09-27T08:30:00.000-05:00</published><updated>2006-09-27T08:36:04.196-05:00</updated><title type='text'>Hibernate cannot dereference scalar collection element</title><content type='html'>You're getting this because nobody told you about the secret little hibernate 'elements' and 'indices' functions. Yes I know there's 1001 tutorials/books/etc on how to creating a mapping file with lists or sets or maps. But no, no of course it wouldn't be usefull to put in said tutorials a small hint as to how one actually queries these collections.&lt;br /&gt;&lt;br /&gt;from the hib docs:&lt;br /&gt;"&lt;br /&gt;from Player p where 3 &gt; all elements(p.scores)&lt;br /&gt;from Show show where 'fizard' in indices(show.acts)&lt;br /&gt;"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-25644640360589938?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/25644640360589938/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=25644640360589938' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/25644640360589938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/25644640360589938'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2006/09/hibernate-cannot-dereference-scalar.html' title='Hibernate cannot dereference scalar collection element'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-4299467913867893609</id><published>2006-09-25T16:15:00.000-05:00</published><updated>2006-09-25T16:28:49.678-05:00</updated><title type='text'>Old office. New office.</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger2/3415/1201/1600/IMG_0510.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger2/3415/1201/320/IMG_0510.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;First the old office. A study in comparative cultures and attitudes towards ourselves. Notice the wall of failed build CD's. Notice how being haunted by past failures in this environment seems to make sense. &lt;br /&gt;&lt;br /&gt;Notice the smiley face mug near my hand. Notice the soothing stress balls. Notice the paper behind my head, Keller's recipe for the best roast chicken ever. A priceless document scavenged from the bowels of the Internet and the only real treasure one can expect to find in cubicle-ville.&lt;br /&gt;&lt;br /&gt;Notice the shirt that says DREAM contrasted with the general lack of dreams..&lt;br /&gt;&lt;br /&gt;Ok, enough of that. &lt;br /&gt;&lt;br /&gt;&lt;P&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger2/3415/1201/1600/IMG_1548.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger2/3415/1201/320/IMG_1548.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;Now the new office.&lt;br /&gt;&lt;br /&gt;Mark, you'll notice that even without stepping out the door there is much fall goodness to be had here. But your reminder does not go unheeded and is well appreciated. I won't forget to go find the real mountains too. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger2/3415/1201/1600/IMG_1549.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger2/3415/1201/320/IMG_1549.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;This is the conference room. Still 1-man show so we don't have to worry about OSHA regulations for cliff-side offices.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger2/3415/1201/1600/IMG_1550.jpg"&gt;&lt;img style="float:left; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger2/3415/1201/320/IMG_1550.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;Leisure room. Sadly no dart board. You can't have everything.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-4299467913867893609?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/4299467913867893609/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=4299467913867893609' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/4299467913867893609'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/4299467913867893609'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2006/09/old-office-new-office.html' title='Old office. New office.'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-3149799115372854825</id><published>2006-09-09T12:37:00.000-05:00</published><updated>2006-09-09T12:53:40.614-05:00</updated><title type='text'>Plea to the CSS Gods</title><content type='html'>oh css gods why have you forsaken me!&lt;br /&gt;&lt;br /&gt;So css is the one true path. fine. I don't much care, but fine. I'll go with your standard. &lt;br /&gt;&lt;br /&gt;Great, DIV's. I can make little boxes wherever I want coolio. Let's try to little 2 little red boxes, ten pixel on the side, touching corners. Easy right?&lt;br /&gt;&lt;br /&gt;&amp;lt;div style="background-color: red; position: absolute; left: 200px; top: 200px; width: 10px; height: 10px; padding: 0px; padding-right: 0px;"/&amp;gt;&lt;br /&gt;&amp;lt;div style="background-color: red; position: absolute; left: 210px; top: 210px; width: 10px; height: 10px; padding: 0px; padding-right: 0px;"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Whoa! Those corners aren't even close!&lt;/span&gt;&lt;br /&gt;(At (200,200) on your screen there's a little red box. At (410,410) there's another)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;hmm.. let me bash my head into a wall for 20 minutes. ok, that's better. how about:&lt;br /&gt;&lt;br /&gt;&amp;lt;div style="background-color: black; position: absolute; left: 250px; top: 250px; width: 10px; height: 10px; padding: 0px; padding-right: 0px;"&lt;span style="font-weight:bold; color: red"&gt;&lt;span style="font-style:italic;"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&amp;lt;div style="background-color: black; position: absolute; left: 260px; top: 260px; width: 10px; height: 10px; padding: 0px; padding-right: 0px;"&lt;span style="font-weight:bold; color: red"&gt;&lt;span style="font-style:italic;"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;ahhh... yes. I see. Closing the tag with another tag is the One True Path(tm)  Shame on you who would assume that the way in which you close your tag should be completely friggin irrelevant to how it's layed out on the screen.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: black; position: absolute; left: 250px; top: 250px; width: 10px; height: 10px; padding: 0px; padding-right: 0px;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="background-color: black; position: absolute; left: 260px; top: 260px; width: 10px; height: 10px; padding: 0px; padding-right: 0px;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;can anybody explain this to me?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: red; position: absolute; left: 400px; top: 400px; width: 10px; height: 10px; padding: 0px; padding-right: 0px;" &gt; &lt;/div&gt;&lt;br /&gt;&lt;div style="background-color: red; position: absolute; left: 410px; top: 410px; width: 10px; height: 10px; padding: 0px; padding-right: 0px;" &gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-3149799115372854825?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/3149799115372854825/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=3149799115372854825' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/3149799115372854825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/3149799115372854825'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2006/09/plea-to-css-gods.html' title='Plea to the CSS Gods'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-2065913229410581427</id><published>2006-09-01T09:37:00.000-05:00</published><updated>2006-09-01T09:45:48.103-05:00</updated><title type='text'>GWT NestingCallbacks</title><content type='html'>Spent some time playing around with creating GWT callback "nests". Basically the idea was to have something where you could add a bunch of AsyncCallbacks into a queue, then have them fire each other off. &lt;br /&gt;&lt;br /&gt;Basically, I wanted a blocking async call, but after reading some very good posts about this found that it's just not possible due to some javascript thread things. Moreover, it really avoids the whole point of async GUIs. (Granted, I'd planned to have a cache, so that it was unlikely to need the nested calls to be truly asynchronous, blah blah...) &lt;br /&gt;&lt;br /&gt;Anyway I solved my problem another way, but I may play around with these nested callbacks some more. I liked the idea of big asynchronous monsters rolling around in my code.&lt;br /&gt;&lt;br /&gt;Man I'm enjoying GWT. &lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;public class NestingCallbacks {&lt;br /&gt;&lt;br /&gt; List nest = new ArrayList();&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;  * add it to the beginning&lt;br /&gt;  * @param nestable&lt;br /&gt;  */&lt;br /&gt; public void addToNest(NestedStdAsyncCallback nestable){&lt;br /&gt;  nest.add(0, nestable);&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; public void doIt(){&lt;br /&gt;&lt;br /&gt;  System.out.println("doIt");&lt;br /&gt;  NestedStdAsyncCallback cur = (NestedStdAsyncCallback) nest.get(0);&lt;br /&gt;  nest.remove(0);&lt;br /&gt;  cur.run(nest);&lt;br /&gt;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;public class NestedStdAsyncCallback {&lt;br /&gt;&lt;br /&gt; private AsyncCallback callback;&lt;br /&gt;&lt;br /&gt; public NestedStdAsyncCallback(AsyncCallback callback) {&lt;br /&gt;  super();&lt;br /&gt;  this.callback = callback;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; public void run(List nest) {&lt;br /&gt;  &lt;br /&gt;  System.out.println("run ");&lt;br /&gt;  &lt;br /&gt;  callback.onSuccess(null);&lt;br /&gt;  &lt;br /&gt;  if(nest.size() &gt; 0){&lt;br /&gt;   System.out.println("nest size now "+nest.size());&lt;br /&gt;   NestedStdAsyncCallback next = (NestedStdAsyncCallback) nest.get(0);&lt;br /&gt;   nest.remove(0);&lt;br /&gt;   next.run(nest);&lt;br /&gt;  }else{&lt;br /&gt;   System.out.println("end of the line");&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt; }&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-2065913229410581427?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/2065913229410581427/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=2065913229410581427' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/2065913229410581427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/2065913229410581427'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2006/09/gwt-nestingcallbacks.html' title='GWT NestingCallbacks'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-8362495211646535342</id><published>2006-08-29T22:37:00.000-05:00</published><updated>2006-08-29T23:17:56.184-05:00</updated><title type='text'>Seam's audacious approach</title><content type='html'>Well, &lt;a href="http://www.theserverside.com/news/thread.tss?thread_id=41903"&gt;this thread&lt;/a&gt; on tss pointed me to a pretty damn interesting podcast from our friend Gavin about Seam. Pretty amazing actually.&lt;br /&gt;&lt;br /&gt;Getting around the fact that Gavin can be something of an unrestrained ass, he is also clearly clairvoyant about some things. In fact, if I were to offer up my own flash of amateur psychology (and what else are blogs good for?) I'd say that it's simple audacity that makes Gavin King tick, and that that's why he's been so successful at shifting the landscape. If you're not a fan of his, you should listen to this too. While I myself have cursed Hibernate &amp; the sometimes brusque forum, it is understandable that you'd be a bit frustrated the 6000th time somebody pisses &amp; moans that the free framework you developed doesn't serialize the entire DB and send it over to fix your lazy load problem.&lt;br /&gt;&lt;br /&gt;Coming into this podcast I was really skeptical of annotations. They seemed like a separation of concerns nightmare waiting to happen. Deployment specific tags just waiting to be incompatible. I say give me the nice clean lines of a pure &amp; simple POJO. &lt;br /&gt;&lt;br /&gt;But now I'm not so sure.&lt;br /&gt;&lt;br /&gt;There's a real point to be made that my POJO's are really nothing without Spring's DI, and the rest of my Spring MVC web tier is of course tied closely to SpringMVC. In fact there's nothing really wrong with this either, and I've found Hibernate/SpringMVC/Freemarker to be an eminently workable combo. Plugging Acegi in was cake &amp; my simple GWT wrapping site with user administration was the work of an afternoon. &lt;br /&gt;&lt;br /&gt;Moreover, there sure was a lot of power in those annotations. And would it be any more embeded and than switching from what I've got now? I do have to disagree with a bit of his disdain for layers however. I really DID switch my database tier out the other day (db4o to hibernate) and the process was lovely. New DAO impl's, new appicationContext-hibernate.xml and... off she goes!   Well, up until GWT bonks on a hibernate PersistantList, but that's for another day.&lt;br /&gt;&lt;br /&gt;The main revelation in the podcast is Gavin's defense of stateful web applications. After some amusing IBM potshots, he really starts to make some sense (interestingly, the more expletives/minute the more sense he seems to make.) The only real issues I've had with Spring MVC have been &lt;br /&gt;&lt;ol&gt;&lt;li&gt;Inefficiencies from not wanting to use the session, because.. well the session was verboten at work due to vapor-concerns about scalability&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Back-Button, refresh, history...&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Lazy Loading, NonUniqueIdentifier etc. exceptions&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Seam's great solution is to just go ahead and use the session, but to introduce the idea of conversational scope. While this is precisely what Spring WebFlow does as well &amp; I could've solved a couple of the problems above more easily with access to the session, I have to admit that Seam's implementation was pretty darn slick. I'd love to hear a good debate about the relative merits of the two (well, a bit flamey, &lt;a href="http://www.theserverside.com/news/thread.tss?thread_id=36617"&gt;but still good&lt;/a&gt;), as well as somebody to rebut Gavin's assertion that stateful session beans are not as unscalable and unworkable as we'd all been led to believe. &lt;br /&gt;&lt;br /&gt;And back to audacity. Finishing up that podcast I really wonder whether being such a... so forthright, about his opinions really leads to more willingness to innovate. I love the Spring project, but I wonder if it will end up too much of a fixed J2EE and not enough of a revolution. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I'd really love to see a little more about Seam's Ajax capabilities. That's on the things to google list. Right now I'd definitely consider Seam vs my Spring MVC for a new traditional web app. However for the project at hand, the guts in GWT land and I wouldn't throw away my ability to manipulate DOM code like a Swing-set for all the component based wonderful-ness on offer. &lt;br /&gt;&lt;br /&gt;Just don't load my site in two tabs at the same time ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-8362495211646535342?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/8362495211646535342/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=8362495211646535342' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/8362495211646535342'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/8362495211646535342'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2006/08/seams-audacious-approach.html' title='Seam&apos;s audacious approach'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-4128598675359754439</id><published>2006-08-17T20:36:00.001-05:00</published><updated>2011-08-01T06:12:04.894-05:00</updated><title type='text'>java MD5 password hash</title><content type='html'>So you want to hash a password, store in the DB and go on your merry way. Not being wise in the way of hashing you might think that a simple google for "java MD5 hash" will do you right, but you'd be wrong. In fact it has a good shot of leading you to something like the following (at least 2 examples that I found), which has a cute little bug lurking beneath the surface.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;private String hashPassword(String password) {&lt;br /&gt; String hashword = null;&lt;br /&gt;  try {&lt;br /&gt; MessageDigest md5 = MessageDigest.getInstance("MD5");&lt;br /&gt; md5.update(password.getBytes());&lt;br /&gt; BigInteger hash = new BigInteger(1, md5.digest());&lt;br /&gt; hashword = hash.toString(16);&lt;br /&gt;  &lt;br /&gt;      } catch (NoSuchAlgorithmException nsae) {&lt;br /&gt;&lt;br /&gt;      }&lt;br /&gt;   return hashword;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;hashPassword("test")-&gt;&lt;br /&gt; 98f6bcd4621d373cade4e832627b4f6&lt;br /&gt;&lt;br /&gt;but the right answer is:&lt;br /&gt;098f6bcd4621d373cade4e832627b4f6&lt;br /&gt;(note the '0')&lt;br /&gt;&lt;br /&gt;The trick of course is that the integer 045 == 45, even in bigInteger land.&lt;br /&gt;&lt;br /&gt;A simple&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;return pad(hashword,32,'0');&lt;br /&gt;private String pad(String s, int length, char pad) {&lt;br /&gt;  StringBuffer buffer = new StringBuffer(s);&lt;br /&gt;  while (buffer.length() &lt; length) {&lt;br /&gt; buffer.insert(0, pad);&lt;br /&gt;  }&lt;br /&gt; return buffer.toString();&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;will sort you.&lt;br /&gt;&lt;br /&gt;Glad I chose "test" as a test password or I might have found this at a more unfortunate juncture as the other 3 test users I created worked without a hitch. Amazing to think that in this day and age, blindly copying code from the Internet into you app is still an imperfect method of application development.&lt;br /&gt;&lt;br /&gt;Of course if you copy &amp; paste this code, well, that's totally different. It's been tested.. er.. well visually inspected for at least.. um.. a minute.&lt;br /&gt;&lt;br /&gt;OMG there's a new &lt;a href="http://www.amazon.com/gp/product/0061977969/ref=as_li_ss_tl?ie=UTF8&amp;tag=jesbl-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399373&amp;creativeASIN=0061977969"&gt;Neal Stephenson book&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=&amp;l=as2&amp;o=1&amp;a=0061977969&amp;camp=217145&amp;creative=399373" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-4128598675359754439?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/4128598675359754439/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=4128598675359754439' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/4128598675359754439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/4128598675359754439'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2006/08/java-md5-password-hash.html' title='java MD5 password hash'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-4662240414769152138</id><published>2006-08-16T14:31:00.000-05:00</published><updated>2006-08-16T14:33:07.208-05:00</updated><title type='text'>NoSuchRequestHandlingMethodException for your MultiActionController?</title><content type='html'>Make sure you're returning the right type of ModelAndView from your MultiActionController.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;import org.springframework.web.servlet.ModelAndView; --good-- &lt;br /&gt;import org.springframework.web.portlet.ModelAndView; --bad, and very frustrating--&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-4662240414769152138?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/4662240414769152138/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=4662240414769152138' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/4662240414769152138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/4662240414769152138'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2006/08/nosuchrequesthandlingmethodexception.html' title='NoSuchRequestHandlingMethodException for your MultiActionController?'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-115552324260227841</id><published>2006-08-13T21:11:00.000-05:00</published><updated>2006-08-13T21:56:37.206-05:00</updated><title type='text'>Thoughts GWT, SCM, etc</title><content type='html'>So just slammed into subversive's:&lt;br /&gt;&lt;a href="http://forums.polarion.org/viewtopic.php?t=313&amp;postdays=0&amp;postorder=asc&amp;start=15"&gt;170002: Unknown authorization method&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;after switching my project over from subclipse 20 minutes before since I'd become totally fed up with strange 'this directory is already in the repository' comments and general arcane error messages that must be cleared with oddly named menuitems. Do I lose cool points for saying I'd be more than happy to go back to cvs? I understand the svn arguments, but really scm is 99% the eclipse plugin and 1% source code management theory for me. &lt;br /&gt;&lt;br /&gt;Thankfully Igor at Polarion seems to have sorted subversive in 1.0.1...  Oh except for the fact that 1.0.1 seems to rogered everything and now it tries to connect to svn%20ssh instead of svn+ssh. Sweet. He says it'll be fixed Friday. I think that was 2 days ago.&lt;br /&gt;&lt;br /&gt;happily reverting subversive 1.0.0RC2 seems to have worked, although it did delete all of my repository information &amp; disconnect me automatically for all of my projects without asking nicely... &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Thankfully GWT continues to be a favorite bauble. Most of my complaints are based simply on my impatience. Integrating Acegi is going allright, although it has exposed some tradeoffs that are important to keep in mind. If you'd like you com.myco.client.domain.User to implement acegi's UserDetail... you're in for a bit of frustration as even once you figure out that you need to have the source included in you 3rd party acegi.jar, you're still stuck with futsing with module.xml's and inheritance etc that will soon make you run for cover.&lt;br /&gt;&lt;br /&gt;com.myco.server.domain.ServerSideUser extends User has sorted me for now, although the proliferation of workaround code continues. &lt;br /&gt;&lt;br /&gt;Starting to poll for developers to enlist in aid of my new project. This is not a dig on my friends, but I'm starting to wish I'd spent a bit more time playing video games in college and getting to know the code kittens. These artsy well rounded types can program worth a damn.&lt;br /&gt;&lt;br /&gt;-j&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-115552324260227841?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/115552324260227841/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=115552324260227841' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/115552324260227841'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/115552324260227841'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2006/08/thoughts-gwt-scm-etc.html' title='Thoughts GWT, SCM, etc'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-115348480613685029</id><published>2006-07-21T07:13:00.000-05:00</published><updated>2006-08-05T20:25:09.096-05:00</updated><title type='text'>Thoughts on the GWT</title><content type='html'>Cons:&lt;br /&gt;No java 1.5 generics feels a bit like someone killed my pet fish. (Note: this is only a little like having your puppy killed.) Really though, I had no idea how nauseous untyped collections make me. &lt;br /&gt;&lt;br /&gt;Serialization is still definitely a bit rough. I've been converting everything to lists before it goes over the wire and this has made things better, but I will be very stoked when a release come out that fixes this and I can rip out all manner of Set-&gt;Array-&gt;Set code. Some people seem to claim it already works, but all I know is that Set s = new HashSet(); explodes serialization for me.&lt;br /&gt;&lt;br /&gt;Also, I wanted my domain object to have a Widget property, but I think I'm going to have to back down on this one. Specifying transient worked as advertised, but then when the object is deserialized on the server it tries to create the widget and I get a "GWT has not been properly initialized" issue. Some insightful comments about this type of thing &lt;a href="http://groups.google.com/group/Google-Web-Toolkit/browse_frm/thread/30e0cfe26b888c6b/2a6b64907ec4f91d?lnk=gst&amp;q=GWT+has+not+been+properly+initialized+&amp;rnum=3#2a6b64907ec4f91d"&gt;here&lt;/a&gt;.&lt;br /&gt;There are definitely some rough edges. &lt;br /&gt;&lt;br /&gt;Lastly, while reports of Spring integration abound I would warn you not to accept this as given for the moment. The amount of head banging into odd errors is on the high end of the scale, and you'll soon find yourself connecting to svn repositories on a laptop in Poland in the vain hope that you'll be able to make sense of someone random Poles framework.&lt;br /&gt;&lt;br /&gt;Just in general, my attempts to integrate with just about anything else have been pretty rough. Even deploying to something out of hosted mode brings lots of gotchas that will make you pine for "mvn package" like a baby. They're mentioning maven usage for the next release, but let's all cross fingers for maven 2, eh?&lt;br /&gt;&lt;br /&gt;Pros:&lt;br /&gt;In general though, the speed of development is astounding. Well, maybe not so astounding if you're used to writing desktop apps where creating a functional rich GUI is pretty easy, but compared to anything else out there.. I feel like this is the future plain &amp; simple. I looked at the new Dojo release yesterday and, while I would have been interested a couple weeks ago... now it just doesn't thrill me at all. Scriptaculous integration is super easy, so you get all your fun tricks. If all you need is a couple auto-completes I think rails or grails, or spring mvc &amp; scriptaculous are all lovely choices. The second you start thinking about DOM manipulation though, despite all the nice looking MochiKit type things, I just can't imagine not giving GWT a shot. &lt;br /&gt;&lt;br /&gt;In combination with db4o I can't imagine a faster way to get a web 2.0 app up and running. We'll see how long db4o makes it as our db of choice, since I read disconcerting things about max ~10 requests/sec, but I promise you you'll fall out of your chair the first time you just call db.set(myReallyComplexObj) and everything works like a charm.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-115348480613685029?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/115348480613685029/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=115348480613685029' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/115348480613685029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/115348480613685029'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2006/07/thoughts-on-gwt.html' title='Thoughts on the GWT'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-114956493939610871</id><published>2006-06-05T21:51:00.000-05:00</published><updated>2006-06-05T22:35:39.443-05:00</updated><title type='text'>google getting sloppy</title><content type='html'>or have they always been? I forget?&lt;br /&gt;&lt;br /&gt;So I go to  check out &lt;a href="http://www.google.com/reader/"&gt;Google Reader&lt;/a&gt;... Not that I don't love my sage, but when the 500 lb. gorilla dances... um... you dance with it? I'm not really sure where I was going with that. It's all getting a bit graphic.&lt;br /&gt;&lt;br /&gt;Ok hmm importing a list... ok it wants OPML fine, never heard of it. And sage? Hell's yeah, export to OPML. Now just import into google...  and kabam. Very not happy. &lt;br /&gt;&lt;br /&gt;Ok, we're back from Google message's temporary lapse. Cool, I can mouse scroll through the list... but it doesn't select anything. hmm. Maybe they're "&lt;a href="https://gettingreal.37signals.com/"&gt;Getting Real&lt;/a&gt;" &amp; getting the product out there, bugs be damned.&lt;br /&gt;&lt;br /&gt;Overall I guess it's allright. Getting my news reader away from machine dependencies is good, although I'm mostly just happy that I found the import/export in sage. I like my information all layed out before me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-114956493939610871?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/114956493939610871/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=114956493939610871' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/114956493939610871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/114956493939610871'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2006/06/google-getting-sloppy.html' title='google getting sloppy'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-114944298052818517</id><published>2006-06-04T12:41:00.000-05:00</published><updated>2006-11-19T21:49:05.987-05:00</updated><title type='text'>Kundera</title><content type='html'>"It would be senseless for the author to try to convince the reader that his character once actually lived. They were not born of a mother's womb; they were born of a stimulating phrase or two or from a basic situation. tomas was born of the saying "Einmal ist keinmal." Tereza was born of the rumbling of a stomach."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-114944298052818517?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/114944298052818517/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=114944298052818517' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/114944298052818517'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/114944298052818517'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2006/06/kundera.html' title='Kundera'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-114918740099727338</id><published>2006-06-01T13:26:00.000-05:00</published><updated>2007-11-08T11:48:00.507-05:00</updated><title type='text'>Alternatives to Advanced Configuration of the Spring MVC Framework</title><content type='html'>So I read a good article &lt;a href="http://www.onjava.com/pub/a/onjava/2006/03/22/advanced-spring-configuration.html?page=1"&gt;Advanced Configuration of the Spring MVC Framework&lt;/a&gt; and his final solution is a whole bunch of &lt;span style="font-weight:bold;"&gt;applicationContext-somehost.com.xml&lt;/span&gt; configuration files. &lt;br /&gt;&lt;br /&gt;Hmm... it addresses the problem, but how about we just add the hostname into the properties file and append the hostname before we get it?&lt;br /&gt;&lt;br /&gt;ok, ok, it screws with some assumptions about what a properties file is, but it deploys on as many hosts as you like, with changes limitted to this one file.&lt;br /&gt;&lt;br /&gt;&lt;div class="alt2" style=""&gt;&lt;br /&gt;&lt;pre style="background-color: white; border: 1px inset ; margin: 0px; padding: 6px; overflow: auto; width: 640px; height: 350px; text-align: left;" dir="ltr" class="alt2"&gt;server.jdbc.user=live_user&lt;br /&gt;server.jdbc.url=jdbc:postgresql://db.host.com:5432/db&lt;br /&gt;server.magic.file.location=/var/magic_file&lt;br /&gt;devel.jdbc.user=devel_user&lt;br /&gt;devel.jdbc.url=jdbc:postgresql://devel-db.host.com:5432/db&lt;br /&gt;devel.magic.file.location=c:\\var\magic_file&lt;br /&gt;&lt;br /&gt;my.property=some other prop&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;bean id="propertyConfigurer"&lt;br /&gt;  class="com.util.spring.HostPrecedingPropertyPlaceholderConfigurer"&amp;gt;&lt;br /&gt;  &amp;lt;property name="location" value="classpath:config.properties" /&amp;gt;&lt;br /&gt;&amp;lt;/bean&amp;gt;&lt;br /&gt;&amp;lt;bean id="dataSource"&lt;br /&gt;  class="com.mchange.v2.c3p0.ComboPooledDataSource"&lt;br /&gt;  destroy-method="close"&amp;gt;&lt;br /&gt;  &amp;lt;property name="driverClass" value="${jdbc.driverClass}" /&amp;gt;&lt;br /&gt;  &amp;lt;property name="jdbcUrl" value="${jdbc.url}" /&amp;gt;&lt;br /&gt;  &amp;lt;property name="user" value="${jdbc.user}" /&amp;gt;&lt;br /&gt;  &amp;lt;property name="password" value="${jdbc.password}" /&amp;gt;  &lt;br /&gt; &amp;lt;/bean&amp;gt;&lt;br /&gt;&lt;br /&gt;package com.util.spring;&lt;br /&gt;&lt;br /&gt;import java.net.InetAddress;&lt;br /&gt;import java.net.UnknownHostException;&lt;br /&gt;import java.util.Properties;&lt;br /&gt;&lt;br /&gt;import org.apache.log4j.Logger;&lt;br /&gt;import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * HostPrecedingPropertyPlaceholderConfigurer&lt;br /&gt; * &lt;br /&gt; * Extends PropertyPlaceholderConfigurer to insert $hostname.property&lt;br /&gt; * &lt;br /&gt; * sample properties file:&lt;br /&gt; * &lt;br /&gt; *  server.jdbc.user=live_user&lt;br /&gt; *  server.jdbc.url=jdbc:postgresql://db.host.com:5432/db&lt;br /&gt; *  server.magic.file.location=/var/magic_file&lt;br /&gt; *&lt;br /&gt; *  devel.jdbc.user=devel_user&lt;br /&gt; *  devel.jdbc.url=jdbc:postgresql://devel-db.host.com:5432/db&lt;br /&gt; *  devel.magic.file.location=c:\\var\magic_file&lt;br /&gt; *    &lt;br /&gt; *  my.property=a property referenced through a method besides HostPrecedingPropertyPlaceholderConfigurer&lt;br /&gt; * &lt;br /&gt; *  &amp;lt;bean id="propertyConfigurer"&lt;br /&gt; *  class="com.util.spring.HostPrecedingPropertyPlaceholderConfigurer"&amp;gt;&lt;br /&gt; *  &amp;lt;property name="location" value="classpath:config.properties" /&amp;gt;&lt;br /&gt; * &amp;lt;/bean&amp;gt;&lt;br /&gt; *&lt;br /&gt; * &amp;lt;bean id="dataSource"&lt;br /&gt; *  class="com.mchange.v2.c3p0.ComboPooledDataSource"&lt;br /&gt; *  destroy-method="close"&amp;gt;&lt;br /&gt; *  &amp;lt;property name="driverClass" value="${jdbc.driverClass}" /&amp;gt;&lt;br /&gt; *  &amp;lt;property name="jdbcUrl" value="${jdbc.url}" /&amp;gt;&lt;br /&gt; *  &amp;lt;property name="user" value="${jdbc.user}" /&amp;gt;&lt;br /&gt; *  &amp;lt;property name="password" value="${jdbc.password}" /&amp;gt;  &lt;br /&gt; * &amp;lt;/bean&amp;gt;&lt;br /&gt; * &lt;br /&gt; * &lt;br /&gt; * @author Jeff Dwyer (&lt;a href="http://jdwyah.blogspot.com"&gt;blog&lt;/a&gt;)&lt;br /&gt; */&lt;br /&gt;public class HostPrecedingPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {&lt;br /&gt; &lt;br /&gt; private static Logger log = Logger.getLogger(HostPrecedingPropertyPlaceholderConfigurer.class);&lt;br /&gt;&lt;br /&gt; protected String resolvePlaceholder(String placeholder, Properties props) {&lt;br /&gt;  try {&lt;br /&gt;   return props.getProperty(InetAddress.getLocalHost().getHostName()+"."+placeholder);&lt;br /&gt;  } catch (UnknownHostException e) {&lt;br /&gt;   log.warn(e);&lt;br /&gt;   return null;&lt;br /&gt;  }&lt;br /&gt; } &lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;UPDATE&lt;/span&gt; So I've noticed that this was a pretty popular entry &amp; I thought I should update it to &lt;a href="http://jdwyah.blogspot.com/2006/12/updated-spring-configuration.html"&gt;what I'm actually doing now&lt;/a&gt;. I've put in a little if/else &amp; regex that replaces "HOST*" with the hostname. So now my properties still look like:&lt;br /&gt;&lt;br /&gt;server.jdbc.url=jdbc:postgresql://db.host.com:5432/db&lt;br /&gt;devel.jdbc.url=jdbc:postgresql://devel.host.com:5432/db&lt;br /&gt;&lt;br /&gt;and they're referenced by ${HOST.jdbc.url}&lt;br /&gt;&lt;br /&gt;This way you don't need to copy all the properties for every machine, just the HOST-specific ones. This is all working very well in production and makes scm of properties files much much easier, alleviating the confusing deploy time errors when everything seems broken and you realize someone has checked in development properties which override the correct server properties.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-114918740099727338?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/114918740099727338/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=114918740099727338' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/114918740099727338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/114918740099727338'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2006/06/alternatives-to-advanced-configuration.html' title='Alternatives to Advanced Configuration of the Spring MVC Framework'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-114772835082908405</id><published>2006-05-15T16:25:00.000-05:00</published><updated>2006-06-01T14:09:40.036-05:00</updated><title type='text'>Travels, travails, freemarker</title><content type='html'>&lt;h2&gt;Spring MVC, freemarker boolean form check.&lt;/h2&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;#macro booleanFormCheck path attributes=""&amp;gt;&lt;br /&gt; &amp;lt;@spring.bind path/&amp;gt;&lt;br /&gt;    &amp;lt;input type="checkbox" id="${spring.status.expression}" name="${spring.status.expression}" value="true"        &lt;br /&gt;        &amp;lt;#if spring.stringStatusValue == "true"&amp;gt;checked="checked"&amp;lt;/#if&amp;gt; ${attributes}&lt;br /&gt;    &amp;lt;@spring.closeTag/&amp;gt;&lt;br /&gt; &amp;lt;#assign hiddenName = "_"+spring.status.expression/&amp;gt;&lt;br /&gt; &amp;lt;input type="hidden" name="${hiddenName}"&amp;gt;&lt;br /&gt;&amp;lt;/#macro&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;First off, I must be the 100th person to write this. A little boolean formCheck that puts the hidden field in for you? spring.ftl is well and good, but how about a new bloatedSpring.ftl with lots of goodies like this one.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Printing a date that might be null in freemarker&lt;/h2&gt;&lt;br /&gt;Sounds easy right? Well, I'm sure it is, but &lt;span style="font-style:italic;"&gt;damn&lt;/span&gt; if I didn't spend a half hour massaging my temples. (oh and I'm positive there's a lovely way to do this in place, but I'll be damned if I'm going to spend any more time looking. &lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;#macro printDate date=""&amp;gt;&lt;br /&gt;     &amp;lt;#if date?has_content&amp;gt;&lt;br /&gt; ${date?date?string.short}&lt;br /&gt;     &amp;lt;#else&amp;gt;&lt;br /&gt; None Provided&lt;br /&gt;     &amp;lt;/#if&amp;gt;&lt;br /&gt;&amp;lt;/#macro&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Turning a number that's been turned into a string back into a number.&lt;/h2&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;(If the number is greater than 999)&lt;/span&gt;&lt;br /&gt;Right. So it all works fine. You've got a nice drop-down select. Now you (silly thing that you are) want a confirmation page, but rather than telling them they've selected pop-rocks flavor #38, you want to tell them that they've selected flavor "Rasberry Crush", so pop that back in the referenceData and off you go...  &lt;br /&gt;&lt;br /&gt;up until you get to flavor 1000 (or should I say "1,000"). Then you spend a while sitting in front of the people you convinced ot ditch jsp, helplessly trying to change you internationalization settings to take out commas and having simple no luck with ?int and it's ilk... until you find... ?c &lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;#macro printLookup array element&amp;gt;&lt;br /&gt;    &amp;lt;#if element?exists &amp;&amp; element?string == "-1"&amp;gt;&lt;br /&gt;      None Provided&lt;br /&gt;     &amp;lt;#else&amp;gt;&lt;br /&gt;      ${array[element?c]}&lt;br /&gt;     &amp;lt;/#if&amp;gt;&lt;br /&gt;&amp;lt;/#macro&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Happily this also solves other infuriating 9300-&gt;"9300"-&gt;(int)9,300 freemarker bind exception explosions:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;#macro formInputInt path attributes="" fieldType="text" &amp;gt;&lt;br /&gt;    &amp;lt;@spring.bind path/&amp;gt;&lt;br /&gt;    &amp;lt;input type="${fieldType}" id="${spring.status.expression}" name="${spring.status.expression}" value="&amp;lt;#if fieldType!="password"&amp;gt;${spring.status.value?default(0)?c}&amp;lt;/#if&amp;gt;" ${attributes}&lt;br /&gt;    &amp;lt;@spring.closeTag/&amp;gt;&lt;br /&gt;&amp;lt;/#macro&amp;gt;&lt;br /&gt;&amp;lt;#macro formHiddenInputInt path attributes="" &amp;gt;&lt;br /&gt;    &amp;lt;@formInputInt path, attributes, "hidden"/&amp;gt;&lt;br /&gt;&amp;lt;/#macro&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-114772835082908405?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/114772835082908405/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=114772835082908405' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/114772835082908405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/114772835082908405'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2006/05/travels-travails-freemarker.html' title='Travels, travails, freemarker'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-114668507428823501</id><published>2006-05-03T14:30:00.000-05:00</published><updated>2006-05-03T14:46:50.860-05:00</updated><title type='text'>Books - Spring 06  Edition</title><content type='html'>Books aquired:&lt;br /&gt;&lt;UL&gt;&lt;LI&gt;Bully for Brontasaurus, Gould&lt;/LI&gt;&lt;br /&gt;&lt;LI&gt;The collected pdf's of John Searle&lt;/LI&gt;&lt;br /&gt;&lt;/UL&gt;&lt;br /&gt;Books held in hand significantly at bookstore:&lt;br /&gt;&lt;UL&gt;&lt;LI&gt;&lt;a href="http://www.hup.harvard.edu/catalog/L181.html"&gt;Lucretius On the Nature of Things&lt;/a&gt; from the &lt;a href="http://www.hup.harvard.edu/catalog/L181.html"&gt;Loeb&lt;/a&gt;&lt;/LI&gt;&lt;br /&gt;&lt;LI&gt;Cognac, A History&lt;/LI&gt;&lt;br /&gt;&lt;/UL&gt;&lt;br /&gt;Books read:&lt;br /&gt;&lt;UL&gt;&lt;LI&gt;The System of the World, Neal Stephenson&lt;/LI&gt;&lt;br /&gt;&lt;/UL&gt;&lt;br /&gt;&lt;br /&gt;Well, the beast that is the Baroque Series is finalement slew. It is a true testament to a work of fiction that the last 80 pages of your nigh-on 3000 page odyssey are things to savor and nothing at all like the grim dregs of a cup of flip gone wrong. One can only hope that Eliza de la Zeur will return in another time. I am very much unfinished being in love with her.&lt;br /&gt;&lt;br /&gt;The Searle bears explaining I suppose.&lt;br /&gt;&lt;br /&gt;Oh and all apologies to Nick Hornby. My use of your lovely format is intended only for personal use. All other use is expressly unintended and wholy unexpected as you can clearly see by the number of people that frequent this blog.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-114668507428823501?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/114668507428823501/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=114668507428823501' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/114668507428823501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/114668507428823501'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2006/05/books-spring-06-edition.html' title='Books - Spring 06  Edition'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-114557006289414797</id><published>2006-04-20T16:38:00.000-05:00</published><updated>2007-01-23T14:20:29.408-05:00</updated><title type='text'>freemarker sitemesh body onload</title><content type='html'>So you've got a:&lt;br /&gt;&amp;lt;body onload="doMyOnload();"&amp;gt;&lt;br /&gt;&lt;br /&gt;in your freemarker template, but &lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;${body}&lt;br /&gt;&lt;br /&gt;in the decorator blows this away...&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.opensymphony.com/sitemesh/tags.html"&gt;site&lt;/a&gt; mentions &lt;br /&gt;&amp;lt;body onload="&amp;lt;decorator:getProperty name="body.onload" /&amp;gt;"&amp;gt; &lt;br /&gt;but you're not using jsp because you've convinced yourself you're better than that.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So you eventually figure out... &lt;br /&gt;&lt;br /&gt;&amp;lt;body ${page.property["body.onload"]}&amp;gt;&lt;br /&gt;&lt;br /&gt;And you're all set again. Isn't that nice. 29 tabs died to bring you this information. Use it wisely.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;UPDATE&lt;/span&gt; the commenter speaks the truth. I'd switched over at some point but never updated this.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;lt;body onload="${page.properties["body.onload"]?default("")}"&amp;gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-114557006289414797?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/114557006289414797/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=114557006289414797' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/114557006289414797'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/114557006289414797'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2006/04/freemarker-sitemesh-body-onload.html' title='freemarker sitemesh body onload'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-114476509163242583</id><published>2006-04-11T09:10:00.000-05:00</published><updated>2006-04-11T09:18:11.646-05:00</updated><title type='text'>Freemarker Booleans in Beans</title><content type='html'>Note to self, making model beans that you want to use in Freemarker? Make sure them boolean's are java.lang.Boolean (in the docs) and change your getters from isMyBool() to getMyBool() (not in the docs), otherwise it's headscratching time trying to figure out why it can't find your junk.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Expression command.myBooleanis undefined on line 262, column 6 in WEB-INF/freemarker/verify.ftl.&lt;br /&gt;The problematic instruction:&lt;br /&gt;----------&lt;br /&gt;==&gt; if command.myBoolean [on line 262, column 1 in WEB-INF/freemarker/verifyStudy.ftl]&lt;br /&gt;----------&lt;br /&gt;&lt;br /&gt;Java backtrace for programmers:&lt;br /&gt;----------&lt;br /&gt;freemarker.core.InvalidReferenceException: Expression command.myBoolean is undefined on line 262, column 6 in WEB-INF/freemarker/verify.ftl.&lt;br /&gt; at freemarker.core.TemplateObject.assertNonNull(TemplateObject.java:124)&lt;br /&gt; at freemarker.core.Expression.isTrue(Expression.java:145)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Most important though is to get on &lt;a href="http://forum.springframework.org/showthread.php?t=16307"&gt;junit testing your freemarker views&lt;/a&gt;. Getting this all set was such a lovely vindication of sorts for me. Nice tests all the way from the DB to the web? Without this testing the above would've been misery. Now? I just feel pretty much invincible.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-114476509163242583?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/114476509163242583/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=114476509163242583' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/114476509163242583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/114476509163242583'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2006/04/freemarker-booleans-in-beans.html' title='Freemarker Booleans in Beans'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-114229603572094539</id><published>2006-03-13T19:26:00.000-05:00</published><updated>2006-03-24T11:01:07.076-05:00</updated><title type='text'>why I like being a programmer</title><content type='html'>A couple reasons why I like being a programmer:&lt;br /&gt;&lt;br /&gt;&lt;UL&gt;&lt;br /&gt;&lt;LI&gt;There exists a task to deploy your war file to Tomcat. But using the oh so odd configuration of Windows XP &amp; Tomcat 5.5 &amp; Ant 1.6.5 actually trying to run this task just fails, and you don't know why until you find a post called:&lt;br /&gt;&lt;a href="http://blog.exis.com/colin/archives/2005/08/23/i-put-a-spell-on-you-because-youre-mine-aka-why-is-tomcat-holding-onto-jars/"&gt;i-put-a-spell-on-you-because-youre-mine-aka-why-is-tomcat-holding-onto-jars&lt;/a&gt;&lt;br /&gt;&lt;/LI&gt;&lt;br /&gt;&lt;br /&gt;&lt;LI&gt;-First off, you get to be on the cutting edge.&lt;br /&gt;-Even better, you get to buy books written by the actual authors of these opensource packages.&lt;br /&gt;-But most fun is reading about your fellow plebian developers getting smacked down on  public forums by these same developers for not being able to figure stuff out.&lt;br /&gt;&lt;A HREF="http://forum.hibernate.org/viewtopic.php?t=939532&amp;postdays=0&amp;postorder=asc&amp;start=0"&gt;Stop arguing with me, and obey the migration guide!&lt;/A&gt; Down boy!&lt;br /&gt;&lt;/LI&gt;&lt;br /&gt;&lt;br /&gt;&lt;LI&gt;Long winded comparisons of how different web frameworks handle really simple tasks, and no examples anywhere of anyone doing anything half as complex as anything that seems to be of any use. But perhaps that's better described over at the &lt;a href="http://www.jroller.com/page/fate"&gt;Bile Blog.&lt;/a&gt;&lt;br /&gt;&lt;/LI&gt;&lt;br /&gt;&lt;/UL&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-114229603572094539?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/114229603572094539/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=114229603572094539' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/114229603572094539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/114229603572094539'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2006/03/why-i-like-being-programmer.html' title='why I like being a programmer'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-114200900651375463</id><published>2006-03-10T11:33:00.000-05:00</published><updated>2006-03-24T10:48:12.736-05:00</updated><title type='text'>photo splash</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/7289/734/1600/aspen_2006%20%2884%29.jpg"&gt;&lt;img style="margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/7289/734/320/aspen_2006%20%2884%29.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;I swear I had no idea that pink and yellow clashed this much. I assure you I'm taking steps for next season.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/7289/734/1600/aspen_2006%20%284%29.jpg"&gt;&lt;img style="margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/7289/734/320/aspen_2006%20%284%29.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;ALLEZ!!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/7289/734/1600/IMG_1096.jpg"&gt;&lt;img style="margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/7289/734/320/IMG_1096.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;This is the beginning of my in-office vineyard. Don't rain on my parade. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.shearwatersailing.com/images/bridal/EmbraceableHue-1-sm.jpg"&gt;&lt;img style="margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px;" src="http://www.shearwatersailing.com/images/bridal/EmbraceableHue-1-sm.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;I worked on  &lt;a href="http://www.shearwatersailing.com/"&gt;this boat&lt;/a&gt; for an entire summer back in 2000, and I can tell you that I have more experience with varnish &amp; that tap rail than anyone in their right mind should have. And that's not even getting into the joys of repainting the chain locker..  Anyway it looks like somebody  new has purchased her from the pair that I worked for and pushed the marketting up a couple notches. I can't say it's not worth it though, she a pretty great sail and has pretty much spoiled me for life as far as the big boats ae concerned..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-114200900651375463?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/114200900651375463/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=114200900651375463' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/114200900651375463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/114200900651375463'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2006/03/photo-splash.html' title='photo splash'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-113863961502884204</id><published>2006-01-30T11:46:00.000-05:00</published><updated>2006-01-30T11:46:55.056-05:00</updated><title type='text'>The preDickies are back!!</title><content type='html'>The best darn oscar predictions on the whole Internet.&lt;br /&gt;&lt;a href="http://www.geocities.com/tdoscar/"&gt; Tommy's Oscar preDickies&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-113863961502884204?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/113863961502884204/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=113863961502884204' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/113863961502884204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/113863961502884204'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2006/01/predickies-are-back.html' title='The preDickies are back!!'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-113863843928390274</id><published>2006-01-30T11:24:00.000-05:00</published><updated>2006-01-30T11:27:19.326-05:00</updated><title type='text'>Dartmouth Podcasts</title><content type='html'>Wow.&lt;br /&gt;&lt;a href="http://www.dartmouth.edu/~news/features/podcasts/"&gt;Dartmouth Podcasts&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;go alma mater. how hip.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-113863843928390274?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/113863843928390274/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=113863843928390274' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/113863843928390274'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/113863843928390274'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2006/01/dartmouth-podcasts.html' title='Dartmouth Podcasts'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-113829118234362414</id><published>2006-01-26T10:51:00.000-05:00</published><updated>2006-01-30T16:22:02.186-05:00</updated><title type='text'>wilco's experimental sound.</title><content type='html'>here's one thing I'm done with. Experimental ambient sound. &lt;br /&gt;&lt;br /&gt;Wilco 'A Ghost is Born,' track 11 minute.. about 7:00 to 9:00. I'm listening to it right now. Why? I'm mostly scared it's going to hurt my ears. This won a whole bunch of awards for best blah blah of the blah blah. I bet the reviewers skipped this bit though. Track 11, album's almost over... next.&lt;br /&gt;&lt;br /&gt;Is this fit for anything but skipping? Does anyone listen to this track regularly? Hey, put that on? Yeah, groovy. You can't exactly dance to it, but.. I like it. It sounds like.. like.. 'A stoned dude with keyboard effects?' Yeah. Ok fine, the ability to listen to it regularly isn't really a good criteria. I'll grant that. But how about just ever.&lt;br /&gt;&lt;br /&gt;Do I lose artistic legitimacy for not being able to take this? &lt;br /&gt;&lt;br /&gt;Allright, it's still going. I was going to listen to it so that you wouldn't have to, but I'm done. No more suffering for the masses. If you want to know what it sounds like  you'll have to do it your damn self. The bit I listened to sounded a bit like being in a a warehouse with some some weird aliens trying to open a portal into our world or something. You know what I mean. Don't pretend you don't.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Of course I do kinda like this album...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-113829118234362414?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/113829118234362414/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=113829118234362414' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/113829118234362414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/113829118234362414'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2006/01/wilcos-experimental-sound.html' title='wilco&apos;s experimental sound.'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-113711340655462377</id><published>2006-01-12T19:02:00.000-05:00</published><updated>2007-06-28T15:44:07.809-05:00</updated><title type='text'>Affordable luxury</title><content type='html'>So, you work in a cubicle. We'll assume this as granted since who else has the kind of Internet access and free time necessary to find something like this.&lt;br /&gt;&lt;br /&gt;It's winter. There's no sun. There's no window (anymore, but that's a long story). You're tired. You stayed up late. You woke up.. well late, but the point is you're tired. It's a Monday. Or a Thursday. Or really any day. Are there even days anymore? You've been sitting here as long as you can remember.&lt;br /&gt;&lt;br /&gt;That's right kids, it's time for comfort purchasing.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;But some comfort purchases don't really deliver. You buy the English language canon Amazon recommends for you based on your somewhat idealized preferences, but you don't have the time to read these things. Clothes are lovely, but you sit behind a desk. Who are we kidding? We don't need sundresses and yachting wear or even rugged wicking things. We should just wear sweatsuits to work. Or those one piece reflective unitards of the future. Or little yellow and black worker bee suits.&lt;br /&gt;&lt;br /&gt;Point is it's no good buying things that make you wish you weren't there. I mean here. Focus people. You're in your office and that's where you get paid to be.&lt;br /&gt;&lt;br /&gt;But you feel this overwhelming lack in your cubicle. What will fill it? Will anything?&lt;br /&gt;&lt;br /&gt;And this is the part where you should rejoice. Because you're reading this, and I'll tell what to buy. Grado RS-60 headphones.&lt;br /&gt;&lt;br /&gt;Wasn't that easy? Now you want proof I'm sure, and besides you need something to read until they arrive. We'll that's where the Grado's really come into their own. A world wide web (for lack of a better phrase) full of people that spend their lives posting to newsgroups to make you feel better about your purchase. You read reviews, you read anecdotes, you start making snotty references to top of the line Sony headphones.  You get them. You listen. You bathe in the glory of your most excellent purchase.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;But then comes the inevitable fall. Your life has been transformed. Your music tastes are changing. You're changing. Listen to that sound! You can hear everything. Is someone &lt;span style="font-style: italic;"&gt;coughing&lt;/span&gt; in the recording studio? You feel like offering him a lozenge he's so close. Jazz is amazing. Vocalists can be downright naughty. You're practically inside Eric Clapton's strings...    and Bob Dylan. Well, actually Bob Dylan is starting to creep you out a little. If you close you eyes it sounds like his throat may be trying to kill him.&lt;br /&gt;&lt;br /&gt;And yes, amongst these flowers is you downfall. You have another computer at home. You dislike carrying your &lt;span style="font-style: italic;"&gt;cans&lt;/span&gt; (see how cool you've become) around with you. You opt to buy another pair... and you slip into the dark dark world of the audiophile.&lt;br /&gt;&lt;br /&gt;You purchased the SR-60 and it changed your life. Simple, buy another pair of these amazing devices. Hahaa!  MwahHahHah even! Because you're now cognizant of the power of music, you idly let your eyes gaze down the list of available Grado's... 60's... 80's ... 125's start to seem like an option... they make aluminum ones! And wood ones at the top of the line? Wood? Wood! My good god all I we need in life is a pair of Grado RS-1's and the gorgeous little amp they rode into town on!&lt;br /&gt;&lt;br /&gt;But you hold back. You're analytical, quantitative... but this gets you nowhere. "You're among the qualitative people now!" &lt;br /&gt;&lt;br /&gt;But you snap back to reality. SR-60's eh? For beginners. Next? 80 eh? more bass... ok... but what am I missing up there? I'm already hearing things I've never heard in the music before, what else could there be? What else is out there! $150 for the SR-125's is starting to put up warning flags... but what's this? Alessandro MS-1? Who are these masked crusaders? I only buy Grado, but...  &lt;span style="font-style: italic;"&gt;modded&lt;/span&gt; Grados? You mean some Italian man in Chicago buys Grados microwaves them and resells them? The connoisseurs choice you say? Not everyone knows about them? Even your trusty  newsgroups are starting to fail you. Some people write in saying they're the best.. but most are clamoring for information. Where can you even buy them? It's all unclear. Does the grand pooba 'John My Last Name is Grado' endorse them? Is this an underground thing? Slowly, you get the feeling that those who've bought them are too involved in their music to even come to the forum any more.. they've achieved musical Nirvana!! What have you done? What are you waiting for!&lt;br /&gt;&lt;br /&gt;And then they come. What a day. You take them tenderly out of their box. Just like your SR-60's but &lt;span style="font-weight: bold;"&gt;Alessandro&lt;/span&gt;! You can't wait... you plug them in... and your fate begins to tighten around you.&lt;br /&gt;&lt;br /&gt;They sound.. good, great, but now you've got to compare them to the 60's. You listen to the same song, furiously switching between the two. Comparing passages. Is there a difference? You attempt a 'blinded' switch.. you can tell the difference with your eyes closed.&lt;br /&gt;&lt;br /&gt;But the 60's are the winners.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You're desolated. You return to the forum full of sad news, but soon remember your saving grace. You've forgotten the fabled 'burn-in.' You return home and methodically 'burn' them in, leaving them playing at above comfortable volume all night long. The next day is the new big day... no. Wait, yes! There is more bass. Yes. There is truly richer bass. Thank you, oh spirits of the cubicle!&lt;br /&gt;&lt;br /&gt;But this joy and laughter lasts only a little. Your Santana is simply.. muted. You're turning the volume up louder to try to get the fidelity and.. it's starting to just make your ears bleed. A sense of loss starts to set it. You return to the Internet. Searching searching.. The brave souls who seemed to have reached Nirvana now seem like hopeless newbies. Perhaps the man that said these needed to be amped was simply right... you feel like a total shmo.&lt;br /&gt;&lt;br /&gt;But you don't give up.&lt;br /&gt;&lt;br /&gt;Eventually you start noticing the padded part of your cans. The 60's have this bowl shaped thing that exposes everything directly... Your new MS-1's have foam all across the earpiece... You search for pads... And find out just how deep the rabbit hole goes.&lt;br /&gt;&lt;br /&gt;Now you have 15 browser tabs open. The MS-1 shipped with... 'comfies'?!?!  You're outraged. What self respecting Grado owner would possibly substitute sounds for comfort? You're on the warpath. The 60's earpads are bowls.. You find reviews of headphone pads. They claim that Grado's are more effected by pad choice than any other headphone alive. You switch the bowls into the MS-1... and a small tear comes to your eye.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;And you think you're done.&lt;br /&gt;&lt;br /&gt;But you're not.&lt;br /&gt;&lt;br /&gt;Because now you need to buy another set of pads.&lt;br /&gt;&lt;br /&gt;So you just add some bowls to the shopping cart... when you see that there are 'flats' for a whopping $30. $15 more for even less FOAM! You head back to the reviews. Flats are quite simply the gold standard. Bowls are simple not 'it.'&lt;br /&gt;&lt;br /&gt;For some people.&lt;br /&gt;&lt;br /&gt;You learn that a flat alternative is yellow pads from another manufacturer that you'll need to dye, punch holes in and slice yourself. You learn there's a cottage industry in doing these and that their results are even BETTER than the flats, and if those were such a substantial improvements from the bowls...&lt;br /&gt;&lt;br /&gt;You look down at your bowls in disgust. To think that there was a time you enjoyed their sound! You read about reversing them and start listening with them on backwards marveling at your previous stupidity..  You look like an idiot with his headphones on backwards. You go to order the modded pads...&lt;br /&gt;&lt;br /&gt;and their store is closed forever...&lt;br /&gt;&lt;br /&gt;You ebay. You google. You answers.com. There are no answers for questions like these.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-113711340655462377?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/113711340655462377/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=113711340655462377' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/113711340655462377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/113711340655462377'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2006/01/affordable-luxury.html' title='Affordable luxury'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-113595157322834520</id><published>2005-12-30T09:05:00.000-05:00</published><updated>2006-01-02T18:31:14.440-05:00</updated><title type='text'>free audio books? Potter Rocks!</title><content type='html'>&lt;a href="http://www.freeclassicaudiobooks.com/"&gt;free audio classics&lt;/a&gt; pretty trippy really..  text-to-speech of the classics.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://harrypotter.warnerbros.com/hogwarts/dailyprophet/articles/img/HP4_Scene_0035_330.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px;" src="http://harrypotter.warnerbros.com/hogwarts/dailyprophet/articles/img/HP4_Scene_0035_330.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;But Goblet of Fire, my goodness. Friggin AMAZING! 10x better than Narnia, which just seemed to be a 1:40 minute battle sequence, complete with such amazing dramatic moments as having one brother get stabbed when we all know that his sister's got the potion to 'fix all wounds.' How are things like this dramatic? Maybe we'll be forced to watch a scene of her running to come get him? Maybe she'll be waylaid and we'll end up cutting between her and her assailant and his dying body, but guess what I think it'll turn out ok. &lt;br /&gt;&lt;br /&gt;Now option 3 would be for her to give him the potion and then it doesn't work, and then they go find santa and are like 'WTF?' and maybe we can fit another battle in. Like an elf vs man battle. That would be kinda cool.&lt;br /&gt;&lt;br /&gt;But yes, Harry Potter was 10x better. Somebody told me they saw weeping shell shocked kids at the end of their performance. I'm not surprised. But awesome pacing. Awesome directing. Way to make the hard choices and not waste precious time on minutes of quidditch scenes that'll look good in previews.&lt;br /&gt;&lt;br /&gt;Of course I still say I'd sign a promise to go see it twice if they release the next one in 2 parts...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-113595157322834520?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/113595157322834520/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=113595157322834520' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/113595157322834520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/113595157322834520'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2005/12/free-audio-books-potter-rocks.html' title='free audio books? Potter Rocks!'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-113434378393879825</id><published>2005-12-11T18:28:00.000-05:00</published><updated>2005-12-13T17:25:31.356-05:00</updated><title type='text'>backticks!</title><content type='html'>&lt;property name="description" column="`Item Description`"/&gt;&lt;br /&gt;&lt;br /&gt;"There is no way, apart from quoting all table and column names in backticks, to force Hibernate to use quoted identifiers everywhere!"&lt;br /&gt;&lt;br /&gt;now you tell me. Gosh darn postgres. Definitely not a big fan of capitals is postgres.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;What's this? &lt;a href="http://jroller.com/page/habuma?entry=spring_saves_a_life_news"&gt;Spring saves a life&lt;/a&gt;? Is there anything this framework can't do?&lt;br /&gt;wow, what a stud ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-113434378393879825?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/113434378393879825/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=113434378393879825' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/113434378393879825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/113434378393879825'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2005/12/backticks.html' title='backticks!'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-113382710716704656</id><published>2005-12-05T18:44:00.000-05:00</published><updated>2005-12-13T17:24:48.786-05:00</updated><title type='text'>rod johnson's love for the common man</title><content type='html'>Add Spring Capabilities...&lt;br /&gt;Add Hibernate Capabilities...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Class:&lt;br /&gt;&lt;blockquote&gt;public class Knight {&lt;br /&gt; public String name;&lt;br /&gt; public String getName() {&lt;br /&gt;  return name;&lt;br /&gt; }&lt;br /&gt; public void setName(String name) {&lt;br /&gt;  this.name = name;&lt;br /&gt; } &lt;br /&gt; public String toString(){&lt;br /&gt;  return "My name is "+getName();&lt;br /&gt; } &lt;br /&gt;}&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;applicationContext.xml&lt;br /&gt;add:&lt;br /&gt;&lt;blockquote&gt;&amp;lt;bean id="Knight" class="com.wos.test.Knight"&amp;gt;&lt;br /&gt;&amp;lt;property name="name"&amp;gt;&lt;br /&gt;&amp;lt;value&amp;gt;JoJo&amp;lt;/value&amp;gt;&lt;br /&gt;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;lt;/bean&amp;gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;TestApplication:&lt;br /&gt;&lt;blockquote&gt;BeanFactory factory = new XmlBeanFactory(new FileSystemResource(new File("src\\applicationContext.xml")));&lt;br /&gt;Knight k = (Knight) factory.getBean("Knight");&lt;br /&gt;System.out.println(k);&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Gotcha number 1:&lt;/span&gt;&lt;br /&gt;java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool&lt;br /&gt;Problem: No commons-pool-1.2.jar&lt;br /&gt;http://jakarta.apache.org/site/downloads/downloads_commons-pool.cgi&lt;br /&gt;&lt;br /&gt;Add this to WEB-INF/lib/&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Gotcha number 2:&lt;/span&gt;&lt;br /&gt;Add:&lt;br /&gt;BasicConfigurator.configure();&lt;br /&gt;To the test app &amp; add a log4j.properties file to get rid of the log4j warnings.&lt;br /&gt;&lt;br /&gt;And...&lt;br /&gt;&lt;br /&gt;My name is JoJo&lt;br /&gt;&lt;br /&gt;Hotdang.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ok, now we add Hibernate..&lt;br /&gt;&lt;br /&gt;hmm, error that it can't find net.sf.HibernateException &lt;br /&gt;odd considering that we're using hibernate3, which should look like org.hibernate...&lt;br /&gt;&lt;br /&gt;adding hibernate2.jar to the /lib... and we're past that one.&lt;br /&gt;&lt;br /&gt;Now it's:&lt;br /&gt;PropertyAccessExceptionsException (1 errors); nested propertyAccessExceptions are: [org.springframework.beans.TypeMismatchException: Failed to convert property value of type [$Proxy0] to required type [net.sf.hibernate.SessionFactory] for property 'sessionFactory']&lt;br /&gt;&lt;br /&gt;Looks sketchily like another hibernate 2 v 3 problem to me. does spring perhaps not support hibernate 3? Worth checking...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;hah!!!!!&lt;/span&gt; spring "not support hibernate"?? what a joke. Spring is a super star. The problem is MyEclipse. It brings in such a hunk of jar's that it turns out you can get one's that reference different version of hibernate. I think I'll be adding jars myself from now on. &lt;br /&gt;&lt;br /&gt;Now it's all set. And if AbstractTransactionalDataSourceSpringContextTests isn't the  end all expression of Rod Johnson's love for the common man, I don't know what is. &lt;br /&gt;&lt;br /&gt;Just remember to use:&lt;br /&gt;&lt;property name="defaultAutoCommit" value="false" /&gt; &lt;br /&gt;on your datasource, or you could end up doing a bit more comitting than you meant to ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-113382710716704656?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/113382710716704656/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=113382710716704656' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/113382710716704656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/113382710716704656'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2005/12/rod-johnsons-love-for-common-man.html' title='rod johnson&apos;s love for the common man'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-113313236486230286</id><published>2005-11-27T17:50:00.000-05:00</published><updated>2005-11-27T21:15:47.736-05:00</updated><title type='text'>getting down to work</title><content type='html'>So, the real purpose of the new machine was to learn about all the cool new web frameworks work. Yeah, I know it sounds a lot like programming in my free time, doesn't it?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Goals:&lt;span style="font-style:italic;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;1) Write web-app using Spring, Hibernate and either Spring MVC/Spring WebFlow or JSF.&lt;br /&gt;2) A+++ coding practices the whole way, ie Design it in UML &amp; fully TDD. (eep!)&lt;br /&gt;&lt;br /&gt;So let's do it to it!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;span style="font-style:italic;"&gt;Eclipse&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://eclipse.org/downloads/index.php"&gt;Eclipse SDK 3.1.1&lt;/a&gt;&lt;br /&gt;(We'll wait on 3.2 until MyEclipseIDE supports it)&lt;br /&gt;&lt;br /&gt;Unzip to c:\Program Files&lt;br /&gt;Now download:&lt;br /&gt;emf-sdo-xsd-SDK-2.1.1.zip&lt;br /&gt;GEF-ALL-3.1.1.zip&lt;br /&gt;JEM-SDK-1.1.0.1.zip&lt;br /&gt;wtp-1.0M9.zip&lt;br /&gt;&lt;br /&gt;From eclipse.org and extract all of them to Program Files. It's a bit weird, but just make sure that you'll overlay the eclipse directory over the existing eclipse directory so everything lines up and OK the overwrite. It won't hurt anything.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;span style="font-style:italic;"&gt;MyEclipse&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;MyEclipse is pretty darn nice for a lot of things although I haven't fleshed it all out yet. Primarily I like it's Hibernate features and the DBExplorer. Oh, and $29 a year is such a soothing price point. I probably struggle along if it cost $60 but for  the price I'm all theirs.&lt;br /&gt;&lt;br /&gt;Go do the &lt;a href="myeclipseide.org"&gt;myeclipseide.org&lt;/a&gt; download of 4.0. &lt;br /&gt;&lt;br /&gt;Then update to 4.1m1 with the directions &lt;a href="http://www.myeclipseide.com/displayarticle49.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Fire up MyEclipse and everything's good to go...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;span style="font-style:italic;"&gt;CVS&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Can't do anything without CVS right?&lt;br /&gt;cvsnt-2.5.03.2151.msi from &lt;a href="http://cvsnt.org"&gt;cvsnt.org&lt;/a&gt; is the trick for Windows. Pretty easy to setup too. Only trick is putting your repository in an easily backupable place.&lt;br /&gt;&lt;br /&gt;Open the CVS perspective in Eclipse and add the repository. I did a pserver connection although apparently there's some real security issues if you're going over the net. We're not, so bada-boom.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;span style="font-style:italic;"&gt;Postgres Database&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Now a little postgres vs mysql debate... settling on postgres, mostly since we use it with success at work. More comments &lt;a href="http://www.theserverside.com/news/thread.tss?thread_id=37248"&gt;here&lt;/a&gt;...&lt;br /&gt;&lt;br /&gt;Definitely &lt;a href="http://www.postgresql.org/"&gt;8.1 &lt;/a&gt;...&lt;br /&gt;&lt;br /&gt;First off it conflicts with some SSL dll's from CVSNT. Clicking ok and proceeding... We'll see if that comes back to haunt us. Now we run into a bit of confusion with the users. I've ended up with a windows services user with name postgres, but the randomly generated password has characters I can't even find in charmap.exe. Eek. We'll hopefully not a big deal.&lt;br /&gt;&lt;br /&gt;Ok, running pgAdmin III from the start menu and I create a new DB. Darn I wish I remembered more about templates... anyway, template1 and 'go do it', but first I make a new user a\so that we're not doing everything as 'postgres'&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;span style="font-style:italic;"&gt;phpPgAdmin&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Sigh, but now I'd like to use phpPgAdmin. It's darn nice for viewing DB guts. Sadly this means apache and php installs as well. Such is life though, right?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;span style="font-style:italic;"&gt;Apache&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;apache's easy, download the most recent &lt;a href="http://httpd.apache.org/download.cgi"&gt;here&lt;/a&gt;, and do an easy windows install.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;span style="font-style:italic;"&gt;PHP&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;php. Make sure to do the zip package/manual install if you're going to use apache. Other wise no love. php-5.1.0-Win32.zip is what you're looking for. Files &lt;a href="http://php.mirrors.ilisys.com.au/get/php-5.1.0-Win32.zip/from/a/mirror"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Extract this to C:\Program Files\ and change the directory to just be PHP.&lt;br /&gt;&lt;br /&gt;Read the install and we end up copying php.ini-recommended to just php.ini.&lt;br /&gt;Apache2 looks like it'll do the PHPRC environment variable &lt;a href="http://php.mirrors.ilisys.com.au/manual/en/install.windows.manual.php"&gt;for us&lt;/a&gt;...&lt;br /&gt;&lt;br /&gt;Next we add to our apache/conf/httpd.conf file right under the rest of the 'LoadModules'&lt;br /&gt;&lt;br /&gt;PHPINIDir "C:/Program Files/PHP"&lt;br /&gt;LoadModule php5_module "C:/Program Files/PHP/php5apache2.dll"&lt;br /&gt;AddType application/x-httpd-php .php&lt;br /&gt;&lt;br /&gt;Fire up apache by running cmd, and run apache/bin/apache start, and this should go off no problems.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;span style="font-style:italic;"&gt;Back to phpPgAdmin...&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Now, we download the phpPgAdmin-4.0 zip, throw it in htdocs, add a little &lt;br /&gt;&lt;blockquote&gt;&amp;lt;Directory "htdocs/phPgAdmin-4.0"&amp;gt;&lt;br /&gt;&amp;lt;/Directory&amp;gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;to the httpd.conf file...&lt;br /&gt;&lt;br /&gt;goto http://127.0.0.1/phPgAdmin-4.0/index.php and....&lt;br /&gt;&lt;br /&gt;404. Durnit. Clearly I don't understand apache config yet in the 2 minutes I've devoted to it.&lt;br /&gt;&lt;br /&gt;apache/log/errors.log&lt;br /&gt;[Sun Nov 27 18:37:14 2005] [error] [client 127.0.0.1] File does not exist: C:/Program Files/Apache Group/Apache2/htdocs/phPgAdmin-4.0&lt;br /&gt;&lt;br /&gt;but it does. hmm. ahah! notepad.exe saves the day again shows us:&lt;br /&gt;explorer: C:/Program Files/Apache Group/Apache2/htdocs/phPgAdmin&lt;br /&gt;error.log: C:\Program Files\Apache Group\Apache2\htdocs\phpPgAdmin&lt;br /&gt;silly p's.&lt;br /&gt;&lt;br /&gt;now we get:&lt;br /&gt;Your PHP installation does not support PostgreSQL. You need to recompile PHP using the --with-pgsql configure option.&lt;br /&gt;&lt;br /&gt;hah! as if we'd even compiled it to start! fine fine, you can say we should slow down and think of these things before we start, but I say bah. Look how far we've got. (and how insecure we presumably are, but... well no but for that one really.)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;span style="font-style:italic;"&gt;Back to PHP...&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;So, back to the &lt;a href="http://php.mirrors.ilisys.com.au/manual/en/install.windows.manual.php"&gt;php manual install&lt;/a&gt;. Which talks about windows extensions &lt;a href="http://php.mirrors.ilisys.com.au/manual/en/install.windows.extensions.php"&gt;here&lt;/a&gt;...&lt;br /&gt;&lt;br /&gt;And we're off, back to php.ini and it's easy:&lt;br /&gt;change &lt;span style="font-weight:bold;"&gt;extension_dir = "./"&lt;/span&gt; to &lt;br /&gt;&lt;span style="font-weight:bold;"&gt;extension_dir = "c:/Program Files/PHP/ext/"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;and uncomment &lt;br /&gt;&lt;span style="font-weight:bold;"&gt;;extension=php_pgsql.dll&lt;/span&gt;&lt;br /&gt;like so&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;extension=php_pgsql.dll&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;restart apache and.... wahoo! at http://127.0.0.1/phpPgAdmin/index.php PHP enabled.&lt;br /&gt;&lt;br /&gt;Now, login as the 2nd postgres user that we created. I noticed that it said logging in as postgres or admin won't work unless you muck with the .ini more for security reasons. Worksforme.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;span style="font-style:italic;"&gt;DB/Eclipse integration&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Back to MyEclipse and let's plug her in.&lt;br /&gt;Window-&gt;MyEclipse DB Exloperer.&lt;br /&gt;DB Browser-&gt;New DB&lt;br /&gt;Driver Libraries-&gt;New @ PostgreSQL\8.1\jdbc\postgresql-8.1dev-403.jdbc3.jar&lt;br /&gt;ExampleURL: jdbc:postgresql://localhost:5432/yourDB&lt;br /&gt;&lt;br /&gt;Hmm. No love again. Can't login as my DB user. Ahah. Can login as the postgres user. That's unfortunate, but oh well. Looks like we're ready to ORM to our hearts content!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;span style="font-style:italic;"&gt;Tomcat. Since we'll surely want it.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Ok, we'll probably want Tomcat too right? Ok download 5.5 whatever. This install's pretty easy up until the 'Admin application'. If you just do what you'd expect, you end up with a big fat "Tomcat's administration web application is no longer&lt;br /&gt;installed by default. Download and install the "admin"&lt;br /&gt;package to use it."&lt;br /&gt;&lt;br /&gt;So, off to the web and.... &lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Re[5]: tomcat management and Tomcat Administration&lt;br /&gt;Steve Russell, May 27, 2005  [replies:5]&lt;br /&gt;Hi, I was also unable to find any instructions on how to do this, but I managed to integrate the admin package by doing the following:&lt;br /&gt;&lt;br /&gt;1. Unzip jakarta-tomcat-5.5.9-admin.zip &amp; copy conf\ and server\ folders and contents over your own Tomcat conf &amp; server folders (into CATALINA_HOME folder)&lt;br /&gt;2. Copy CATALINA_HOME\server\webapps\admin\admin.xml to CATALINA_HOME\webapps\admin.xml&lt;br /&gt;3. Add a line to CATALINA_HOME\conf\tomcat-users.xml to allow a user to login to the manager &amp; admin modules, e.g.: &lt;user username="administrator" password="p4ssword" roles="admin,standard,manager"/&gt;&lt;br /&gt;4. Restart Tomcat&lt;br /&gt;&lt;br /&gt;HTH.&lt;br /&gt;Steve&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Which fixes it very nicely thank you Steve. Frankly it confuses me a bit about how Tomcat really works, but hey. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;span style="font-style:italic;"&gt;UPDATE&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Disregard the above. It works, but as with most things that work even when you don't quite think they should, it's a bad idea. The real problem is that there's a C:\Program Files\Apache Software Foundation\Tomcat 5.5\webapps\ROOT\admin directory that's stealing your thunder. All you need to do is wack this guy and it'll stop taking priority over the server\admin directory. Yes!&lt;br /&gt;&lt;br /&gt;Back to eclipse, J2EE perspective, servers... add our new tomcat server, which requires going and finding the sdk. Easy enough.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;span style="font-style:italic;"&gt;Conclusion&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;So what do we have now?? Well, we're just about ready to rock. Next up will be design ing the structure in eclipse and then looking at the best ways to instantiate our model in the database and within our spring framework. Hopefully it can go:&lt;br /&gt;&lt;br /&gt; &lt;span style="font-weight:bold;"&gt;UML -&gt; POJO -&gt; Spring Beans -&gt; Hibernate Mapping -&gt; DB tables&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We'll see what the state of the tools are, and how much typing this will take....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-113313236486230286?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/113313236486230286/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=113313236486230286' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/113313236486230286'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/113313236486230286'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2005/11/getting-down-to-work.html' title='getting down to work'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-113276471508009169</id><published>2005-11-23T11:35:00.000-05:00</published><updated>2005-11-23T11:51:55.113-05:00</updated><title type='text'>civilization 4</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.civfanatics.net/~civrules/Article/MiscScreens/NewBoxArt.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 230px;" src="http://www.civfanatics.net/~civrules/Article/MiscScreens/NewBoxArt.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;Well, now you've gone and done it. You've wasted another perfectly good 12 hours of your life playing civ 4.&lt;br /&gt;&lt;br /&gt;A little background though. I'm not a super gamer. I'm a normal guy. I have friends. I get to work by 9. (ok so 9:15, but if I'm too &lt;span style="font-style:italic;"&gt;tired&lt;/span&gt; to work before then it's not useful to be there, right?) Let's list a couple hypothetical things that it would be highly unusual for me to do:&lt;br /&gt;&lt;OL&gt;&lt;br /&gt;&lt;LI&gt;Wake up at 7am&lt;br /&gt;&lt;LI&gt;Get to work at 11:15&lt;br /&gt;&lt;LI&gt;Bail on a cool party&lt;br /&gt;&lt;LI&gt;Go to bed at 4:30am&lt;br /&gt;&lt;LI&gt;Get to work at 11:30&lt;br /&gt;&lt;/OL&gt;&lt;br /&gt;But this is just what civ4 has made me do. Maybe I should put up a neato little graft of my 'get in to work' time. &lt;br /&gt;&lt;br /&gt;Anyway, yes, it certainly has that 'just one more turn' thing. I laughed when I heard that there's now an alarm feature, but perhaps I should look into enabling that.&lt;br /&gt;&lt;br /&gt;The game is probably the best yet, although I've just completed one game so far. There's definitely less focus on micromanagement, which seems like a pretty good thing, although it did leave me feeling a bit like I wasn't in total control. Enough of the game mechanics are different that I had no problem letting the AI sort out which tile improvements to build while I bungled around the interface.&lt;br /&gt;&lt;br /&gt;One thing that I should mention about the first play is that I just sat down and played, no manual, no tutorial. Thankfully I'll be separated from my computer for the thanksgiving weekend and will have a good bit of time to read el manual cover to cover, but for now, the interrface is pretty friendly. &lt;br /&gt;&lt;br /&gt;It may be a while before I even get around to installing Age of Empires, but I'll certainly still fire up doom 3 now and again. It still scares the pants off me, and the glee of playing at just about any res/aliasing/detail mode is pretty nice. Haven't got around to clocking it yet, but it was definitely going so fast I needed to put on the vsync..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-113276471508009169?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/113276471508009169/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=113276471508009169' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/113276471508009169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/113276471508009169'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2005/11/civilization-4.html' title='civilization 4'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-113215796833094027</id><published>2005-11-16T10:43:00.000-05:00</published><updated>2005-11-16T11:19:28.383-05:00</updated><title type='text'>Young, Assured and Playing Pharmacist to Friends</title><content type='html'>&lt;a href="http://www.nytimes.com/2005/11/16/health/16patient.html?pagewanted=1"&gt;Young, Assured and Playing Pharmacist to Friends&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;They ain't joking.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Maybe I'll need some of the drugs mentioned above to stay up late with my fancy new rig on it's way from newegg:&lt;br /&gt;&lt;br /&gt;Case: &lt;a href="http://www.newegg.com/Product/Product.asp?Item=N82E16811129155"&gt;Antec SonataII w/450W PSU&lt;/a&gt;&lt;br /&gt;Mother: &lt;a href="http://www.newegg.com/Product/Product.asp?Item=N82E16813130491"&gt;MSI NF4 K8N NEO4-F&lt;/a&gt;&lt;br /&gt;Processor: &lt;a href="http://www.newegg.com/Product/Product.asp?Item=N82E16819103562"&gt;AMD 64 3800+ Athlon X2&lt;/a&gt;&lt;br /&gt;Memory: &lt;a href="http://www.newegg.com/Product/Product.asp?Item=N82E16820145440"&gt;Corsair D400 ValueSelect 2x512&lt;/a&gt;&lt;br /&gt;Video: &lt;a href="http://www.newegg.com/Product/Product.asp?Item=N82E16814130258"&gt;EVGA NVidia 6800GS&lt;/a&gt;&lt;br /&gt;Audio: &lt;a href="http://www.newegg.com/Product/Product.asp?Item=N82E16829102178"&gt;Audigy 2ZS&lt;/a&gt;&lt;br /&gt;DVD: &lt;a href="http://www.newegg.com/Product/Product.asp?Item=N82E16827106988"&gt;Lite-On DVD&lt;/a&gt;&lt;br /&gt;LCD: &lt;A HREF="http://www.newegg.com/Product/Product.asp?Item=N82E16824116363"&gt;ViewSonic VA902b Black 19" 8ms LCD Monitor&lt;/A&gt;&lt;br /&gt;HD: &lt;a href="http://www.newegg.com/Product/Product.asp?Item=N82E16822148065"&gt;Seagate Barracuda 7200.8 250GB 3.5" Serial ATA150&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Oh, and XP Media Center. I know, I know.&lt;br /&gt;&lt;br /&gt;Should be a frickin screamer though. Nothing better than reading all the user comments about the X2. Half of these crazies have it clocked up to 2.4ghz! Youcha. I think I may try to avoid too much smoke pouring out of her for at least the first little bit.&lt;br /&gt;&lt;br /&gt;Besides, this is a &lt;span style="font-style:italic;"&gt;work&lt;/span&gt; computer. &lt;span style="font-weight:bold;"&gt;Work.&lt;/span&gt; Right. And what's that video card for then, eh? Um... Web browsing. Yes. Web browsing. At this rate I should get to the end of the Internet in no time.&lt;br /&gt;&lt;br /&gt;Anyway the whole list is based on extremetech.com's &lt;a href="http://www.extremetech.com/article2/0,1697,1825693,00.asp"&gt;Bang For The Buck&lt;/a&gt; list. Ok, so not so much 'based on' as ripped straight from.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Seriously though it is for work. Somebody around here's got to figure out web techonologies that have been developed since the turn of the century, and I think it's going to be me. Integrating them into the full production system first go seems unfortunate though, so how about a nice little website project I can throw adsense on and make a little extra cabbage from? Exactly. Oh and yes, I only expect to make about as much as the ads on this blog.&lt;br /&gt;&lt;br /&gt;Which is now up to $1.09 thank you very much. Honestly, who clicks on these adds? Besides you of course. You can keep clicking.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-113215796833094027?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/113215796833094027/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=113215796833094027' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/113215796833094027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/113215796833094027'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2005/11/young-assured-and-playing-pharmacist.html' title='Young, Assured and Playing Pharmacist to Friends'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-113172209919260189</id><published>2005-11-11T10:06:00.000-05:00</published><updated>2005-11-11T10:25:18.650-05:00</updated><title type='text'>times 10.11.05 McClellan malquoted doubleplusungood rectify</title><content type='html'>Winston examined the four slips of paper which he had unrolled. Each contained a message of only one or two lines, in the abbreviated jargon -- not actually Newspeak, but consisting largely of Newspeak words -- which was used in the Ministry for internal purposes. They ran:&lt;br /&gt;&lt;br /&gt;times 10.11.05 McClellan malquoted doubleplusungood rectify&lt;br /&gt;&lt;br /&gt;times 17.3.84 bb speech malreported africa rectify&lt;br /&gt;&lt;br /&gt;times 19.12.83 forecasts 3 yp 4th quarter 83 misprints verify current issue&lt;br /&gt;&lt;br /&gt;times 14.2.84 miniplenty malquoted chocolate rectify&lt;br /&gt;&lt;br /&gt;times 3.12.83 reporting bb dayorder doubleplusungood refs unpersons rewrite fullwise upsub antefiling&lt;br /&gt;&lt;br /&gt;With a faint feeling of satisfaction Winston laid the first message aside. It was an intricate and responsible job and had better be dealt with last. The other four were routine matters, though the second one would probably mean some tedious wading through lists of figures.&lt;br /&gt;&lt;br /&gt;What was need was a simple change of the White House transcript and "That's accurate" could easily become "I don't think that's accurate." The trick would be propogating the change to the Federal News Service...&lt;br /&gt;&lt;br /&gt;Fiction &lt;a href="http://www.online-literature.com/orwell/1984/4/"&gt;1984&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Reality &lt;a href="http://www.salon.com/politics/war_room/index.html?blog=/politics/war_room/2005/11/10/transcript/index.html"&gt;The White House&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Day by day and almost minute by minute the past was brought up to date. In this way every prediction made by the Party could be shown by documentary evidence to have been correct, nor was any item of news, or any expression of opinion, which conflicted with the needs of the moment, ever allowed to remain on record. All history was a palimpsest, scraped clean and reinscribed exactly as often as was necessary. In no case would it have been possible, once the deed was done, to prove that any falsification had taken place.&lt;/blockquote&gt;&lt;br /&gt;&lt;a href="http://www.online-literature.com/orwell/1984/4/"&gt;http://www.online-literature.com/orwell/1984/4/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-113172209919260189?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/113172209919260189/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=113172209919260189' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/113172209919260189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/113172209919260189'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2005/11/times-101105-mcclellan-malquoted.html' title='times 10.11.05 McClellan malquoted doubleplusungood rectify'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-113146736789750359</id><published>2005-11-08T11:29:00.000-05:00</published><updated>2005-11-08T11:29:28.006-05:00</updated><title type='text'>CHUCK NORRIS FACTS:</title><content type='html'>While playing the role of a Texas Ranger, Chuck Norris used live ammunition during all shoot outs. When the director explained that he can't do that, he replied, "Of course I can, I'm Chuck Norris," and roundhouse kicked him in the face.&lt;br /&gt;&lt;br /&gt;If paper beats rock, and rock beats scissors, what beats all 3 at the same time? Answer: Chuck Norris.&lt;br /&gt;&lt;br /&gt;Chuck Norris can make a woman climax by simply pointing at her and saying "booya".&lt;br /&gt;&lt;br /&gt;Chuck Norris puts the m's on M&amp;Ms.&lt;br /&gt;&lt;br /&gt;When his martial arts prowess fails to resolve a situation, Chuck Norris plays dead. When playing dead doesn't work, he plays zombie.&lt;br /&gt;&lt;br /&gt;It is common knowledge that there are three sides to the force: The Light Side, The Dark Side, and Chuck Norris.&lt;br /&gt;&lt;br /&gt;Scientists used to believe that a diamond was the world's hardest substance. But then they met Chuck Norris, who gave them a roundhouse kick to the face so hard, and with so much heat and pressure that the scientists turned into artificial Chuck Norrisi.&lt;br /&gt;&lt;br /&gt;Chuck Norris carries a messenger bag. If you call it a purse, he pulls a baby out of the bag and throws it at you. The baby will blow up upon impact.&lt;br /&gt;&lt;br /&gt;Rather than being birthed like a normal child, Chuck Norris instead decided to punch his way out of his mother's womb. Shortly thereafter he grew a beard.&lt;br /&gt;&lt;br /&gt;God offered Chuck Norris the gift to fly, which he swiftly declined for a +500 gain to roundhouse ability.&lt;br /&gt;&lt;br /&gt;New Years Eve 1998, Chuck Norris was at a party, when the clock struck twelve, instead of kissing someone, Chuck Norris roundhouse kicked everyone at the party. He then proceeded to roundhouse kick everyone on the street, and the whole city. He has been doing this ever since.&lt;br /&gt;&lt;br /&gt;Chuck Norris does not sleep. He waits.&lt;br /&gt;&lt;br /&gt;When Chuck Norris was denied a McGriddle at McDonalds because it was 10:35, He roundhouse kicked the store so hard it became a Wendy's.&lt;br /&gt;&lt;br /&gt;Chuck Norris drinks napalm to quell his heart burn.&lt;br /&gt;&lt;br /&gt;A ducks quack does not echo. Chuck Norris is solely responsible for this phenomenon. When asked why he will simply stare at you grimly.&lt;br /&gt;&lt;br /&gt;Chuck Norris was a hidden playable character on Mortal Kombat 2 on the Sega Genesis.&lt;br /&gt;&lt;br /&gt;Chuck Norris is known for his modesty but readily admits that he is the 8th wonder of the natural world.&lt;br /&gt;&lt;br /&gt;Chuck Norris once tried to defeat Jackie Chan in a game of chess. When Norris lost, he won in life by roundhouse kicking Chan in the side of the face.&lt;br /&gt;&lt;br /&gt;Chuck Norris' roundhouse kick is so powerful, it can be seen from outer space by the naked eye.&lt;br /&gt;&lt;br /&gt;Chuck Norris doesn't believe in Germany.&lt;br /&gt;&lt;br /&gt;Chuck Norris goes to the toilet once a month, if he needs to or not.&lt;br /&gt;&lt;br /&gt;Chuck Norris wears a live rattlesnake as a con dom.&lt;br /&gt;&lt;br /&gt;Chuck Norris can cut onions without crying.&lt;br /&gt;&lt;br /&gt;Chuck Norris burned down an entire forest when he was experimenting with water.&lt;br /&gt;&lt;br /&gt;There are in fact 31 letters of the English Alphabet however only Chuck Norris knows what the extra 5 letters are.&lt;br /&gt;&lt;br /&gt;Occasionally Chuck Norris will call up the Power Rangers just to say hi.&lt;br /&gt;&lt;br /&gt;Chuck Norris has no concept of time, if you go to his house you won't find a single clock. When you ask to leave because it's getting late he stares at you blankly until you sit back down.&lt;br /&gt;&lt;br /&gt;If you want a list of Chuck Norris' enemies just check the extinct species list.&lt;br /&gt;&lt;br /&gt;Chuck Norris has never blinked in his entire life. Never.&lt;br /&gt;&lt;br /&gt;Chuck Norris can believe it's not butter.&lt;br /&gt;&lt;br /&gt;Chuck Norris once ate a banana without having to peel it.&lt;br /&gt;&lt;br /&gt;If Chuck Norris had a dollar and you had a dollar, Chuck would kick your ass and take your dollar.&lt;br /&gt;&lt;br /&gt;When Chuck Norris's wife burned the turkey one Thanksgiving, Chuck said,&lt;br /&gt;&lt;br /&gt;"Don't worry about it honey," and went into his backyard. He came back five minutes later with a live turkey, ate it whole, and when he threw it up a few seconds later it was fully cooked and came with cranberry sauce. When his wife asked him how he had done it, he gave her a roundhouse kick to the face and said, "Never question Chuck Norris."&lt;br /&gt;&lt;br /&gt;We once had a bachelor party for Chuck Norris. He ate the entire cake before we could tell him there was a stripper in it.&lt;br /&gt;&lt;br /&gt;Every piece of furniture in Chuck Norris' house is a Total Gym.&lt;br /&gt;&lt;br /&gt;Chuck Norris once shot a German plane down with his finger, by yelling, "Bang!"&lt;br /&gt;&lt;br /&gt;In a recent interview, Chuck Norris told Entertainment Tonight co-host Mary Hart that his most memorable role was when he played the third breast on the hooker in "Total Recall".&lt;br /&gt;&lt;br /&gt;Chuck Norris once did a back flip off the Great Wall of China.&lt;br /&gt;&lt;br /&gt;Chuck Norris doesn't need to swallow when eating food.&lt;br /&gt;&lt;br /&gt;Chuck Norris can divide by Zero&lt;br /&gt;&lt;br /&gt;Chuck Norris caught all 386 pokemon in just under 2.7 seconds. He says he won't trade any of them for anything.&lt;br /&gt;&lt;br /&gt;If Superman and the Flash were to race to the edge of space you know who would win: Chuck Norris.&lt;br /&gt;&lt;br /&gt;Ironically, Chuck Norris' hidden talent is invisibility.&lt;br /&gt;&lt;br /&gt;Chuck Norris eats Transformer toys in vehicle mode and poops them out transformed into a robot.&lt;br /&gt;&lt;br /&gt;In one episode of Fresh Prince of Bel Air, Chuck Norris replaced Carlton for one scene and nobody noticed.&lt;br /&gt;&lt;br /&gt;Contrary to popular belief, Chuck Norris was dropped at Hiroshima and Nagasaki.&lt;br /&gt;&lt;br /&gt;Chuck Norris broke his own leg, purely for the sake of winning the paralympics.&lt;br /&gt;&lt;br /&gt;Chuck Norris is where babies come from.&lt;br /&gt;&lt;br /&gt;Chuck Norris owns the greatest Poker Face of all-time. It helped him win the 1983 World Series of Poker despite him holding just a Joker, a Get Out of Jail Free Monopoly card, a 2 of clubs, 7 of spades and a green ..4 card from the game UNO.&lt;br /&gt;&lt;br /&gt;If you can see Chuck Norris, he can see you. If you can't see Chuck Norris you may be only seconds away from death.&lt;br /&gt;&lt;br /&gt;On the 7th day, God rested. Chuck Norris took over.&lt;br /&gt;&lt;br /&gt;Biologically, Chuck Norris is his own step-father.&lt;br /&gt;&lt;br /&gt;Chuck Norris invented a language that incorporates karate and roundhouse kicks. So next time Chuck Norris is kicking your ass, don't be offended or hurt, he may be just trying to tell you he likes your hat.&lt;br /&gt;&lt;br /&gt;Chuck Norris consumes 87 cans of mayonnaise in a week.&lt;br /&gt;&lt;br /&gt;Chuck Norris invented water.&lt;br /&gt;&lt;br /&gt;Chuck Norris will never fully be male nor female. Doctors once asked him which he preferred. He gave them an ad for a Total Gym.&lt;br /&gt;&lt;br /&gt;Chuck Norris went looking for a bar but couldn't find one. He walked to a vacant lot and sat there. Sure enough within an hour an a half someone constructed a bar around him. He then ordered a shot, drank it, and then burned the place to the ground. Chuck Norris yelled over the roar of the flames, 'Always leave things the way you found em!'"&lt;br /&gt;&lt;br /&gt;One time while sparring with wolverine, Chuck Norris accidentally lost his left testicle. You might be familiar with it to this very day by it's technical term: Jupiter.&lt;br /&gt;&lt;br /&gt;Contrary to popular belief, Chuck Norris, not the Blue Ringed Octopus of Eastern Australia, is the most venomous creature on Earth. Within 3 minutes of being bitten, a human being experiences the following symptoms: Fever, Blurred Vision, Beard Rash, tightness of the jeans, and the feeling of being repeatedly kicked through a car windshield.&lt;br /&gt;&lt;br /&gt;Chuck Norris is Luke Skywalker's father.&lt;br /&gt;&lt;br /&gt;Chuck Norris does not use spell check. If he happens to misspell a word, he simply changes the actual spelling of it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-113146736789750359?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/113146736789750359/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=113146736789750359' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/113146736789750359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/113146736789750359'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2005/11/chuck-norris-facts.html' title='CHUCK NORRIS FACTS:'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-113140078826498378</id><published>2005-11-07T16:50:00.000-05:00</published><updated>2005-11-07T16:59:48.283-05:00</updated><title type='text'>SUV backover deaths: What can be done?</title><content type='html'>SUV backover deaths: What can be done?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://money.cnn.com/2005/11/03/Autos/tipsandadvice/backover/index.htm"&gt;From the driver's seat of a Chevrolet Suburban, a large SUV, the cone wasn't visible until it was 46 feet, nine inches away.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-113140078826498378?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/113140078826498378/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=113140078826498378' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/113140078826498378'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/113140078826498378'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2005/11/suv-backover-deaths-what-can-be-done.html' title='SUV backover deaths: What can be done?'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-113097398677746406</id><published>2005-11-02T17:55:00.000-05:00</published><updated>2005-11-03T09:39:08.253-05:00</updated><title type='text'>movie review: proof</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://us.movies1.yimg.com/movies.yahoo.com/images/hv/photo/movie_pix/miramax_films/proof/proof_releaseposter.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://us.movies1.yimg.com/movies.yahoo.com/images/hv/photo/movie_pix/miramax_films/proof/proof_releaseposter.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;This is a bad movie. &lt;br /&gt;&lt;br /&gt;No wait, I can't say that. I can't say that because in Proof, we're using this neato gimmick that the script writing committee came up with to impress us with the amazingly rational minds of our protagonist mathematicians. Instead we must attempt to 'prove' the opposite... &lt;br /&gt;&lt;br /&gt;Proof is not a good movie.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;1) M_good = ( intriguing plot U characters U dialog U information U intangible goodness )&lt;br /&gt;&lt;br /&gt;2) M_proof ( lame plot U rapist hero U 1-trick pony dialog U prime numbers = neato! U nope )&lt;br /&gt;&lt;br /&gt;3) M_proof U M_g = null&lt;br /&gt;&lt;br /&gt;4) thus Proof != good&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;or&lt;br /&gt;&lt;br /&gt;1) Define M_good as the set of Movies that are Good.&lt;br /&gt;This can be expressed as the Union of:&lt;br /&gt;&lt;UL&gt; &lt;br /&gt;&lt;LI&gt;intriguing plot&lt;br /&gt;&lt;LI&gt;&amp;gt;1 character of interest&lt;br /&gt;&lt;LI&gt;Snappy dialog that actually works&lt;br /&gt;&lt;LI&gt;Dissemination of information that merits interest&lt;br /&gt;&lt;LI&gt;Some movies work anyway, right? We need to be complete.&lt;br /&gt;&lt;/UL&gt;&lt;br /&gt;&lt;br /&gt;2) Define M_proof as the set of Proof, the movie.&lt;br /&gt;This can be expressed as the Union of:&lt;br /&gt;&lt;UL&gt; &lt;br /&gt;&lt;LI&gt;Wait, she's the smart woman mathematician of lore? No PhD required to see this coming. And no, you can't just jiggle time around trying to confuse me and substitute this for plot. Memento was good. I know.  You're not Memento.&lt;br /&gt;&lt;LI&gt;Her, I can take or leave. Dudley or whatever the hell? I'm going to call the cops if he gets near her again. Dude, see the girl that winces every time you try to kiss her and is too socially awkward to throw you the hell out? Yeah, her father died today too, so stop boning her, k?&lt;br /&gt;&lt;LI&gt;Now I might be wrong, but I think she misquotes her father in the beginning while dis-'proving' his theory that she can't be crazy. He says crazy people don't &lt;span style="font-style:italic;"&gt;ask&lt;/span&gt; themselves if they're crazy, not that they can't &lt;span style="font-style:italic;"&gt;say&lt;/span&gt; they're crazy if asked. Fine, nitpicky, but you don't go proving without precision. Send her back to ass-u-me.&lt;br /&gt;&lt;LI&gt;Research on this movie consisted of about 5 minutes on Wikipedia, or 3 minutes googling "fun math fact" AND prime.  What did she prove again? &lt;br /&gt;&lt;LI&gt;Negative. Although I did like the ending credits. It looked like multi-cultural day at Northwestern.&lt;br /&gt;&lt;/UL&gt;&lt;br /&gt;&lt;br /&gt;3) The union of the two sets is the null set.&lt;br /&gt;4) Go watch Wallace &amp; Gromit.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-113097398677746406?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/113097398677746406/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=113097398677746406' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/113097398677746406'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/113097398677746406'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2005/11/movie-review-proof.html' title='movie review: proof'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-113076943124941095</id><published>2005-10-31T09:30:00.000-05:00</published><updated>2005-10-31T17:05:53.133-05:00</updated><title type='text'>CocoaVia</title><content type='html'>f-ing brilliant.&lt;br /&gt;&lt;br /&gt;"Heart disease is the No. 1 killer in the world, and chocolate is the No. 1 favorite ingredient in the world," said Jim Cass, Mars's vice president of marketing. "When you put those two giant macro trends together, we know this is a big idea."&lt;br /&gt;&lt;br /&gt;more on &lt;a href="http://www.nytimes.com/2005/10/31/business/31choco.html?8hpib"&gt;CocoaVia&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Is this what you get from consultants with Phd's in marketing? I can just imagine the boardroom meeting that launched this. 12 suits sitting around looking at couple different charts of consumer tastes. Too bad they didn't try to make a hybrid-SUV with chocolate steering wheels. &lt;br /&gt;&lt;br /&gt;"Hybrid SUV's are the No. 1 growing market in the automobile sector, and chocolate is the No. 1 favorite ingredient in the world," said Jim Cass, Mars's vice president of marketing. "When you put those two giant macro trends together, we know this is a big idea." He went on to add "Additionaly steering wheels are the No. 1 device held by car users, so our product will literaly already be in the hand of the consumer."&lt;br /&gt;&lt;br /&gt;These are the same people who do mergers because they think that one and one can equal more than two.&lt;br /&gt;&lt;br /&gt;Maybe they should do chocolate Uggs too. Or have people figured out that those look stupid yet?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-113076943124941095?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/113076943124941095/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=113076943124941095' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/113076943124941095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/113076943124941095'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2005/10/cocoavia.html' title='CocoaVia'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-112991458377320779</id><published>2005-10-21T11:52:00.000-05:00</published><updated>2005-10-27T16:20:43.276-05:00</updated><title type='text'>the wolfhound is right and the cannibal is wrong</title><content type='html'>&lt;blockquote&gt;Having got over one more bout of enthusiasm, Nerzhin--wheter definitively or not--understood the people in a new way, a way he had not read about anywhere: the people is not everyone who speaks our language, nor yet the elect makred by the fiery stamp of genius. Not by birth, not by the work of one's hands, not by the wings of education is one elected into the people.&lt;br&gt;&lt;br /&gt;But by one's inner self.&lt;br&gt;&lt;br /&gt;Everyone forges his inner self year after year.&lt;br&gt;&lt;br /&gt;One must try to temper, to cut, to polish one's soul so as to become a human being.&lt;br&gt;&lt;br /&gt;And thereby become a tiny particle of one's own people.&lt;br&gt;&lt;/blockquote&gt;&lt;br /&gt;(The First Circle, Solzhenitsyn, Trans. T. Whitney)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;but you're not here for classics. you're here for &lt;a href="http://video.google.com/videoplay?docid=-6739710473912337648"&gt;funny videos&lt;/a&gt; of two chinese dudes singing "I want it that way"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-112991458377320779?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/112991458377320779/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=112991458377320779' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112991458377320779'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112991458377320779'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2005/10/wolfhound-is-right-and-cannibal-is.html' title='the wolfhound is right and the cannibal is wrong'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-112957870250314332</id><published>2005-10-17T14:50:00.000-05:00</published><updated>2005-10-17T14:51:42.516-05:00</updated><title type='text'>more great ebay mostings...</title><content type='html'>&lt;a href="http://contact.ebay.com/ws/eBayISAPI.dll?ShowAllQuestions&amp;requested=bsack&amp;iid=8335653541&amp;frm=284&amp;redirect=0&amp;ShowASQAlways=1&amp;SSPageName=PageAskSellerQuestion_VI"&gt;great leather pants posting.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.banterist.com/"&gt;banterist.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-112957870250314332?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/112957870250314332/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=112957870250314332' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112957870250314332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112957870250314332'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2005/10/more-great-ebay-mostings.html' title='more great ebay mostings...'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-112913479057086877</id><published>2005-10-12T11:32:00.000-05:00</published><updated>2005-10-12T11:33:10.586-05:00</updated><title type='text'></title><content type='html'>Terry Dwyer Memorial Dublin 5K&lt;br /&gt;Dublin, NH, July 24, 2004&lt;br /&gt;&lt;a href="http://www.coolrunning.com/results/04/nh/Jul24_TerryD_set1.shtml"&gt;results&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-112913479057086877?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/112913479057086877/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=112913479057086877' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112913479057086877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112913479057086877'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2005/10/terry-dwyer-memorial-dublin-5k-dublin.html' title=''/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-112869393700152027</id><published>2005-10-07T09:04:00.000-05:00</published><updated>2005-10-12T10:05:40.186-05:00</updated><title type='text'>Insanity Test</title><content type='html'>Wow, so I guess I was the last one on the Internet to see this. &lt;br /&gt;&lt;a href="www.funnyjunk.com/pages/insanity_test.htm"&gt;Insanity test&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;All about the &lt;a href="http://en.wikipedia.org/wiki/Crazy_Frog"&gt;Crazy Frog&lt;/a&gt; phenomena.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.satirewire.com/news/0010/international.shtml"&gt;AMERICANS ANNOYED BY "ALL THIS&lt;br /&gt;INTERNATIONAL SHIT" ON INTERNET&lt;/a&gt;&lt;br /&gt;Web's Increasingly Worldly Flavor Threatens Americans' Worldview&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://answers.com"&gt;answers.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-112869393700152027?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/112869393700152027/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=112869393700152027' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112869393700152027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112869393700152027'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2005/10/insanity-test.html' title='Insanity Test'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-112852189495751644</id><published>2005-10-05T09:17:00.000-05:00</published><updated>2005-10-05T17:02:06.776-05:00</updated><title type='text'>Don't work in cubicles, ever.</title><content type='html'>&lt;blockquote&gt;Don't work in cubicles, ever. Working in cubicles is the sure sign that you're not working for a successful company. Imagine the smartest person you know, working in your field. Now imagine how they would react if they were told they're going to work in a box with no door or roof, allowing them no privacy.&lt;/blockquote&gt;&lt;br /&gt;&lt;a href="http://www.mirrordot.org/stories/6013d4189a6126e91d2664e5ba57f581/index.html"&gt; More...&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;of course you have to think that the guys that wrote &lt;a href="http://apps.gotdotnet.com/xmltools/xsdinference/Default.aspx"&gt;this&lt;/a&gt; probably have cubicles...&lt;br /&gt;&lt;br /&gt;Damn cool. If you've ever written and xml file and not got around to writing the xsd and wish there were a little utility to convert the xml to an xsd... well &lt;a href="http://apps.gotdotnet.com/xmltools/xsdinference/Default.aspx"&gt;here you go&lt;/a&gt;. You can thank microsoft. That must sting for some of you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-112852189495751644?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/112852189495751644/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=112852189495751644' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112852189495751644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112852189495751644'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2005/10/dont-work-in-cubicles-ever.html' title='Don&apos;t work in cubicles, ever.'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-112750754905092490</id><published>2005-09-23T15:31:00.000-05:00</published><updated>2005-09-23T15:35:46.863-05:00</updated><title type='text'>Week 1&amp;2 Wrap-up</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://games.espn.go.com/ffl/leagueoffice?leagueId=2108"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 160px;" src="http://photos1.blogger.com/blogger/7289/734/320/logo.gif" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://games.espn.go.com/ffl/leagueoffice?leagueId=2108"&gt;Week 1&amp;2 Wrap-up&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Question: What is the best way to be a dismal failure at fantasy football?&lt;br /&gt;&lt;br /&gt;Answer: Frankly there are many paths to this noble end.&lt;br /&gt;&lt;br /&gt;To answer this question let's ask some of the coaches in our humble league.&lt;br /&gt;&lt;br /&gt;First off would have to be Coach Lorenzo and the woesome Capitalists. In a league defined by parity, the Capitalist stand alone as total losers. Through 2 weeks, no other team has been able to lose both their games. What's gone wrong? It would appear that having the accepted #1 RB in all of fantasy has not been enough to make up for the extra-special dismality of starting William Green in the first two weeks. Despite his consistency (week 1: 1pt, week 2: 1pt) he has been unable to make up the difference and push ther Capitalists over the top. Thus far, the "Team of a thousand QB's" has yet to find a way to implement their dreaded 4QB set. Until Kerry Collins starts playing RB, look for more of the same.&lt;br /&gt;&lt;br /&gt;Secondly we'd have to ask coach Hogue how they've scored a measly 109 points thus far. Sadly his results have not been as successfull as the Capitalists, and they have managed to scrape a game off the equally repugnant Tetons, but against next week's halfway decent WhoTheFCares, look for the downward spiral to continue. Sadly, even the #2 and #3 RB's in all of FF can do nothing for a team that persists in leaving them on the bench.&lt;br /&gt;&lt;br /&gt;Thirdly we move to the sadly deformed Potato Farmers. The presence of the #1 kicker in football on this woesome team should to show that Having too many players from Cincinnati on a team does not go unpunished. Look for these misfits to be cruelly malled in the belly of the retooled Bootymen this week.&lt;br /&gt;&lt;br /&gt;Tied for next-worst are the Tetons and Bandits, though these are two very different teams. The Tetons carry the #1RB &amp; #1WR into week 3 and seem to be accelerating after a goose-egg laying week 1. The Bandits are a mishmash that reads like a waiver-wire with the notable addition of Daunte Caulpooper. Look for these misfits to continue middling along agains the softball Capitalists until the wheels come off Fred Taylor and Antawaan realizes everyone else spells his name differently and slips back into obscurity.&lt;br /&gt;&lt;br /&gt;The Bootymen are next up, but they are clearly in a rebuilding year and can't be blamed for anything.&lt;br /&gt;&lt;br /&gt;The Hinglish are achieving decent results with a rag-tag bunch of half-breeds, but their beauty is only skin deep, their bench is a pack of castaways more fit for celebrity-jeopardy than professional football and he's currently planning to start two players on bye-weeks. Look for a mid-season fade to obscurity here.&lt;br /&gt;&lt;br /&gt;The Bliss are the new team in town and currently 3rd on the depth chart. Stimied in thriller in week 1, and victors over the sad Gentlemen in week 2, the Bliss have yet to truly prove what they're about. Watch them follow in Big Ben's footsteps.&lt;br /&gt;&lt;br /&gt;And now the upper echelon. The rare air trodden on by only those with more luck than the rest of us. This said, the Yankees so far have taken the amazing lead in points against. Averaging almost 100 points a game shoudl keep them in good sted until the magic wears off Donavan. Look for the Bandits to find this out first hand this week.&lt;br /&gt;&lt;br /&gt;And then our one and only 2-0 team. With 8 players in the top 10 at their position, the Who personifies consitency so far. Able to easily match and beat their oppents by comfortable margins the Who continues to be the league favorite. If Larry Johnson starts showing his backup status, Matt Hasselback remembers he's from Seattle and bye weeks start striking, this could all change in a heart-beat...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-112750754905092490?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/112750754905092490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=112750754905092490' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112750754905092490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112750754905092490'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2005/09/week-12-wrap-up.html' title='Week 1&amp;2 Wrap-up'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-112748690214999989</id><published>2005-09-23T09:39:00.000-05:00</published><updated>2005-09-23T09:49:56.166-05:00</updated><title type='text'>The Polysyllabic Spree</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://store.mcsweeneys.net/_cache/e13f6c5453fcf59219939f3ad0887ef3.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 120px;" src="http://store.mcsweeneys.net/_cache/e13f6c5453fcf59219939f3ad0887ef3.jpg" border="0" alt=""/&gt;&lt;/a&gt;&lt;br /&gt;So Nick Hornby's &lt;a href="http://store.mcsweeneys.net/index.cfm/fuseaction/catalog.detail/object_id/94BB55E5-9580-4671-A1A1-22D5AC2FF839/ThePolysyllabicSpree.cfm"&gt;Polysyllabic Spree&lt;/a&gt; is the only physical manifestation of my personal culture spree of last week when I subscribed to &lt;a href="http://www.believermag.com/"&gt;the believer&lt;/a&gt; and the &lt;a href="http://www.nplusonemag.com/"&gt;n+1 magazine&lt;/a&gt; mentioned in that times article. Thankfully the websites both had little 'welcome new york times magazine readers' marquees, so I felt comfortably at one with the masses and not at all as if I were treading on some forbidden brooklyn-ite literati ground. The true luminaries have surely moved on to things less fasionable, though I suppose this is precisely the sort of knowing-cynicism that I enjoyed discounted in the same article. &lt;br /&gt;&lt;br /&gt;Happily his articles in the book are fun and short enough that I can read them at work and not feel like I'm reading books at work. The small 'form-factor' of the book is also good for shoving under the desk quickly, just in case someone who doesn't understand the subtle distinctions in mid-work reading happens to come by.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Some of you will also want to make sure to check out this&lt;a href="http://www.nescapades.com/gameroom.htm"&gt; wall of video game systems&lt;/a&gt; which seems like some form of Jackal-lover heaven.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-112748690214999989?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/112748690214999989/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=112748690214999989' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112748690214999989'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112748690214999989'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2005/09/polysyllabic-spree.html' title='The Polysyllabic Spree'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-112742103273088039</id><published>2005-09-22T15:29:00.000-05:00</published><updated>2005-09-22T15:30:32.756-05:00</updated><title type='text'>From IXDP into WSDT...</title><content type='html'>IXDP now WSDT...&lt;br /&gt;&lt;br /&gt;Commentary &lt;a href="http://thelearningblog123.blogspot.com/2005/09/ixdp-is-now-wisdomtree-investments.html"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-112742103273088039?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/112742103273088039/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=112742103273088039' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112742103273088039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112742103273088039'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2005/09/from-ixdp-into-wsdt.html' title='From IXDP into WSDT...'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-112662748005848970</id><published>2005-09-13T10:36:00.000-05:00</published><updated>2005-09-13T17:07:41.080-05:00</updated><title type='text'>laptop received</title><content type='html'>or......&lt;br /&gt;&lt;a href="http://www.ourmedia.org/node/53964"&gt;George Bush Doesn't Like Black People&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So &lt;a href="http://newegg.com"&gt;newegg&lt;/a&gt; is of course the best ever, and my new &lt;a href="http://www.notebookreview.com/reviews/default.asp?productFamilyID=599&amp;brandID=1&amp;reviewSiteID=1&amp;productReviewID=2352"&gt;Acer TravelMate TM3002WTCi&lt;/a&gt; arrived safely, soundly and as quick as can be. &lt;br /&gt;&lt;br /&gt;Opened it up and my goodness it's light. They weren't joking about 3lbs. Even loading the CD-drive, power adapter, and the extra battery in the computer bag I still feel like I've forgotten to put the laptop. Unscientific comnparison weighed the power-supply from my old laptop ('SpaceHeater', an Alienware Area-51 behemoth) with the new computer and big battery and found it even. Goal #1 acheived.&lt;br /&gt;&lt;br /&gt;Opened it up and started loading everything on there. Firefox 1.5 Beta... Microsoft Money... Picassa... ITunes...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Episode I&lt;/span&gt;&lt;br /&gt;Go home. Open up new computer to setup wireless. Open her up and... GACK! ScanDisk! eeek! It finds nothing and we proceed... To a weird windows netherworld. Explore.exe has hung, so no start menu, but we can ctrl-alt-delete and run programs from there/restart. &lt;br /&gt;&lt;br /&gt;Restarting has no success. We are sort of pseudo-logged-in to a failed session. &lt;br /&gt;&lt;br /&gt;Eventual solution is a safe-mode startup, which clears away whatever ghouls were there. &lt;br /&gt;&lt;br /&gt;Still, morale is low. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Episode II&lt;/span&gt;&lt;br /&gt;And now I come to the first annoyances of new computers generally. Loading all your accumulated shiznit from the old computer. 120 GB external drive to the rescue, right?? Well, sortof. &lt;br /&gt;&lt;br /&gt;So the new Acer ('Acer Lil'Darlin') has it's 60GB split into two 26GB partitions. Or physical drives? One would presume not. Oh yes, and I realize the math is imperfect, but don't blame me, I'm as miffed as anyone. So we want our 12GB of music on the D:\... &lt;br /&gt;1) Copy MyMusic from old computer to HDD.&lt;br /&gt;2) Copy MyMusic to D:\ on new computer.&lt;br /&gt;3) Update iTunes to new d:\MyMusic location....&lt;br /&gt;SPLAT&lt;br /&gt;4) iTunes recognizes nothing. &lt;br /&gt;5) Open itunes xml file... everything is hard linked to "c:\Documents..." Bah Humbug!&lt;br /&gt;6) Move D:\MyMusic to d:\blah&lt;br /&gt;7) Import d:\blah into iTunes and then delete d:\blah..&lt;br /&gt;8) iTunes's got it all now, but... no playlists. Bah Humbug!&lt;br /&gt;&lt;br /&gt;Picassa wasn't much better, but I retain hope for this one. I copied the MyPictures directory over, and all is well, besides the loss of all my labels. Where are they? Where have you hidden them? The googleplex? I have no idea, and apparently this question is not one of the Frequently Asked.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Episode III&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;The Micro-$perience&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Time to make this a production machine, let's Microcize! or not.&lt;br /&gt;Sigh, not too many details here, but let's just say that they've gotten a little better about copy-protection in Redmond. But what's a boy to do?? Key-generation? Phone-call activation engineering? Go load an old copy of Works? Actually go and buy the darn thing? Of course not!&lt;br /&gt;&lt;br /&gt;It's open source baby! Yep &lt;a href="http://openoffice.org"&gt;open office 2.0 Beta&lt;/a&gt; for me! Click, bam, and on your way. Looks neato too (well, neato for a productivity suite) except that I can't do View-&gt;Normal!! Why not oh lords of the open source!? Must I code it myself? Who wants View-&gt;Print Layout anyway? It breaks my train of thought.&lt;br /&gt;&lt;br /&gt;&amp;lt;update&amp;gt;&lt;br /&gt;Apparently yes, I must code it myself.&lt;br /&gt;&lt;a href="http://www.oooforum.org/forum/viewtopic.phtml?t=3010&amp;postdays=0&amp;postorder=asc&amp;start=15&amp;sid=2db91be11834861126bd804c9ff89e9e"&gt;other's comments&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.openoffice.org/issues/show_bug.cgi?id=4914"&gt;Bug 4914&lt;/a&gt;&lt;br /&gt;&amp;lt;/update&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Epilogue&lt;/span&gt;&lt;br /&gt;So far so good. &lt;br /&gt;&lt;br /&gt;Plus: &lt;br /&gt;Light as all get out. &lt;br /&gt;Still a great deal.&lt;br /&gt;Battery life is as billed, and great easy to use power-saving-settings.&lt;br /&gt;&lt;br /&gt;Cons:&lt;br /&gt;Delete key is a sponge. (Why oh why?! A spongy key ok, but delete?! Sigh. Couldn't it have been F11??)&lt;br /&gt;That one worrying scandisk thing..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-112662748005848970?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/112662748005848970/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=112662748005848970' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112662748005848970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112662748005848970'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2005/09/laptop-received.html' title='laptop received'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-112602424490928703</id><published>2005-09-06T11:23:00.000-05:00</published><updated>2005-10-31T17:08:45.586-05:00</updated><title type='text'>laptop buying</title><content type='html'>and the winner is....&lt;br /&gt;&lt;br /&gt;the &lt;a href="http://www.notebookreview.com/reviews/default.asp?productFamilyID=599&amp;brandID=1&amp;reviewSiteID=1&amp;productReviewID=2352"&gt;Acer TravelMate TM3002WTCi&lt;/a&gt; from &lt;a href="http://www.newegg.com/Product/Product.asp?Item=N82E16834115192"&gt;newegg&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;But what a process. Asking yourself what the best small, portable laptop is can be quite the rabbit hole. There are so many laptops to choose from it's nauseating. Then I see a 25% off Thinkpad x40 for a &lt;a href="http://www-131.ibm.com/content/home/store_LNV_PublicUSA/en_US/sale/sale_us_main.html"&gt;Lenovo Back to School sale&lt;/a&gt;! Damn. $1600 for an x40 seemed like it might be too good to pass up.&lt;br /&gt;&lt;br /&gt;But I still jones more for those Toshiba's. The &lt;a href="http://www.notebookreview.com/reviews/default.asp?productFamilyID=585&amp;reviewSiteID=5&amp;brandID=15&amp;productReviewID=2520"&gt;Toshiba Portégé R200&lt;/a&gt; is clearly just amazing, but I didn't come into this wanting to spend that much. The seemingly discontinued, but wonderful &lt;a href="http://www.notebookreview.com/price/default.asp?productID=5356&amp;display=reviewDetail"&gt;R100&lt;/a&gt; on the other hand, now that was the definite #2. But no bluetooth! arg! I'm really so excited to get to the shining bluetooth place in the sky that I just couldn't bear. Plus an extra $400, plus it's much slower and I'm a pretty impatient guy. Still, that battery life and that sex appeal were durn tough to turn down.&lt;br /&gt;&lt;br /&gt;Sigh.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now my finger is hovering over the 'submit order' dammit! and you can just buy a little bluetooth USB thing..&lt;br /&gt;&lt;br /&gt;but 20GB of space, $400 and 6.5ghz? aarrg! I hate this.&lt;br /&gt;&lt;br /&gt;ok it's done. save for a good 25 minutes ogling the R200. But no bloody CD-Drive, made me think of the pain in the neck it will be to load things on there. Plus Chessmaster only runs with the CD in it... Besides it came out to $2260 when I put on battery #2 and that's a bunch of cabbage. Still, always difficult to not come home with the shiniest one.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-112602424490928703?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/112602424490928703/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=112602424490928703' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112602424490928703'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112602424490928703'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2005/09/laptop-buying.html' title='laptop buying'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-112489805698228311</id><published>2005-08-24T10:39:00.000-05:00</published><updated>2005-08-30T09:26:30.566-05:00</updated><title type='text'>Google Talk! XBox360 teaser</title><content type='html'>&lt;a href="http://talk.google.com"&gt;&lt;br /&gt;talk.google.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://talk.google.com/"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://www.google.com/talk/images/call.gif" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;with voice? this is way too easy. get phoning!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Or you could go just try to pick an apple for hours upon end at &lt;br /&gt;&lt;a href="http://www.origenxbox360.com/"&gt;Origen XBox 360&lt;/a&gt; @ http://www.origenxbox360.com/&lt;br /&gt;&lt;br /&gt;Now that's the next generation.&lt;br /&gt;&lt;br /&gt;&amp;lt;update&amp;gt;&lt;br /&gt;Find out just how deep the rabbit hole goes &lt;a href="http://www.xbox360news.com/Blogs/News/hqs/blr_351.aspx"&gt;here&lt;/a&gt;. Most up to date news and speculation about origenxbox360.&lt;br /&gt;&lt;br /&gt;leaked xbox360 brochure &lt;a href="http://forums.xbox-scene.com/index.php?showtopic=436795"&gt;here&lt;/a&gt;&lt;br /&gt;&amp;lt;/update&amp;gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-112489805698228311?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/112489805698228311/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=112489805698228311' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112489805698228311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112489805698228311'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2005/08/google-talk-xbox360-teaser.html' title='Google Talk! XBox360 teaser'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-112481900407462554</id><published>2005-08-23T12:43:00.000-05:00</published><updated>2005-08-23T13:15:02.063-05:00</updated><title type='text'>Mount Lafayette, Franconia NH</title><content type='html'>&lt;a href='http://photos1.blogger.com/img/294/2797/1024/IMG_0886.jpg'&gt;&lt;img border='0' style='border:1px solid #000000; margin:2px' src='http://photos1.blogger.com/img/294/2797/320/IMG_0886.jpg'&gt;&lt;/a&gt;&lt;br /&gt;Mount Lafayette.&amp;nbsp;&lt;a href='http://picasa.google.com/' target='ext'&gt;&lt;img src='http://photos1.blogger.com/pbp.gif' alt='Posted by Picasa' border='0' style='border:0px;padding:0px;background:transparent;' align='absmiddle'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Good ole Bit-O-Honey!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-112481900407462554?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/112481900407462554/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=112481900407462554' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112481900407462554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112481900407462554'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2005/08/mount-lafayette-franconia-nh.html' title='Mount Lafayette, Franconia NH'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-112472211163491169</id><published>2005-08-22T09:42:00.000-05:00</published><updated>2005-08-22T09:48:35.873-05:00</updated><title type='text'>The Old Man and the Sea</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/7289/734/1600/oldman1.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/7289/734/320/oldman1.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;"Now is the time to think of only one thing. That which I was born for." from &lt;a href="http://www.bookrags.com/notes/oms/QUO.htm"&gt;bookrags.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-112472211163491169?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/112472211163491169/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=112472211163491169' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112472211163491169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112472211163491169'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2005/08/old-man-and-sea.html' title='The Old Man and the Sea'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-112362827033731596</id><published>2005-08-09T17:57:00.000-05:00</published><updated>2005-08-16T11:33:32.873-05:00</updated><title type='text'>International High IQ Society | Free IQ Tests</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://games.espn.go.com/ffl/leagueoffice?leagueId=2108"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/7289/734/320/logo.gif" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;The Boulder Drive Bootymen are back for 1 more booty-licious year. Wait, did I spell licious wrong. Dang-it!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.highiqsociety.org/noflash/nonmembers/iqtests.htm"&gt;International High IQ Society | Free IQ Tests&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Good tests that really give you a score instead of asking for $$$ when you're done.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;"Of course the people don't want war. But after all, it's the leaders of the country who determine the policy, and it's always a simple matter to drag the people along whether it's a democracy, a fascist dictatorship, or a parliament, or a communist dictatorship. Voice or no voice, the people can always be brought to the bidding of the leaders. That is easy. All you have to do is tell them they are being attacked, and denounce the pacifists for lack of patriotism, and exposing the country to greater danger."&lt;br /&gt;&lt;br /&gt;-- &lt;a href="http://www.snopes.com/quotes/goering.htm"&gt;Herman Goering at the Nuremberg trials &lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-112362827033731596?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/112362827033731596/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=112362827033731596' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112362827033731596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112362827033731596'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2005/08/international-high-iq-society-free-iq.html' title='International High IQ Society | Free IQ Tests'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-112325966071432643</id><published>2005-08-05T11:31:00.000-05:00</published><updated>2005-08-05T16:51:29.236-05:00</updated><title type='text'>shame on toyota</title><content type='html'>Shame on Toyota. The &lt;a href="http://www.nytimes.com/2005/07/31/automobiles/31AUTO.html?8dpc"&gt;2006 Lexus RX 400h: The Hybrid Emperor's New Clothes&lt;/a&gt; is clearly a step backwards. What a nice way to squander good will and make me think of them as another soul-less company instead of as the leaders of an automotive revolution.&lt;br /&gt;&lt;br /&gt;and by the by, if you're getting &lt;br /&gt;org.hibernate.PropertyAccessException: IllegalArgumentException&lt;br /&gt;and can't figure out why since you're not setting null's to primitive types like the hibernate faq suggests you probably are, it's all about getting your log4j going and disabling CGLIB, ie -Dhibernate.cglib.use_reflection_optimizer=false &lt;br /&gt;&lt;br /&gt;This will tell you that you're trying to set your java.util.Date to java.sql.Date and make your afternoon. Ahah!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-112325966071432643?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/112325966071432643/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=112325966071432643' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112325966071432643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112325966071432643'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2005/08/shame-on-toyota.html' title='shame on toyota'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-112307722951985033</id><published>2005-08-03T08:50:00.000-05:00</published><updated>2005-08-03T11:00:01.540-05:00</updated><title type='text'>Bush Remarks Roil Debate on Teaching of Evolution</title><content type='html'>&lt;a href="http://nytimes.com/2005/08/03/politics/03bush.html?hp&amp;ex=1123128000&amp;en=0bbf404a2f373d3e&amp;ei=5094&amp;partner=homepage"&gt;Bush Remarks Roil Debate on Teaching of Evolution&lt;/a&gt; at the NYTimes.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Recalling his days as Texas governor, Mr. Bush said in the interview, according to a transcript, "I felt like both sides ought to be properly taught." Asked again by a reporter whether he believed that both sides in the debate between evolution and intelligent design should be taught in the schools, Mr. Bush replied that he did, "so people can understand what the debate is about."&lt;br /&gt;&lt;br /&gt;Mr. Bush was pressed as to whether he accepted the view that intelligent design was an alternative to evolution, but he did not directly answer. "I think that part of education is to expose people to different schools of thought," he said, adding that "you're asking me whether or not people ought to be exposed to different ideas, and the answer is yes."&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;sometimes you just want to go out and hurt someone. what a failure of a man.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;this makes me feel better: &lt;a href="http://shortdomainname.com/archive/2005/02/16/3975.aspx"&gt;Marketplace on NPR says Podcasts are coming&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-112307722951985033?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/112307722951985033/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=112307722951985033' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112307722951985033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112307722951985033'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2005/08/bush-remarks-roil-debate-on-teaching.html' title='Bush Remarks Roil Debate on Teaching of Evolution'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-112256977817234866</id><published>2005-07-28T11:35:00.000-05:00</published><updated>2005-08-04T13:24:47.823-05:00</updated><title type='text'>happy consumerism day!</title><content type='html'>Yes! We'll she's finally here. My new steed, an &lt;a href="http://airborne.net"&gt;Airborne&lt;/a&gt; Thunderbolt. What a road bike! Happily the longish wait (3 extra days because they ran out of stems, then the full 6 day ground ship from DHL) just increased my excitement. While a was a little worried when I saw that &lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/7289/734/1600/bike1%20001.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/7289/734/200/bike1%20001.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;OL&gt;&lt;br /&gt;&lt;LI&gt;the DHL guy had just left it sitting in the middle of my parking lot,&lt;/LI&gt;&lt;br /&gt;&lt;LI&gt;there was a big hole in the box,&lt;/LI&gt;&lt;br /&gt;&lt;LI&gt;the box had sprung totally open...&lt;/LI&gt;&lt;br /&gt;&lt;/OL&gt;&lt;br /&gt;So 'D-' DHL, but as nothing seemed to be too damaged I was off and running. Of course it was also darn tempting to have somebody collect this clearly "abandoned" bike from the parking lot and have DHL buy me another one, but my friend says the most important thing he learned from his father was not to commit insurance fraud, and besides I wanted to get biking.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/7289/734/1600/bike1%20002.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/7289/734/200/bike1%20002.jpg" border="0" alt="" /&gt;&lt;/a&gt;Next up was throwing it all together, which was just fine, although I had to go run out for some lube from the $$$ LBS. Happily this gave me an opportunity to verify that their pedals and bikes are still a terrible deal. Anyway, soon it was together and I was off for a ride... just to find that it needed some serious deraileur work. Essentially it shifted continually back and forth across most of the cassette. I have to hand it to the ultegra though, I could almost have ridden it in that state. Coming from my old bike where you've just about got to stop pedalling to shift nicely, this is pretty amazing. &lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/7289/734/1600/bike1%20003.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/7289/734/200/bike1%20003.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;So sadly it was back to work for me, but all was not lost as I scored myself a lovely deal on some look pp-206 pedals from &lt;a href="http://brandscycle.com/site/intro.cfm"&gt;Brands Cycle &amp; Fitness&lt;/a&gt; who were good on their word of shipping same day, and for &lt;span style="font-style:italic;"&gt;free&lt;/span&gt; no less.&lt;br /&gt;&lt;br /&gt;Anywho, finally rode it this morning up into the Norwhich hills and it was just lovely. You can't imagine the difference between brand-spanking new ultegra 10 speed and 8-year old marginally maintained Trek 470 RSX 7-speed. At least all that friction got me in decent shape though, right? Anyway, she rode lovely. I was worried about the shock of stiff aluminum, but it was fine as far as I'm concerned. Need to figure out what to do about my seat though, my old one had a hole in it and I forgot how numb the bits n' pieces can get.. not sure if she's up to snuff from a snazzy-looking perspective however.&lt;br /&gt;&lt;br /&gt;now I just need a couple &lt;a href="http://www.mistersport.com/boutique_us/liste_produits.cfm?type=64&amp;num=3&amp;code_lg=lg_us"&gt;cool jerseys&lt;/a&gt;...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-112256977817234866?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/112256977817234866/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=112256977817234866' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112256977817234866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112256977817234866'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2005/07/happy-consumerism-day.html' title='happy consumerism day!'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-112230235946164732</id><published>2005-07-25T09:34:00.000-05:00</published><updated>2005-07-27T09:31:54.836-05:00</updated><title type='text'>sell sell sell!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/7289/734/1600/stock.gif"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/7289/734/320/stock.gif" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;Nothing like selling a stock who's volume is so low that you can see your order make it's own personal spike on the ticker!&lt;br /&gt;&lt;br /&gt;Well nothing like it unless you're doing it to buy some stock you overheard somebody mention at a dinner party, right?&lt;br /&gt;&lt;br /&gt;hehehe.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;awesome how-to on fixing your road bike derailleurs &lt;a href="http://www.parktool.com/repair_help/howfix_frontderailleur.shtml"&gt;here.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;best &lt;a href="http://also-online.com/links/"&gt;list o'links&lt;/a&gt; around...  don't miss the world tetris champion video...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-112230235946164732?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/112230235946164732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=112230235946164732' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112230235946164732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112230235946164732'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2005/07/sell-sell-sell.html' title='sell sell sell!'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-112229906371374970</id><published>2005-07-25T08:40:00.000-05:00</published><updated>2005-07-25T08:44:23.720-05:00</updated><title type='text'>Stick Figure</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://web.rollins.edu/~jwoodruff/"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px;" src="http://web.rollins.edu/~jwoodruff/finalheaderclearerscott.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://web.rollins.edu/~jwoodruff/audio.htm"&gt;Stick Figure&lt;/a&gt;&lt;br /&gt;the music of Scott Woodruff&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"Stick Figure possesses a unique style of music which combines a creative blend of upbeat reggae, dub, blues,and funk."&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Spent last night in this kid's studio. I can't imagine being this talented. Oh, and it's all free music, so you might as well go &lt;a href="http://web.rollins.edu/~jwoodruff/audio.htm"&gt;download it&lt;/A&gt;, right? That way you can say you knew him when.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-112229906371374970?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/112229906371374970/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=112229906371374970' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112229906371374970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112229906371374970'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2005/07/stick-figure.html' title='Stick Figure'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-112206112662231658</id><published>2005-07-22T14:35:00.000-05:00</published><updated>2005-07-22T14:38:46.633-05:00</updated><title type='text'>star wars scripts</title><content type='html'>How cool are &lt;a href="http://www.wheelon.com/swscripts/scripts.htm"&gt;these&lt;/a&gt;? The first 4 drafts of star wars. I'm surprised they even exist, but they're amazing. Very different from the final versions. Anakkin Starkiller? &lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Until the recent Great Rebellion, the Jedi Bendu were the most feared warriors in the universe.  For one hundred thousand years, generations of Jedi perfected their art as the personal bodyguards of the emperor.  They were the chief architects of the invincible Imperial Space Force which expanded the Empire across the galaxy, from the celestial equator to the farthest reaches of the Great Rift.&lt;br /&gt;&lt;br /&gt;Now these legendary warriors are all but extinct.  One by one they have been hunted down and destroyed as enemies of the New Empire by a ferocious and sinister rival warrior sect, the Knights of Sith.&lt;br /&gt;&lt;br /&gt;from &lt;a href="http://www.wheelon.com/swscripts/scripts.htm"&gt;The Star Wars - 1st draft&lt;/a&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-112206112662231658?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/112206112662231658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=112206112662231658' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112206112662231658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112206112662231658'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2005/07/star-wars-scripts.html' title='star wars scripts'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-112205254780060352</id><published>2005-07-22T12:14:00.000-05:00</published><updated>2005-07-22T12:15:47.806-05:00</updated><title type='text'>Three years in the workforce</title><content type='html'>Comments under &lt;a href="http://deefs.net/"&gt;Three years in the workforce&lt;/a&gt; from someone close to home..&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.banksy.co.uk/menu.html"&gt;Bansky&lt;/a&gt; has some amazing stuff on here. Top shelf and legit.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-112205254780060352?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/112205254780060352/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=112205254780060352' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112205254780060352'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112205254780060352'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2005/07/three-years-in-workforce.html' title='Three years in the workforce'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-112187016494348376</id><published>2005-07-20T09:35:00.000-05:00</published><updated>2005-07-20T09:50:46.783-05:00</updated><title type='text'>vader read my mind!</title><content type='html'>have lord vader &lt;a href="http://www.sithsense.com/flash.htm"&gt;read your mind&lt;/a&gt;...&lt;br /&gt;&lt;br /&gt;or get your patriotism on,&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.whitehouse.org/initiatives/posters/"&gt;&lt;img style="margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px;" src="http://www.whitehouse.org/initiatives/posters/images/osamadam.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-112187016494348376?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/112187016494348376/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=112187016494348376' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112187016494348376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112187016494348376'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2005/07/vader-read-my-mind.html' title='vader read my mind!'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-112186660484506219</id><published>2005-07-20T08:35:00.000-05:00</published><updated>2005-07-20T08:36:44.853-05:00</updated><title type='text'>moon.google.com</title><content type='html'>Check out &lt;a href="http://moon.google.com/"&gt;http://moon.google.com/&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;just don't forget to zoom all the way in...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-112186660484506219?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/112186660484506219/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=112186660484506219' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112186660484506219'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112186660484506219'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2005/07/moongooglecom.html' title='moon.google.com'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-112170888059677316</id><published>2005-07-18T12:31:00.000-05:00</published><updated>2005-07-19T15:48:04.820-05:00</updated><title type='text'>My new Airborne Thunderbolt!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.airborne.net/"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px;" src="http://www.airborne.net/eready/janette/store/AB_Photos/05TB-bike-new-m.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Sweetness! Here's what's on the way to a doorway near me. I kept considering the Tomasso, but with such a dirth of reviews on the web I had a tough time feeling comfortable with it. Then I found this deal and things started happening pretty quickly. My Navy friend loves his Zeppelin and with the positive reviews, the friendly guy I talked to about sizing and the generous reutrn policies I feel pretty good right now. I just wish I'd got it shipped last week so that it could've travelled over the weekend... I want my wheels!! &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Frame&lt;/span&gt;    2005 Thunderbolt 6061 Double Butted Aluminum, Road Frame &lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Components&lt;/span&gt; Shimano 2005 Ultegra 10, FC-6600/3 Crankset, 39-53T&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Wheel Set&lt;/span&gt;  Bontrager Select 700c Wheelset, 20/24, 835g/1020g&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Tires&lt;/span&gt;  Bontrager Race Lite RD (700 x 23C) Road Tire, Black/Grey, Kevlar Bead&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Seat Post&lt;/span&gt;  Bontrager Race 20mm offset Seatpost, 27.2mm, 330mm Length, Black&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Saddle&lt;/span&gt;  Selle Italia C2 Saddle, Manganese Rails, Black Cover, Embroidery&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Fork&lt;/span&gt;  Airborne AILERON SL Carbon Fork, 1 1/8 Carbon Steerer, Carbon Dropouts&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;arg! they ran out of stem's! &lt;br /&gt;&lt;br /&gt;"&lt;br /&gt;Sorry Jeff.  We ran out of stems and are having them overnighted for&lt;br /&gt;tomorrow.&lt;br /&gt;"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-112170888059677316?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/112170888059677316/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=112170888059677316' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112170888059677316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112170888059677316'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2005/07/my-new-airborne-thunderbolt.html' title='My new Airborne Thunderbolt!'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9842007.post-112085679873766867</id><published>2005-07-08T16:06:00.000-05:00</published><updated>2005-07-08T16:06:38.743-05:00</updated><title type='text'>BS Industries - Bringing Officework Alive!</title><content type='html'>BS Industries - Bringing Officework Alive!&lt;br /&gt;--------------------&lt;br /&gt;BS Industries is the local leader in positive work environments. As the result of our negligible-output initiative we have successfully produced nothing but intra-office cheer for the past 7 years.&lt;br /&gt;&lt;br /&gt;At BS you can expect the best water-cooler banter &amp; professionally managed office pools for all professional &amp; NCAA sports as well as championship bull riding, nascar, and the tour de france.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9842007-112085679873766867?l=jdwyah.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdwyah.blogspot.com/feeds/112085679873766867/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9842007&amp;postID=112085679873766867' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112085679873766867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9842007/posts/default/112085679873766867'/><link rel='alternate' type='text/html' href='http://jdwyah.blogspot.com/2005/07/bs-industries-bringing-officework.html' title='BS Industries - Bringing Officework Alive!'/><author><name>Jeff Dwyer</name><uri>http://www.blogger.com/profile/13347545383502498067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://bp1.blogger.com/_yooHuL8p0hw/R5kg2PH6I2I/AAAAAAAAAak/K2pjUE69rzY/S220/profile.jpg'/></author><thr:total>0</thr:total></entry></feed>
