<?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-9088482399688345277</id><updated>2012-01-30T15:51:10.939-07:00</updated><category term='JeOS Oracle XE VMWare'/><category term='apache servicemix java'/><category term='dublin ireland'/><category term='st john&apos;s newfoundland canada'/><category term='java intellij idea'/><category term='springsource'/><category term='multitasking'/><category term='activemq in action'/><category term='spring jms message listener container activemq java'/><category term='maven'/><category term='apache camel eip'/><category term='servicemix javapolis antwerp'/><category term='java spring springsource tool suite sts'/><category term='sonatype'/><category term='authoring'/><category term='soccer injury'/><category term='open source'/><category term='music ben harper relentless7'/><category term='java maven eclipse nexus hudson'/><category term='GMail Firefox tab key not working'/><category term='java conference'/><category term='springone activemq'/><category term='netstat mac os x bsd'/><category term='maven m2eclipse'/><category term='apachecon ossummit hong kong china'/><category term='eclipse git'/><category term='java spring interface21 springsource'/><category term='iphone'/><category term='activemq jms rebalance'/><category term='ActiveMQ ServiceMIx'/><category term='ActiveMQ In Action Tomcat Spring'/><category term='EIP'/><category term='iPhone water Apple Store'/><category term='cycling'/><category term='java uuid'/><category term='docbook'/><category term='java apache servicemix'/><category term='productivity'/><category term='guitar'/><category term='java 1.6 macosx'/><category term='linux'/><category term='softwaresummit java keystone colorado'/><category term='xml'/><category term='spring jms message listener container activemq message driven pojos'/><category term='cult music'/><category term='dude'/><category term='apachecon activemq camel servicemix'/><category term='java maven eclipse'/><category term='activemq manning'/><category term='calendars'/><category term='cycling courage classic'/><category term='java maven nexus'/><category term='iphone g1'/><category term='apache camel integration'/><category term='music'/><category term='java eclipse'/><category term='Apache Fuse IONA ServiceMix'/><category term='billy boy goat cartoon'/><category term='cycling boulder colorado'/><category term='skunks'/><category term='activemq book jms'/><category term='mac os x java snow leopard 1.5'/><category term='mobile voicemail'/><category term='cobb cycling saddle tubes air cartridges'/><category term='bike bicycle cycling'/><category term='core spring springsource'/><category term='mac os x safari'/><category term='java agile overstock.com'/><category term='spring jms template activemq java jmstemplate'/><category term='activemq'/><category term='javapolis javoxx devoxx'/><category term='java apache camel'/><category term='install configure postgresql mac os x'/><category term='objective c xcode mac os x'/><category term='java maven eclipse nexus'/><category term='cycling boulder sunrise century triple bypass'/><category term='java javazone camels llamas'/><category term='ActiveMQ FUD'/><category term='springone java groovy grails'/><category term='integration apache camel javaone'/><category term='java software conference'/><category term='badger cartoon'/><category term='java eclipse maven'/><category term='email entourage apple mail'/><category term='keynote powerpoint'/><category term='activemq camel jms'/><title type='text'>BruceBlog</title><subtitle type='html'>tail -f /my/brain</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default?start-index=101&amp;max-results=100'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>175</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-9059427683437194229</id><published>2012-01-04T08:30:00.004-07:00</published><updated>2012-01-04T09:19:38.948-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse git'/><title type='text'>How To Add An Existing Git Project to Eclipse</title><content type='html'>&lt;a href="http://2.bp.blogspot.com/-Ghx7mA-hBeM/TwRxAtDNtsI/AAAAAAAAAo0/5fvSEpoClFc/s1600/git_logo.jpeg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 175px;" src="http://2.bp.blogspot.com/-Ghx7mA-hBeM/TwRxAtDNtsI/AAAAAAAAAo0/5fvSEpoClFc/s320/git_logo.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5693800085810165442" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here's another quick set of notes for myself for posterity. I always clone and build a project on the command line before I import it into the IDE to begin hacking code. Right now I have to handle a hairy merge so I need a visual tool to make things a bit easier. For this purpose, I want to make Eclipse git aware so that I can use the visual diff in the IDE. Hopefully these notes will help out someone else, too. &lt;br /&gt;&lt;br /&gt;For this situation I'm dealing with a Java project that uses git. First some quick items to set the stage: &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;IDE:&lt;/b&gt;For Java development, my IDE of choice is the &lt;a href="http://www.springsource.com/developer/sts"&gt;SpringSource Tool Suite&lt;/a&gt; (STS). If you develop Spring-based Java apps and you like Eclipse, you should really be using STS.&lt;/li&gt;&lt;li&gt;&lt;b&gt;SCM:&lt;/b&gt; The majority of projects I have worked with over the last few years use &lt;a href="http://git-scm.com/"&gt;git&lt;/a&gt; for SCM. It is vastly superior to any other SCM tools I've used and documentation abounds for it, but it is a bit like a razor blade.&lt;/li&gt;&lt;li&gt;&lt;b&gt;IDE+SCM:&lt;/b&gt; The standard git tool for Eclipse is &lt;a href="http://eclipse.org/egit/"&gt;EGit&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;To make the Eclipse project git aware, follow these steps: &lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Go to Window-&gt;Show View-&gt;Other&lt;/li&gt;&lt;li&gt;In the filter field, enter the word git&lt;/li&gt;&lt;li&gt;Select Git Repositories and click OK&lt;/li&gt;&lt;li&gt;Click on the icon whose tooltip reads 'Add an existing local Git Repository to this view'&lt;/li&gt;&lt;li&gt;Click on the browse button and navigate to the directory that contains the project source code&lt;/li&gt;&lt;li&gt;Click the Search button&lt;/li&gt;&lt;li&gt;Click OK&lt;/li&gt;&lt;li&gt;Right-click on the project in the Package Explorer&lt;/li&gt;&lt;li&gt;Go to Team-&gt;Share Project&lt;/li&gt;&lt;li&gt;Select Git and click Next&lt;/li&gt;&lt;li&gt;Check the box for 'Use or create Repository in parent folder of project - this should automatically find the .git directories&lt;/li&gt;&lt;li&gt;Click Finish and let EGit complete the integration&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;After following these steps, the projects should be connected to their git repository. This allows you to handle the vast majority of git commands right from inside the IDE. &lt;br /&gt;&lt;br /&gt;For more info about EGit, check out the &lt;a href="http://wiki.eclipse.org/EGit/User_Guide"&gt;EGit User Guide&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-9059427683437194229?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/9059427683437194229/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2012/01/how-to-add-existing-git-project-to.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/9059427683437194229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/9059427683437194229'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2012/01/how-to-add-existing-git-project-to.html' title='How To Add An Existing Git Project to Eclipse'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-Ghx7mA-hBeM/TwRxAtDNtsI/AAAAAAAAAo0/5fvSEpoClFc/s72-c/git_logo.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-7608900061269191202</id><published>2012-01-02T16:20:00.006-07:00</published><updated>2012-01-04T10:58:09.344-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='objective c xcode mac os x'/><title type='text'>Developing Apps for Mac OS X With Objective-C and Cocoa</title><content type='html'>&lt;a href="http://2.bp.blogspot.com/-lArUgvLa6l0/TwR8ldOet1I/AAAAAAAAApA/EyUG4zqNDms/s1600/xcode_logo.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 150px; height: 150px;" src="http://2.bp.blogspot.com/-lArUgvLa6l0/TwR8ldOet1I/AAAAAAAAApA/EyUG4zqNDms/s320/xcode_logo.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5693812811845515090" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Even though I've used Macs for over 20 years now, I have never developed a native app for the Mac OS. So over the holiday break, I finally spent some time getting ramped up on Objective-C to develop apps for Mac OS X and IOS. This meant reading a lot about Objective-C, XCode and Cocoa.&lt;br /&gt;&lt;br /&gt;I'm primarily a Java developer these days but I'm familiar with writing C code (though I haven't written it in many years) so this knowledge helped me quite a bit. The syntax for Objective-C was a bit strange at first but I got the hang of it after a bit and I'm continuing to learn. I managed to develop a command line app and a GUI app using XCode. Building the command line app was much more understandable for me because you are writing all the code by hand. Constructing the GUI app was a rather nebulous task mainly because you rely upon the IDE to handle many things for you. XCode is the IDE for building Objective-C apps for Mac OS X and IOS. When developing a GUI app, XCode provides a visual tool called Interface Builder that is amazing. It provides a standard set of widgets for your apps and allows you to do visually design the UI. Interface Builder simplifies the creation of connections from the code to the GUI widgets via dialogs and selections in those dialogs. Because the actual code to handle these things is hidden behind the IDE, the experience was rather cloudy in my mind. At some point, I plan to dig down into what is actually happening behind the curtain here to solidify it in my mind. I also used the XCode debugger and profiler which were both very nice tools and were both included in the IDE.&lt;br /&gt;&lt;br /&gt;I forgot to mention that I am using Objective-C 2.0 and XCode 4.2. This is not only a new release of Objective-C but it's also a new release of XCode with a dramatically improved set of functionality. My prior experience was with XCode 3.x, it was minimal and I was not writing Objective-C, so I didn't really get to experience the power of XCode. Now that I've been through a couple of tutorials with XCode 4.2 and Objective-C, I must say that I'm duly impressed. In fact, Eclipse could stand to learn a few things from XCode. Objective-C 2.0 is a big improvement over the previous version. There's now automatic reference counting to help you with memory management (the big thing I hated about C/C++) and much more.&lt;br /&gt;&lt;br /&gt;The apps I created run on Mac OS X. They are both very minimal and not very useful overall, but it is invigorating to delve into new territory for a platform that I have known and loved for over 20 years already. I plan to keep at it as time allows and build some useful apps. Perhaps I will even develop some IOS apps.&lt;br /&gt;&lt;br /&gt;For those who are interested, here are the two tutorials that I followed:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://pragprog.com/screencasts/v-bdobjc/coding-in-objective-c-2-0"&gt;Coding in Objective-C 2.0&lt;/a&gt; by my friend Bill Dudney - Although this is a bit dated because it does not use XCode 4.2, I found it to be a great start &lt;/li&gt;&lt;li&gt;&lt;a href="http://developer.apple.com/library/mac/#documentation/General/Conceptual/Mac101/Articles/00_Introduction.html#//apple_ref/doc/uid/TP40010611"&gt;Your First Mac App&lt;/a&gt; - Apple provides a ton of docs to begin creating apps in the &lt;a href="http://developer.apple.com/devcenter/mac/index.action"&gt;Mac Dev Center&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;I've also been reading many blogs from Objective-C and Cocoa developers. I also found some items for Java developers who want to learn Objective-C:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjectiveC/ObjC.pdf"&gt;Objective-C Programming Language&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaFundamentals/Introduction/Introduction.html"&gt;Cocoa Fundamentals Guide&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/ObjC_classic/_index.html"&gt;Foundation Framework Reference&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://developer.apple.com/library/mac/#documentation/CoreFoundation/Reference/CoreFoundation_Collection/_index.html"&gt;Core Foundation Framework Reference&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/ObjC_classic/_index.html"&gt;AppKit Framework Reference&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cocoadevcentral.com/d/learn_objectivec/"&gt;Learn Objective-C&lt;/a&gt;&lt;a href="http://cocoawithlove.com/" coco="" with="" a=""&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://theocacao.com/"&gt;Theococoa&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://maniacdev.com/"&gt;ManiacDev.Com&lt;/a&gt;, iPhone, iOS, iPad SDK Development Tutorial and Programming Tips&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.informit.com/articles/article.aspx?p=1568732"&gt;Objective-C for Java programmers, Part I&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.slideshare.net/bobmccune/ob-4933190"&gt;Objective-C for Java Developers&lt;/a&gt; presentation&lt;/li&gt;&lt;li&gt;&lt;a href="http://giveabrief.com/"&gt;Briefs&lt;/a&gt; Build it, share it, real fucking fast - A very cool app for prototyping IOS apps (watch the video)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;I will try to keep adding info about resources here as I think about them. Not only is this a record for myself, but hopefully it will help other folks as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-7608900061269191202?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/7608900061269191202/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2012/01/developing-apps-for-mac-os-x-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/7608900061269191202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/7608900061269191202'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2012/01/developing-apps-for-mac-os-x-with.html' title='Developing Apps for Mac OS X With Objective-C and Cocoa'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-lArUgvLa6l0/TwR8ldOet1I/AAAAAAAAApA/EyUG4zqNDms/s72-c/xcode_logo.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-9201245674781682753</id><published>2011-09-19T09:10:00.013-06:00</published><updated>2011-09-19T10:38:21.356-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='install configure postgresql mac os x'/><title type='text'>Installing PostgreSQL 9.0 on Mac OS X 10.6.8 via MacPorts</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-xiBNHcpxjWE/TndsywouDGI/AAAAAAAAAoY/X3SPSn0bhcE/s1600/postgresql_logo-555px.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 175px;" src="http://3.bp.blogspot.com/-xiBNHcpxjWE/TndsywouDGI/AAAAAAAAAoY/X3SPSn0bhcE/s320/postgresql_logo-555px.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5654107476491897954" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;While installing PostgreSQL 9.0 on Mac OS X again, I had to figure out all these steps yet again. So I'm documenting this process for my own sake because I have been through this now twice on two computers recently, having to hunt down all of these commands each time. I'm hopeful that this will help others as well. &lt;br /&gt;&lt;br /&gt;Use the MacPorts command &lt;code&gt;port&lt;/code&gt; to install PostgreSQL 9.0, then create and own a data directory and a logs directory: &lt;br /&gt;&lt;pre class="brush: xml"&gt;&lt;br /&gt;$ sudo port install postgresql90-server&lt;br /&gt;$ sudo mkdir -p /opt/local/var/db/postgresql90/defaultdb&lt;br /&gt;$ sudo chown -R postgres:postgres /opt/local/var/db/postgresql90&lt;br /&gt;$ sudo mkdir -p /opt/local/var/log/postgresql90&lt;br /&gt;$ sudo chown -R postgres:postgres /opt/local/var/log/postgresql90&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now you need to initialize the database using the data directory that was created above: &lt;br /&gt;&lt;pre class="brush: xml"&gt;&lt;br /&gt;$ sudo -u postgres /opt/local/lib/postgresql90/bin/initdb -D /opt/local/var/db/postgresql90/defaultdb&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I prefer to change the postgres user's shell to bash: &lt;br /&gt;&lt;pre class="brush: xml"&gt;&lt;br /&gt;$ sudo dscl . -create /Users/postgres UserShell /bin/bash&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;View the postgres user account just to make sure it all looks OK: &lt;br /&gt;&lt;pre class="brush: xml"&gt;&lt;br /&gt;$ dscl . -read /Users/postgres&lt;br /&gt;AppleMetaNodeLocation: /Local/Default&lt;br /&gt;GeneratedUID: 5B38F583-CBBF-4082-A32D-C17947394A27&lt;br /&gt;NFSHomeDirectory: /opt/local/var/db/postgresql90&lt;br /&gt;Password: *&lt;br /&gt;PrimaryGroupID: 501&lt;br /&gt;RealName:&lt;br /&gt; PostgreSQL-90 Server&lt;br /&gt;RecordName: postgres&lt;br /&gt;RecordType: dsRecTypeStandard:Users&lt;br /&gt;UniqueID: 502&lt;br /&gt;UserShell: /bin/bash&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Also check the postgres group: &lt;br /&gt;&lt;pre class="brush: xml"&gt;&lt;br /&gt;$ dscl . -read /Groups/postgres&lt;br /&gt;AppleMetaNodeLocation: /Local/Default&lt;br /&gt;GeneratedUID: 715FEB22-D0F1-443F-BC93-55896210DB44&lt;br /&gt;Password: *&lt;br /&gt;PrimaryGroupID: 501&lt;br /&gt;RealName: postgres&lt;br /&gt;RecordName: postgres&lt;br /&gt;RecordType: dsRecTypeStandard:Groups&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now edit the &lt;code&gt;pg_hba.conf&lt;/code&gt; file to add the appropriate permissions: &lt;br /&gt;&lt;pre class="brush: xml"&gt;&lt;br /&gt;# "local" is for Unix domain socket connections only&lt;br /&gt;local   all             all                                     trust&lt;br /&gt;# IPv4 local connections:&lt;br /&gt;host    all             all             127.0.0.1/32            trust&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This should allow you to connect easily using the &lt;code&gt;psql&lt;/code&gt; utility. &lt;br /&gt;&lt;br /&gt;I prefer to use the &lt;code&gt;pg_ctl&lt;/code&gt; command to start and stop PostgreSQL. This is simply because I learned PostgreSQL on Linux and that's all there was. To prevent having to retype the full command every time I want to start or stop the database, create a start script and a stop script in the postgres user's home directory named &lt;code&gt;pg_start&lt;/code&gt; and &lt;code&gt;pg_stop&lt;/code&gt;. Below are the contents of the &lt;code&gt;pg_start&lt;/code&gt; file. Make sure to create these files  as the postgres user in the home directory: &lt;br /&gt;&lt;pre class="brush: xml"&gt;&lt;br /&gt;$ sudo su - postgres &lt;br /&gt;$ vim ./pg_start &lt;br /&gt;#!/bin/sh &lt;br /&gt;/opt/local/lib/postgresql90/bin/pg_ctl -D /opt/local/var/db/postgresql90/defaultdb -l /opt/local/var/log/postgresql90/postgres.log start &amp;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Below are the contents of the &lt;code&gt;pg_stop&lt;/code&gt; file: &lt;br /&gt;&lt;pre class="brush: xml"&gt;&lt;br /&gt;$ vim ./pg_stop &lt;br /&gt;#!/bin/sh &lt;br /&gt;/opt/local/lib/postgresql90/bin/pg_ctl -D /opt/local/var/db/postgresql90/defaultdb -l /opt/local/var/log/postgresql90/postgres.log stop&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Don't forget to make them executable: &lt;br /&gt;&lt;pre class="brush: xml"&gt;&lt;br /&gt;$ chmod +x ./pg_start &lt;br /&gt;$ chmod +x ./pg_stop&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;(There is a Mac OS X way of starting PostgreSQL using &lt;code&gt;launchctl&lt;/code&gt; but I don't tend to use that because I'm used to the standard &lt;code&gt;pg_ctl&lt;/code&gt; command.)&lt;br /&gt;&lt;br /&gt;Now use the &lt;code&gt;pg_start&lt;/code&gt; script to start up PostgreSQL. Execute it as the postgres user (&lt;code&gt;sudo su - postgres&lt;/code&gt;) I tend to cat the log file just to make sure it's running correctly: &lt;br /&gt;&lt;pre class="brush: xml"&gt;&lt;br /&gt;$ ./pg_start &lt;br /&gt;$ server starting&lt;br /&gt;&lt;br /&gt;$ cat ../../log/postgresql90/postgres.log &lt;br /&gt;LOG:  database system is ready to accept connections&lt;br /&gt;LOG:  autovacuum launcher started&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Looks good so we'll create my user: &lt;br /&gt;&lt;pre class="brush: xml"&gt;&lt;br /&gt;$ /opt/local/lib/postgresql90/bin/createuser bsnyder&lt;br /&gt;Shall the new role be a superuser? (y/n) y&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Because I made my user a superuser, I can create my own db schema, so log out of the postgres user account and back to my own account first: &lt;br /&gt;&lt;pre class="brush: xml"&gt;&lt;br /&gt;$ exit&lt;br /&gt;$ /opt/local/lib/postgresql90/bin/createdb&lt;br /&gt;CREATE DATABASE&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The &lt;code&gt;createdb&lt;/code&gt; command automatically uses my username as the schema name. &lt;br /&gt;&lt;br /&gt;The only thing left to do before starting up the database is edit your &lt;code&gt;~/.profile&lt;/code&gt; or &lt;code&gt;~/.bash_profile&lt;/code&gt; to put the path to the PosgreSQL bin directory into the PATH: &lt;br /&gt;&lt;pre class="brush: xml"&gt;&lt;br /&gt;export PATH=/opt/local/lib/postgresql90/bin:$PATH&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now just log into the PostgreSQL server using &lt;code&gt;psql&lt;/code&gt; to make sure we're ready to roll: &lt;br /&gt;&lt;pre class="brush: xml"&gt;&lt;br /&gt;$ psql&lt;br /&gt;-bash: psql: command not found&lt;br /&gt;bsnyder@skunk [darwin](DARWIN-1527) $ /opt/local/lib/postgresql90/bin/psql &lt;br /&gt;psql (9.0.4)&lt;br /&gt;Type "help" for help.&lt;br /&gt;&lt;br /&gt;bsnyder=# select version();&lt;br /&gt;                                                                 version                                                                  &lt;br /&gt;------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt; PostgreSQL 9.0.4 on x86_64-apple-darwin10.8.0, compiled by GCC i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5664), 64-bit&lt;br /&gt;(1 row)&lt;br /&gt;&lt;br /&gt;bsnyder=#&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;And we're good to go!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-9201245674781682753?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/9201245674781682753/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2011/09/installing-postgresql-90-on-mac-os-x.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/9201245674781682753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/9201245674781682753'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2011/09/installing-postgresql-90-on-mac-os-x.html' title='Installing PostgreSQL 9.0 on Mac OS X 10.6.8 via MacPorts'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-xiBNHcpxjWE/TndsywouDGI/AAAAAAAAAoY/X3SPSn0bhcE/s72-c/postgresql_logo-555px.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-5945749730625211587</id><published>2011-08-03T14:19:00.005-06:00</published><updated>2011-08-03T14:41:20.020-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cycling courage classic'/><title type='text'>Courage Classic Charity Ride 2011, Even Better Than 2007</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.couragetours.com/atf/cf/%7BBEF0E9C0-DC8A-4EF5-B9EC-6692EA0CB26B%7D/logo_cc_new.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 385px; height: 100px;" src="http://www.couragetours.com/atf/cf/%7BBEF0E9C0-DC8A-4EF5-B9EC-6692EA0CB26B%7D/logo_cc_new.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Every year I ride in a three-day cycling event in the Colorado Rocky Mountains named the &lt;a href=""&gt;Courage Classic&lt;/a&gt;. I participate in this ride every summer because it benefits the &lt;a href="http://www.childrenscoloradofoundation.org/"&gt;Children's Hospital Foundation&lt;/a&gt;, a wonderful cause that directly benefits many kids with life-saving care. To find out more, check out the website. &lt;br /&gt;&lt;br /&gt;In 2007, I wrote about &lt;a href="http://bsnyderblog.blogspot.com/2007/07/courage-classic-charity-ride-2007-with.html"&gt;riding the Courage Classic with my oldest daughter&lt;/a&gt;. That was a wonderfully proud moment for me as a parent. But this year was even better. &lt;br /&gt;&lt;br /&gt;For months now, my youngest daughter has been talking about riding the Courage Classic family day this year. We were never sure if she would actually do it or not, but we worked up to it by practicing and kept encouraging her. Not only did she ride the same little single-geared bike that her older sister rode over the 33 mile course from Copper Mountain to Breckenridge and back, she did it a year earlier -- and she's only eight years old!!! What really drove her, I found, is that she is one year younger than her older sister when she rode it for the first time. Ah, sibling rivalry has its positive moments. All along the entire course, people cheered her on and she got the biggest thrill from it. &lt;br /&gt;&lt;br /&gt;Not only did my eight-year-old ride for the first time, so did my wife and she did great. She's typically a runner and only likes casual bike riding, so I wasn't sure how it would go. A few days beforehand, I took her around &lt;a href="http://www.coloradobicyclerides.com/rides/turquoiseLake/turquoiseLake.html"&gt;Turquoise Lake&lt;/a&gt; near Leadville, CO (which is about 10,000 feet of elevation) as a training ride. She was not too excited by this choice as the last training ride for her, but she did admit that it helped her prepare and she really surprised me. &lt;br /&gt;&lt;br /&gt;So I got to ride with both my daughters and my wife on the second day of the ride this year. A memorable day indeed!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-5945749730625211587?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/5945749730625211587/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2011/08/courage-classic-charity-ride-2011-even.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/5945749730625211587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/5945749730625211587'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2011/08/courage-classic-charity-ride-2011-even.html' title='Courage Classic Charity Ride 2011, Even Better Than 2007'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-3095541730972457657</id><published>2011-08-02T10:41:00.005-06:00</published><updated>2012-01-03T09:21:21.013-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone water Apple Store'/><title type='text'>The iPhone is Not a Submarine But Apple Made My Day</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-t981NDmgzRc/Tjgo0ogTXrI/AAAAAAAAAm4/ULIPqYrWpt8/s1600/iphone-water.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 300px; height: 260px;" src="http://4.bp.blogspot.com/-t981NDmgzRc/Tjgo0ogTXrI/AAAAAAAAAm4/ULIPqYrWpt8/s320/iphone-water.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5636299818345389746" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This morning I got up at 5am to ride up Flagstaff Mountain with a friend. Soon after I got up I dropped my iPhone in water, totally submerging it. Great. What a wonderful start to my day. Obviously this rendered the phone completely dead. Excellent. So I rode this morning with my old iPod Shuffle, so that wasn't a big deal. But I didn't have a clock so I took my wristwatch and put it in my jersey pocket. &lt;br /&gt;&lt;br /&gt;In my second hour of riding I pulled the watch out of my jersey pocket (pockets are on the back of a bike jersey) and I dropped it on the rode. When I circled back and picked it up, I realized that one of the pins had bent and needed to be replaced. Not a big deal really as I've had this happen many times over the years. And there's a jewelry place right near the Apple Store I typically use. Still, that's strike number two for the day. I rode the third hour just waiting for the third bad thing to happen, but it never did. &lt;br /&gt;&lt;br /&gt;I just returned from the Apple Store and I'm glad to say that I was quite happily surprised. This phone was covered under AppleCare but it doesn't cover dropping your phone in water. Matteo at the Flatirons Crossing Apple Store informed me that Apple has a policy of leniency when it comes to your first major accident with your iPhone so he was able to basically give me a get out of jail free card and save me $200 (the cost of replacing an iPhone 3GS). What a surprise!!! I was prepared to pay the cost of replacement and be on my way. So I was very pleasantly surprised. &lt;br /&gt;&lt;br /&gt;As Matteo was filling out the necessary forms for the replacement, we chatted a bit. He asked me if I upgraded to Mac OS X Lion yet. I explained that I had not because I was speaking a &lt;a href="http://oscon.com/"&gt;conference in Portland&lt;/a&gt; last week and I didn't want to chance any issues with my laptop until that was done. This led him to asking me more about speaking at conferences and what I do for a living. After explaining that I'm a software engineer at VMware, his response was, 'We all &lt;b&gt;love&lt;/b&gt; VMware Fusion!" I agreed and explained that I use it often for testing and running other operating systems on Mac OS X. He said that folks inside Apple really prefer VMware because it's so reliable, which was nice to hear. &lt;br /&gt;&lt;br /&gt;Before leaving, I asked Matteo to help me find the AC adapter that plugs into the end of a USB cable. I left one in my hotel room in Portland last week so I needed to replace it. Unfortunately you cannot buy just the AC adapter, you must buy a new USB cable as well. But Matteo said, 'Hold on a minute, I'll be right back.' A minute later he returned with the very AC adapter I needed and said, 'Here you go, free of charge. Because you work for a cool company that we love. And I can see that you need a change of luck today." Wow! Yet another pleasant surprise!!! I think this might be a good day after all. Thanks, Matteo!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-3095541730972457657?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/3095541730972457657/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2011/08/iphone-is-not-submarine.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/3095541730972457657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/3095541730972457657'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2011/08/iphone-is-not-submarine.html' title='The iPhone is Not a Submarine But Apple Made My Day'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-t981NDmgzRc/Tjgo0ogTXrI/AAAAAAAAAm4/ULIPqYrWpt8/s72-c/iphone-water.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-5312705635601048711</id><published>2011-07-12T10:25:00.004-06:00</published><updated>2011-08-01T17:08:23.621-06:00</updated><title type='text'>Triple Bypass 2011</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-_nAGHEDHesE/ThsiTvVnQII/AAAAAAAAAmI/tCyDAN9VQfA/s1600/TRIPLELogo300.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 300px; height: 280px;" src="http://3.bp.blogspot.com/-_nAGHEDHesE/ThsiTvVnQII/AAAAAAAAAmI/tCyDAN9VQfA/s320/TRIPLELogo300.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5628129881849544834" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;On Saturday I rode the legendary &lt;a href="http://triplebypass.org/"&gt;Triple Bypass&lt;/a&gt;. Although this is the 23rd year of the event, this was my first year to participate and I completed it in 8h 10m riding time and I actually felt pretty good afterwards. &lt;br /&gt;&lt;br /&gt;The weather forecast called for thunderstorms throughout the day along the entire route. But I had a good run of luck and it didn't rain for nearly the entire day save for some sprinkles here and there. This was my biggest worry because once you are soaked your core gets cold, it's very difficult to warm it up again (I've experienced this before and the only thing that can warm me back up again is a big, hot cup of tea in my water bottle). &lt;br /&gt;&lt;br /&gt;The Triple Bypass begins in Evergreen, CO (elevation: 7,220ft) and goes over three mountain passes: &lt;ol&gt;&lt;li&gt;&lt;a href="http://mybicycleroutes.com/xsquawjuniperpassinfopage.html"&gt;Juniper Pass&lt;/a&gt;, elevation: 11,130ft&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Loveland_Pass"&gt;Loveland Pass&lt;/a&gt;, elevation: 11,990 ft&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Vail_Pass"&gt;Vail Pass&lt;/a&gt;, elevation: 10,617 ft&lt;/li&gt;&lt;/ol&gt; These make for over 10,000 feet of elevation gain through the day. Although I had a riding jacket with me, on both Juniper and Loveland passes, I could see  my breath and I was shivering, so I stayed only long enough for a bio break, bananas and water, then I took off again (except for Loveland Pass where there was no aid station). The ride ends in Avon, CO making the total mileage 120 miles (check out the &lt;a href="http://www.teamevergreen.org/sites/default/files/tbp2011/2011TripleMap.pdf"&gt;route map&lt;/a&gt;). &lt;br /&gt;&lt;br /&gt;By the time I made it to Copper Mountain and started the ascent up Vail Pass, I realized that my time was cutting short -- I had paid for a shuttle ride back to my car in Evergreen and it was scheduled to depart Avon at 5pm. So I didn't take it easy going up Vail Pass and I made it to the top at 3:55pm still with about 32 miles to go. After waiting in line for a bio break, and refueling as quickly as I could, I left the top of Vail Pass at 4:09pm. I pushed it all the way down the west side of Vail Pass and continued all the way through Vail, CO. I was lucky enough to hook up with another dude and we wound up taking turns drafting for one another, hammering the entire way. Just beyond Vail but before Beaver Creek, CO, my legs began to give out a bit, so I had to ease up some. At that point I tucked in with a group of four other riders and drafted again. But to keep up with them I had to muster the last ounces of power I had left in my legs to raise my cadence a bit to keep up. As we sailed through Beaver Creek, I was counting down the miles, just hoping that I was going to make it (I hadn't checked the time since I departed Vail Pass). We pounded on to Avon, around the corner to the finish and I stood up to drive it home. &lt;br /&gt;&lt;br /&gt;I immediately saw the transportation tent and headed there. Upon checking in, to my surprise, I found that I had actually made it - the bus had not yet departed back to Evergreen! As I checked in I looked at the time and it was 5:11pm. I had covered just over 30 miles in 1 hour! Although it was mostly downhill, it was still a tremendous amount of work after a long day, but I made it! I only had time to grab my bag from the luggage truck, no time for a bio break or even to grab water or food and the bus was off, headed back to Evergreen. &lt;br /&gt;&lt;br /&gt;As we crested Vail Pass, all of us on the bus were noting the number of riders that were still coming down the west side of Vail Pass and still climbing up the east side. Just then, the clouds suddenly opened up and it was an utter downpour. One bus companion said, 'Better them than me, dude!' My comment was, 'Oh that sucks bad, I've been there before!' because I have been caught in the same spot in another event twice during a downpour, so I know from experience that that meant downright misery. &lt;br /&gt;&lt;br /&gt;After dozing on the bus ride back, I picked up my car, stopped to gobble down a burrito and headed home. My wife was sorry that she and my girls could not be along the route at various locations throughout the day for mental support as they usually are, but I understood and knew ahead of time that they couldn't be there. She asked me if I'd do it again and my response: 'Yes, definitely!' What a ride in the beautiful Colorado Rocky Mountains! &lt;br /&gt;&lt;br /&gt;BTW, there were many riders I spoke to during the day who were doing the inaugural &lt;b&gt;Double&lt;/b&gt; Triple Bypass. That is, on Saturday you ride 120miles from Evergreen to Avon and then on Sunday you turn around and go back. Maybe I will consider doing that next year, we'll see.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-5312705635601048711?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/5312705635601048711/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2011/07/triple-bypass-2011.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/5312705635601048711'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/5312705635601048711'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2011/07/triple-bypass-2011.html' title='Triple Bypass 2011'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-_nAGHEDHesE/ThsiTvVnQII/AAAAAAAAAmI/tCyDAN9VQfA/s72-c/TRIPLELogo300.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-4238620347519900312</id><published>2011-07-08T14:49:00.011-06:00</published><updated>2011-07-08T16:05:59.410-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ActiveMQ FUD'/><title type='text'>Commercial Vendor Spreads FUD About ActiveMQ</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-grjDxW8CMs4/Thdt2PHdhPI/AAAAAAAAAmA/NIJ7ca9D1tA/s1600/fud.gif"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 263px; height: 123px;" src="http://3.bp.blogspot.com/-grjDxW8CMs4/Thdt2PHdhPI/AAAAAAAAAmA/NIJ7ca9D1tA/s320/fud.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5627087037960914162" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It has come to my attention that a particular commercial integration and messaging vendor is actively spreading FUD about ActiveMQ. &lt;br /&gt;&lt;br /&gt;In an official letter that was sent out yesterday, this vendor called out numerous aspects of ActiveMQ, claiming that each is a problem with ActiveMQ and their product 'resolves all of these issues'. Only one of the items mentioned in the list holds any merit. So let's first take a look at the letter and then I will address each item in turn: &lt;br /&gt;&lt;br /&gt;Here is the official letter that was sent by the company's media relations: &lt;br /&gt;&lt;br /&gt;============================================================&lt;br /&gt;&amp;lt;quote&amp;gt;&lt;i&gt;&lt;br /&gt;From: Fiorano Software &lt;media-relations@in.fiorano.com&gt;&lt;br /&gt;Date: Thu, Jul 7, 2011 at 6:22 PM&lt;br /&gt;Subject: Graduating from ActiveMQ for Enterprise Class Messaging&lt;br /&gt;&lt;br /&gt;Dear Joe ,&lt;br /&gt;&lt;br /&gt;If you are an ActiveMQ user, you may very likely be experiencing some or all of the following issues:&lt;br /&gt;&lt;br /&gt;1. Poor Performance or limitation on speed - particularly for persistent queues and topics.&lt;br /&gt;&lt;br /&gt;2. Stability issues or loss of messages, specially with clustering enabled.&lt;br /&gt;&lt;br /&gt;2. Poor Documentation - difficult to quickly find what you're looking for or even with paid support you are unable to troubleshoot the problem.&lt;br /&gt;&lt;br /&gt;3. Poor Reliability - when a broker goes down, do clients auto-reconnect when the broker comes up again?&lt;br /&gt;&lt;br /&gt;4. Inadequate Technical Support - No clear directions/answers from Technical Support - for instance, if you wish to perform memory tuning, do you get clear instructions promptly?&lt;br /&gt;&lt;br /&gt;5. Inability to handle "peak loads" - when there's a peak-load condition, does the broker tend to fail?&lt;br /&gt;&lt;br /&gt;6. Scaling only with new hardware?&lt;br /&gt;&lt;br /&gt;FioranoMQ resolves all of the above issues. With Fiorano, you have the best performance in the industry (for both queues and topics, persistent and non-persistent), responsive and accurate technical support, proven reliability, solid documentation and enterprise-class scalability — all of which adds up to dramatically reduced development and deployment times, with a maintenance cost lower than that of ActiveMQ and other open-source offerings.&lt;br /&gt;&lt;br /&gt;To get started, download FioranoMQ now, at http://www.fiorano.com/downloads/login.php?prod=fmq &lt;br /&gt;or contact us via email or phone to get more information.&lt;br /&gt;&lt;br /&gt;Regards,&lt;br /&gt;The Fiorano Team&lt;br /&gt;info@fiorano.com&lt;br /&gt;+1-408-354-3210&lt;/i&gt;&lt;br /&gt;&amp;lt;/quote&amp;gt;&lt;br /&gt;============================================================&lt;br /&gt;&lt;br /&gt;Just so you are clear, I did not write this letter. It is an official message sent out by the commercial integration and messaging vendor. Not only has this vendor posted the message on their website: &lt;br /&gt;&lt;br /&gt;http://www.fiorano.com/newsletters/ActiveMQ_Issues_July_2011.html&lt;br /&gt;&lt;br /&gt;They even tweeted about it: &lt;br /&gt;&lt;br /&gt;http://twitter.com/#!/FioranoGlobal/status/89193558032134144&lt;br /&gt;&lt;br /&gt;(Yes, I know those are not live URLs. I refuse to provide a live links to be picked up by the Google spider.)&lt;br /&gt;&lt;br /&gt;So now let's walk through each point in this message, providing some discussion as we go. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Claim #1: Poor Performance or limitation on speed&lt;/b&gt; - This is rather broad statement and I'm sure that's on purpose. The idea when spreading FUD is to be as broad as possible. This way your statements can act as a catch-all for any problems that a user might be experiencing and loop them in based more on emotion rather than fact.&lt;br /&gt;&lt;br /&gt; ActiveMQ can certainly provide poor performance if it is not configured correctly. You can do the same with any software that is not configured correctly. From time to time, I have dealt with performance related issues with ActiveMQ on consulting engagements. As I comb through configurations and code to take a look at a situation, many times I find that either the broker or the client are not configured correctly or there's something about the user's code or application design that plays into this scenario. Occasionally a user has asked about providing a better configuration out of the box for ActiveMQ to address a given problem. The answer is that we already do -- ActiveMQ distributions provide a configuration out of the box that should support middle of the road use cases. Problems arise with specific use cases or in a specific environment, etc. There are far, far too many use cases to provide a single configuration that will work with anything anyone might ever dream up. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Claim #2: Stability issues or loss of messages, specially with clustering enabled.&lt;/b&gt; - Loss of messages? Really?! Do you think if ActiveMQ actually lost messages that it would be as popular as it is? But blaming the clustering is ingenious for one single reason -- most users don't know enough about the ActiveMQ clustering that they are apt to believe that this claim is true. The only scenario where a user might perceive that messages have gone missing is one where messages get stuck on a particular broker in the cluster. Again, configuration plays a big role in getting clustering set up correctly as does proper application design. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Claim #3: Poor Documentation&lt;/b&gt; - This is the only claim that holds any truth, but it's only really half true. The ActiveMQ documentation is certainly lacking. However, the ActiveMQ website does hold a wealth of information. The real problem with it is finding what you need. Although some vendors who provide support for ActiveMQ have attempted to provide improved docs (e.g., notably &lt;a href="http://fusesource.com/products/enterprise-activemq/#documentation"&gt;the documentation for the Fuse Message Broker&lt;/a&gt;). This is exactly why Rob, Dejan and I wrote a book about ActiveMQ titled &lt;a href="http://bit.ly/2je6cQ"&gt;ActiveMQ in Action&lt;/a&gt;. We're quite proud of the book because it does provide markedly better documentation for ActiveMQ. If you need better info on ActiveMQ, pick up a copy. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Claim #4: Poor Reliability - when a broker goes down, do clients auto-reconnect when the broker comes up again?&lt;/b&gt; - This particular claim makes it clear that this vendor has little to no knowledge of ActiveMQ. This is exactly why the ActiveMQ &lt;a href="http://activemq.apache.org/failover-transport-reference.html"&gt;failover transport&lt;/a&gt; was created. In short, the failover transport provides a JMS client automatic reconnection in the event that an ActiveMQ broker goes down or just becomes unreachable. The failover transport is extremely configurable in order to deal with many different scenarios including the ability to delay the initial reconnection, to set a max number of reconnect attempts, to exponentially increase the wait period between attempts and much more. In the ActiveMQ 5.4 release, the failover transport introduced a new feature to provide &lt;a href="http://bsnyderblog.blogspot.com/2010/10/new-features-in-activemq-54-automatic.html"&gt;automatic cluster updates and broker rebalancing to JMS clients&lt;/a&gt;.  The failover transport is highly powerful and strongly recommended, so I'm surprised that this was overlooked. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Claim #5: Inadequate Technical Support&lt;/b&gt; - Based on the vendors listed on the &lt;a href="http://activemq.apache.org/support.html"&gt;ActiveMQ support page&lt;/a&gt;, there are now at least five companies providing support for ActiveMQ. And I even know of a company that provides support which is not listed there, &lt;a href="http://www.savoirtech.com/activemq"&gt;Savoir Technologies&lt;/a&gt;. If you are paying for ActiveMQ support and you are not happy, I encourage you to either speak to your vendor about it or find one that works better for you. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Claim #6: Inability to handle "peak loads"&lt;/b&gt; - This is a claim against ActiveMQ that I have never once heard from a user. They are essentially asking you if at the time where your business experiences a spike in the amount of messages it is handling, does ActiveMQ fail on you. Yet again, if you are truly experiencing this, then you need to take a serious look at your system design. I have helped many customers successfully address issues of scale through a number of means including some intelligent sharding of JMS client connections across a cluster of ActiveMQ brokers, use of a virtual IP address and even use of a load balancer. If ActiveMQ had a habit of failing for users during peak loads, I would have heard about it at least once. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Claim #7: Scaling only with new hardware?&lt;/b&gt; - This claim is similar to claim number 4 and really makes it clear to me that whoever compiled this list is not familiar with ActiveMQ. Did they bother to search the ActiveMQ site? Here is just one page on the site from the FAQ titled &lt;a href="http://activemq.apache.org/how-do-i-configure-10s-of-1000s-of-queues-in-a-single-broker-.html"&gt;How do I configure 10s of 1000s of Queues in a single broker ?&lt;/a&gt;. Furthermore, Rob, Dejan and I clearly explain how to scale ActiveMQ both vertically and horizontally in our book. Again, this really depends on the situation and the environment, there is no single silver bullet solution. &lt;br /&gt;&lt;br /&gt;Addressing each of these claims was actually quite easy for me to do. And I hope that each of the vendors providing professional consulting services and technical support for ActiveMQ are aware of the tactics being used by this commercial integration and messaging vendor. It sounds to me like ActiveMQ has become a real threat to this vendor's business.&lt;br /&gt;&lt;br /&gt;I will leave you with a quote: &lt;br /&gt;&lt;br /&gt;"First they ignore you, then they ridicule you, then they fight you, and then you win." &lt;br /&gt;— Mahatma Gandhi&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-4238620347519900312?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/4238620347519900312/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2011/07/commercial-vendor-spreading-fud-about.html#comment-form' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/4238620347519900312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/4238620347519900312'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2011/07/commercial-vendor-spreading-fud-about.html' title='Commercial Vendor Spreads FUD About ActiveMQ'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-grjDxW8CMs4/Thdt2PHdhPI/AAAAAAAAAmA/NIJ7ca9D1tA/s72-c/fud.gif' height='72' width='72'/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-4836324971227436777</id><published>2011-07-05T11:47:00.009-06:00</published><updated>2011-07-06T07:30:58.881-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cycling boulder colorado'/><title type='text'>Favorite Rides Around Boulder, Colorado</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-pWP6DCtiKMc/ThNgrF4sH3I/AAAAAAAAAi8/SkYDHp_jH_U/s1600/ilovemybike.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px;" src="http://2.bp.blogspot.com/-pWP6DCtiKMc/ThNgrF4sH3I/AAAAAAAAAi8/SkYDHp_jH_U/s320/ilovemybike.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5625946652946472818" /&gt;&lt;/a&gt;&lt;br /&gt;A couple of the my favorite training rides here in the Boulder valley area include the climb up Flagstaff Mountain and the climb to Ward, CO. Neither of these rides are anything that you can just walk out your front door with zero preparation and expect to enjoy. But with the proper training, I really love being out riding these routes and being outdoors. On Saturday I did Flagstaff Mountain twice and on Sunday I rode to Ward in an effort to train for more difficult upcoming rides in the Rocky Mountains. &lt;br /&gt;&lt;br /&gt;I always start at my home in Louisville, CO, so that always adds a sort of warm up of about 10 miles to get to the base of Flagstaff Mountain, so round trip that's 20 miles. Then the &lt;a href="http://www.mapmyride.com/s/routes/view/bike-ride-map/colorado/boulder/392607"&gt;climb up Flagstaff&lt;/a&gt; which is always great. As you can see in the linked info, there are two parts to the climb. The first half of climb goes to the amphitheater park where there is an amazing lookout over the Boulder valley and that is considered a Category 2 climb. The second half goes up to the top of the mountain and is considered a Category 1 climb. Here is some &lt;a href="http://303cycling.com/flagstaff-hill-climb-boulder-colorado"&gt;more information on the Flagstaff climb&lt;/a&gt; from the 303cycling.com website (run by my friend Kris Thompson). As Kris has termed it, the climb up Flagstaff is definitely a Boulder classic! I tend to climb to the amphitheater park more often than I go to the top and I always do this climb two or three times when I ride it (climb to the amphiteater, go back down, climb to the amphitheater again, etc.). The second half of the Flagstaff climb is definitely not for the faint at heart, it's a killer. Average grade is a whopping 11%  -- 2142ft. of climbing in a little over 5 miles! If you need water on this climb, you need to make sure to stop at Chatauqua Park at the base either on the way up or the way down, because there's nothing up on top but homes. &lt;br /&gt;&lt;br /&gt;On a sidenote, there is another ride I do on my mountain bike that is called Super Walker. This ride includes riding to Flagstaff, climbing all the way to the top of Flagstaff, going down the back side to the &lt;a href="http://www.singletracks.com/bike-trails/walker-ranch.html"&gt;Walker Ranch trailhead&lt;/a&gt; and around the trail, then back up to the top of Flagstaff and all the way down to Chataqua park and back to Louisville, CO. The ride itself takes around four hours if I recall correctly. I did it three times in the Spring right after I got a new mountain bike. But then I experienced a couple of soccer injuries that set back my training and I haven't ridden it since then. I have kinda been waiting to get past the &lt;a href="http://triplebypass.org/"&gt;Triple Bypass&lt;/a&gt; ride next weekend before I do this one again. The ride to get to Walker Ranch is about 20 miles, so round trip that's 40 miles and the Walker Ranch trail itself is 7 miles. Add in the climbing and elevation gains and you've got one hell of a mountain bike ride. (A neighbor asked me last week if this climb is more difficult on a mountain bike or a road bike. Because of difference in gearing between a road bike and a mountain bike, the Super Walker ride is definitely much more difficult on a mountain bike.) &lt;br /&gt;&lt;br /&gt;Another favorite climb is up Lefthand Canyon to Ward, CO, about 20 miles west of Boulder. Ward is a former mining settlement near the Peak-to-Peak Highway (SH 72) with a population of under 200 and a little general store where all the cyclists stop. The general store carries snacks, ice, water and has a port-o-let toilet that is paid for by donations, so drop a couple bucks in the kitty on top of the water cooler when you're there. Just to get to the start of Lefthand Canyon road is about 20 miles, so that's 40 miles round trip. Then up the canyon to Ward is about another 16 miles -- all of which is climbing and that last mile is atrocious! So the distance is not too bad and the grade of the climb is not too bad, but the climb is constant. So the mileage plus the 16 miles of climbing makes for one tough a workout! &lt;br /&gt;&lt;br /&gt;I know that many other folks in the area do these rides as well, because I see many people when I'm out. But I tend to do them alone just because it's difficult to work out schedules with others. I like to ride in the morning before the heat kicks in because, once it does in the afternoon, my fluid and food intake really increases. I have also done other rides throughout the area, but these tend to be a couple of my favorites, mainly because they're practically in my back yard.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-4836324971227436777?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/4836324971227436777/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2011/07/favorite-rides-around-boulder-colorado.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/4836324971227436777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/4836324971227436777'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2011/07/favorite-rides-around-boulder-colorado.html' title='Favorite Rides Around Boulder, Colorado'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-pWP6DCtiKMc/ThNgrF4sH3I/AAAAAAAAAi8/SkYDHp_jH_U/s72-c/ilovemybike.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-3245575038281226057</id><published>2011-07-01T12:23:00.003-06:00</published><updated>2011-07-01T12:46:26.567-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cobb cycling saddle tubes air cartridges'/><title type='text'>New Cobb Cycling Saddle</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.cobbcycling.com/cart/images/store/shc170_black.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px;" src="http://www.cobbcycling.com/cart/images/store/shc170_black.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;After dealing with numbness that began last season during long rides on my road bike, this week I'm in the process of testing out a new saddle. &lt;br /&gt;&lt;br /&gt;My previous saddle (a Selle Italio San Marcos) was causing severe numbness after long rides which obviously is not good. Evidently it wore out to the point that it was a hazard, though it never did fit me that well. After looking around at online many different saddle recommendations in forums, blogs, etc., I couldn't find any consistency anywhere. I saw so many recommendations for so many saddles I didn't know where to start. So I decided to head over to &lt;a href="http://coloradomultisport.com/"&gt;Colorado Multisport&lt;/a&gt; to see what they might recommend. I have trusted their recommendations in the past and they have served me well. &lt;br /&gt;&lt;br /&gt;After trying a few saddles that didn't thrill me at all, Geoff pulled out a brand that was new to me -- &lt;a href="http://cobbcycling.com/"&gt;Cobb Cycling&lt;/a&gt;. I tried a few models and found that I really liked the &lt;a href="http://cobbcycling.com/cart/SHC_C1P8.cfm"&gt;Cobb Cycling SHC&lt;/a&gt;.  Of course it's difficult to determine in a 10 minute period while spinning on a trainer if a saddle is right for you, so I checked out the saddle for the week and I've been riding it ever since. Let me say that after dealing with the previous ill-fitted saddle for so long, it has been a pleasure to ride this saddle. &lt;br /&gt;&lt;br /&gt;I learned a few years ago to never, ever go out riding without at least one extra tube (if not two) and air cartridges. Presumably you may need a tube if you experience a flat (patching a road tube is near impossible because they're so thin), the second tube I refer to as a karma tube because I have given away a few to other folks who I come across who are stranded with a flat and no supplies. I prefer to carry air cartridges because they are smaller and so much more reliable than a pump. I never had a good experience with a travel pump, so I tried cartridges and never looked back. So the only question I had left about this new saddle was about a bag to carry the all important tubes and air. &lt;br /&gt;&lt;br /&gt;CMS had no recommendations and searching online rendered no recommendations. So I decided to call Cobb Cycling to see what they might recommend, especially since the Cervelo seat post is a tear-drop shape instead of a round shape. I figured I'd speak to a sales rep or a mechanic type who might be able to offer me something. About 30 minutes after leaving a message, surprisingly, John Cobb himself called me back. Although he didn't have a solid recommendation for a specific bag, he offered me a couple tips from his experience in fitting Cobb saddles on Cervelos. &lt;br /&gt;&lt;br /&gt;Thanks for taking the time to speak with customers, John!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-3245575038281226057?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/3245575038281226057/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2011/07/new-cobb-cycling-saddle.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/3245575038281226057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/3245575038281226057'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2011/07/new-cobb-cycling-saddle.html' title='New Cobb Cycling Saddle'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-2722634100741891131</id><published>2011-06-28T21:49:00.000-06:00</published><updated>2011-07-01T12:51:41.660-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cycling boulder sunrise century triple bypass'/><title type='text'>Boulder Sunrise Century</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.bikerpelli.com/Sunrise_Century/images_sponsors/Sunrise-2011-Primal.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 192px; height: 215px;" src="http://www.bikerpelli.com/Sunrise_Century/images_sponsors/Sunrise-2011-Primal.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A couple weeks ago I rode the &lt;a href="http://www.bikerpelli.com/Sunrise_Century/"&gt;Boulder Sunrise Century&lt;/a&gt;. This was the second year I rode it and this year was a bit different than last year. &lt;br /&gt;&lt;br /&gt;Last year I chose to ride the 100 mile option. This added an extra 25 miles between Ward, CO and Nederland, CO. It's a long downhill which means that the climb back up from Ned to Ward was quite difficult -- I'll be honest, it was GRUELING!. Unfortunately this year my training schedule leading up to this event was not optimal. I was not training consistently because life got in the way. Because of this, I chose to do the 75 mile option instead of the 100 mile option. This was a good choice but even that was not enough latitude because I battled leg cramps for about an hour in the middle of the ride to Ward. Once I hit the aid station in Ward, I downed three bananas, tons of liquid and kept going. From there it's 20 miles of downhill so I had some time to tuck in behind a couple of very strong riders and fly for the entire 20 miles. After downing some food and hitting such a long downhill portion, I felt much better and was able to finish in much better shape. Let's just say the results of this event motivated me ;-). &lt;br /&gt;&lt;br /&gt;Since that event, I have gotten into a consistent summer training regimen. Being that my next ride is the famed &lt;a href="http://triplebypass.org/"&gt;Triple Bypass&lt;/a&gt;, I knew I needed to get my butt in gear. 120 miles over three mountain passes in one day requires it! More on that ride in another post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-2722634100741891131?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/2722634100741891131/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2011/07/boulder-sunrise-century.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/2722634100741891131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/2722634100741891131'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2011/07/boulder-sunrise-century.html' title='Boulder Sunrise Century'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-6128013800597517242</id><published>2011-06-08T16:33:00.001-06:00</published><updated>2011-07-05T10:59:47.334-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='music ben harper relentless7'/><title type='text'>Ben Harper Live in Denver, CO</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-Se3H8SOmClc/Tg-dKh2FAcI/AAAAAAAAAi0/cT4LGQ7kO6g/s1600/relentless7.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 170px; height: 155px;" src="http://1.bp.blogspot.com/-Se3H8SOmClc/Tg-dKh2FAcI/AAAAAAAAAi0/cT4LGQ7kO6g/s320/relentless7.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5624887263818482114" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Last night Matt Good, &lt;a href="http://raibledesigns.com/"&gt;Matt Raible&lt;/a&gt;, Trish and I went to see Ben Harper with Relentless7 in Denver and it was an incredible show! &lt;br /&gt;&lt;br /&gt;I haven't seen Ben Harper in a few years and the last time I did his original band, The Innocent Criminals, was playing with him. They were an amazingly talented set of musicians that I had already enjoyed for many years on their records. So I was pleasantly surprised at the caliber of musicians who is Relentless7. This show was so good, and Ben Harper was so outstanding, it was like a religious experience! The crowd and the band enjoyed the show so much that they came out for three or four encoures which is fairly unheard of in the live music scene. &lt;br /&gt;&lt;br /&gt;Now I'm looking forward to our next show at Red Rocks in July, &lt;a href="http://www.soundgardenworld.com/"&gt;Soundgarden&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-6128013800597517242?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/6128013800597517242/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2011/06/ben-harper-live-in-denver-co.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/6128013800597517242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/6128013800597517242'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2011/06/ben-harper-live-in-denver-co.html' title='Ben Harper Live in Denver, CO'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-Se3H8SOmClc/Tg-dKh2FAcI/AAAAAAAAAi0/cT4LGQ7kO6g/s72-c/relentless7.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-2533418676711752726</id><published>2011-04-18T08:26:00.005-06:00</published><updated>2011-04-18T09:12:30.047-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='soccer injury'/><title type='text'>Injuries Suck</title><content type='html'>&lt;iframe title="YouTube video player" width="480" height="390" src="http://www.youtube.com/embed/drqvpR4j4D0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;If only my footwork was as talented as some of the players in this video, I probably wouldn't write code for a living! Although I have played soccer nearly all my life, I haven't sustained injuries that stopped me from playing since I was in high school when I fully severed my right &lt;a href="http://en.wikipedia.org/wiki/Anterior_cruciate_ligament"&gt;ACL&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;A few years ago, my wife and I began playing in a coed indoor soccer league on Friday nights on a team of friends. Last year, she sustained a hip injury during a game that took her out of all sports for a couple months while it healed. Luckily she healed well and got back to running and soccer. Well this spring it seems is my turn with the injuries. &lt;br /&gt;&lt;br /&gt;About five weeks ago I sustained an injury to some ribs that left them pretty badly bruised and they are still not 100% healed (I still cannot sleep on my left side!). Then about 10 days ago, a swift kick to the lower, inside of the tibia just above the ankle and just outside my shin guards caused a sizable hematoma on my leg. It's basically a pocket of blood that forms under the skin when the wall of a blood vessel is damaged and allows blood to flow into the surrounding tissue. Not only is the area of the injury very swollen and discolored, but it has caused my entire ankle and heel to swell and discolor. The photo below looks similar to my injury but mine is on the inside of the tibia. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-WMsZ2Sjj_Lk/TaxRsF1hsUI/AAAAAAAAAhU/w-VQCr10ix8/s1600/soccer_injury_ankle.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 240px; height: 169px;" src="http://4.bp.blogspot.com/-WMsZ2Sjj_Lk/TaxRsF1hsUI/AAAAAAAAAhU/w-VQCr10ix8/s320/soccer_injury_ankle.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5596938254837461314" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I applied ice to the injury all week, and then began alternating heat treatments near the end of the week. After wrapping it up good, I decided to  play on Friday night. What a mistake that wound up being. Near the end of the first half, I was checked into the boards causing my ankles to smack together right on the hematoma. Needless to say that took me out for the game, barely able to walk on the injured leg. &lt;br /&gt;&lt;br /&gt;As I awoke on Saturday morning because of the pain in my leg, I had reserved myself to the thought of rest until it heals. The doctor told me that it could take up to four months for this to heal! I was stunned when he told me this. He also said if the hematoma didn't go away on it's own, it could require a surgical procedure. Geez! As much as I love playing soccer, I guess I will have to stop until this injury is healed. Well I guess I will be playing more guitar and cycling :-).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-2533418676711752726?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/2533418676711752726/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2011/04/injuries-suck.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/2533418676711752726'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/2533418676711752726'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2011/04/injuries-suck.html' title='Injuries Suck'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/drqvpR4j4D0/default.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-7405435691090776289</id><published>2011-04-17T18:14:00.004-06:00</published><updated>2011-04-17T18:38:21.593-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='guitar'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><title type='text'>Playing Guitar</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-kZck_bj2a54/TauCaIzWlMI/AAAAAAAAAhM/vYeW7Q1h6Ik/s1600/guitar.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 231px; height: 219px;" src="http://4.bp.blogspot.com/-kZck_bj2a54/TauCaIzWlMI/AAAAAAAAAhM/vYeW7Q1h6Ik/s320/guitar.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5596710347489055938" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Since we finished the &lt;a href="http://bit.ly/2je6cQ"&gt;ActiveMQ in Action&lt;/a&gt; book recently, I actually have some spare time now. So I've began to get back into playing guitar. I'm not especially talented, but I have always enjoyed strumming chords and playing rhythm guitar. &lt;br /&gt;&lt;br /&gt;Every week, my girls take piano lessons from a friend whose husband taught them both kindergarten at a nearby Montessori school. The couple are both accomplished musicians and really enjoy teaching music. She plays guitar, piano and sings; he plays guitar and sings. We've seen them play together and they are very complimentary together. So recently I decided to take some guitar lessons from the husband while the wife teaches my girls piano. &lt;br /&gt;&lt;br /&gt;It's funny to learn that collaboration means just as much in playing a musical instrument as it does in writing code. When I collaborate with others and actually write code with them, I tend to learn a lot more than when I just sit in a corner writing code. So far, the same is true for playing guitar. Sitting at home, playing by myself seems so much more limiting than playing even once a week with my friend. He has been a musician for many years, is very talented and is also a gifted teacher. &lt;br /&gt;&lt;br /&gt;For many years now, when I'm solving problems with the work I do and I get stuck, I tend to grab my guitar to clear my mind. Playing for even just 5 or 10 minutes can help me see a problem more clearly. I know that taking a walk with my dogs would do the same thing, but I can't go out for multiple walks during the day. But I can quickly grab my guitar, play for a brief period of time and then get back to work. Oftentimes when I do this, I'm able to immediately solve a problem that I've been working on for a while. &lt;br /&gt;&lt;br /&gt;Something I know about myself is that I enjoy constant learning. When I stop learning, I tend to lose interest in whatever I'm doing. Getting back into playing guitar and learning again is a breath of fresh air. I have known this for years, but it's nice to be reminded of it again. &lt;br /&gt;&lt;br /&gt;Though I'm still playing on a cheap acoustic guitar I bought many years ago in college through &lt;a href="http://www.musiciansfriend.com/"&gt;Musician's Friend&lt;/a&gt;, I'm still having fun. But I'm realizing again why most people don't stick with guitar when they are first learning. Typically, cheap guitars are not easy to play. Your fingers begin to hurt and your hands can cramp rather quickly with a cheap guitar. I've simply been trying to play though this recently and it's starting to become a problem. So now I'm wondering about graduating to a nicer guitar that is easier to play. When something is easy to do, you tend to want to do it more often. Playing a nice Taylor guitar in a shop recently reminded me of this. Though I don't think I want to spend that kind of money, I do have something different in mind. More on that in a future post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-7405435691090776289?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/7405435691090776289/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2011/04/playing-guitar.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/7405435691090776289'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/7405435691090776289'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2011/04/playing-guitar.html' title='Playing Guitar'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-kZck_bj2a54/TauCaIzWlMI/AAAAAAAAAhM/vYeW7Q1h6Ik/s72-c/guitar.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-241753740435003952</id><published>2011-04-05T14:01:00.000-06:00</published><updated>2011-04-17T18:10:41.046-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='activemq book jms'/><title type='text'>ActiveMQ In Action Now Available</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-y5AGA_LwgIk/TWvRn6EPztI/AAAAAAAAAfc/VG8xPfQvbSc/s180/cover-art.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 144px; height: 180px;" src="http://4.bp.blogspot.com/-y5AGA_LwgIk/TWvRn6EPztI/AAAAAAAAAfc/VG8xPfQvbSc/s180/cover-art.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bit.ly/2je6cQ"&gt;ActiveMQ in Action&lt;/a&gt; is now available in print! After the long road of writing the book, it's very nice to actually see it in print. One of the first things I noticed about the final PDF was the color in the images. Manning did a very nice job of adding color. I've already had four people mention to me that they really like the colored images. &lt;br /&gt;&lt;br /&gt;One really nice thing about Manning print books is that they include  a complimentary ebook which comes in three formats: PDF, mobi, and epub when available. So if buy the print book, you will get an electronic copy include at no additional charge. This can be very handy when you don't care to lug around a print book wherever you go, but you would still like to search it for particular items. &lt;br /&gt;&lt;br /&gt;If you want to learn about ActiveMQ and JMS, pick up your copy of &lt;a href="http://bit.ly/2je6cQ"&gt;ActiveMQ in Action&lt;/a&gt; today!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-241753740435003952?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/241753740435003952/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2011/04/activemq-in-action-now-available.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/241753740435003952'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/241753740435003952'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2011/04/activemq-in-action-now-available.html' title='ActiveMQ In Action Now Available'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-y5AGA_LwgIk/TWvRn6EPztI/AAAAAAAAAfc/VG8xPfQvbSc/s72-c/cover-art.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-2765602338095988857</id><published>2011-03-15T20:59:00.001-06:00</published><updated>2011-07-01T12:06:26.822-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bike bicycle cycling'/><title type='text'>Why I Love My Bike</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-YLf0AdXBmcI/TZX8CNTGRtI/AAAAAAAAAhE/mOwtJZywCq8/s1600/ilovemybike.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 320px;" src="http://2.bp.blogspot.com/-YLf0AdXBmcI/TZX8CNTGRtI/AAAAAAAAAhE/mOwtJZywCq8/s320/ilovemybike.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5590651627310040786" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ever since I first learned to ride a bike, I have loved it. My mom and dad taught me to ride a little blue Schwinn bicycle when I was four or five years old. I remember learning very quickly to skid down the sidewalk across some gravel and I thought I was so cool. But just riding my bike made me happy and to this day that is still true. &lt;br /&gt;&lt;br /&gt;As a kid, riding a bike meant freedom. I could ride just about everywhere I needed to go in the small town where I grew up in Illinois. And nearly everything we did as kids included riding our bikes. We rode to school, to the park, to soccer practice, to swim practice; I even began going out on the road to neighboring towns. Not only did I enjoy it, but it was good transportation until I was old enough to drive. But even then I kept riding my bike when I could. &lt;br /&gt;&lt;br /&gt;During my college years, I bought my first mountain bike. Friends and I would go out riding together in the parks and wooded areas around where we lived and we loved it. Then, a couple years after graduating from college, we moved to Colorado. Then I really got a taste for true mountain biking and it has been in my blood ever since. &lt;br /&gt;&lt;br /&gt;When we first moved from Illiniois to Colorado in 1995, one of the reasons we came was for the outdoor activities all year round. Mountain biking was number one on my list and I was out riding in the mountains practically every weekend back then. A few years later, we started our family and our lifestyle really changed (raising kids will do that to you). &lt;br /&gt;&lt;br /&gt;When our girls were really young, they had miniature big wheels and then small bikes with training wheels. But once they each got old enough, I got to teach them to ride without the training wheels. For me, this was definitely a highlight of their younger years. Seeing how much they loved it is difficult to describe. Seeing the look on their faces as they realized that they were pedaling all on their own is such a memorable moment. Riding a bike is something I hope will stick with them for the rest of their lives. Every time I see my kids on their bikes, it makes me smile. &lt;br /&gt;&lt;br /&gt;To this day, I still ride my bike and I still love it. Though I've moved on to more serious mountain biking and road cycling, part of what I love about it is being outside, seeing the beautiful scenery and getting away from the computer. After all, living in Colorado, I no longer need to look in books and magazines to see such amazing sights. I just go outside and ride my bike to see them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-2765602338095988857?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/2765602338095988857/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2011/04/why-i-love-my-bike.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/2765602338095988857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/2765602338095988857'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2011/04/why-i-love-my-bike.html' title='Why I Love My Bike'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-YLf0AdXBmcI/TZX8CNTGRtI/AAAAAAAAAhE/mOwtJZywCq8/s72-c/ilovemybike.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-3822683369599705310</id><published>2011-03-08T10:05:00.004-07:00</published><updated>2011-03-08T10:39:04.076-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='activemq book jms'/><title type='text'>ActiveMQ In Action Going to Print!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_pSHP7VYSIjE/TQhLx-NFMrI/AAAAAAAAAeg/NgrJw7-JLgc/s1600/cover-art.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 150px;" src="http://3.bp.blogspot.com/_pSHP7VYSIjE/TQhLx-NFMrI/AAAAAAAAAeg/NgrJw7-JLgc/s320/cover-art.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5550769862617674418" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This week we received the final cover art for &lt;a href="http://bit.ly/2je6cQ"&gt;ActiveMQ In Action&lt;/a&gt; and the book went to the printer! Yay!!! It's been a long road, but Dejan, Rob and I can finally celebrate all our hard work on this project. &lt;br /&gt;&lt;br /&gt;You can &lt;a href="http://twitpic.com/47ikv7"&gt;check out the cover art here&lt;/a&gt; and be sure to mouse over the image and click the link to view the full size. &lt;br /&gt;&lt;br /&gt;There are certainly many people to whom we owe a great deal of gratitude including: &lt;ul&gt;&lt;li&gt;&lt;b&gt;Jeff Bleiel&lt;/b&gt;, our development editor - Without Jeff's input, the book would not be what it is today&lt;/li&gt;&lt;li&gt;&lt;b&gt;Gary Tully&lt;/b&gt; For his tireless technical reviews of the entire book&lt;/li&gt;&lt;li&gt;&lt;b&gt;The Manning staff&lt;/b&gt; - For their arduous work on the book&lt;/li&gt;&lt;li&gt;&lt;b&gt;Filip Hanik&lt;/b&gt; - For his assistance with Tomcat&lt;/li&gt;&lt;li&gt;&lt;b&gt;Jan Bartel and Greg Wilkins&lt;/b&gt; - For their assistance with Jetty&lt;/li&gt;&lt;li&gt;&lt;b&gt;David Jencks and Kevan Miller&lt;/b&gt; - For their assistance with Geronimo&lt;/li&gt;&lt;li&gt;&lt;b&gt;Jaikiran Pai&lt;/b&gt; - For his assistance with JBoss&lt;/li&gt;&lt;/ul&gt; &lt;br /&gt;We would also like to thank the following list of reviewers who read the manuscript at different stages during its development and provided valuable feedback:&lt;ul&gt;&lt;li&gt;Jeff Davis&lt;/li&gt;&lt;li&gt;Deepak Vohra&lt;/li&gt;&lt;li&gt;Robert Hanson&lt;/li&gt;&lt;li&gt;Davide Piazza&lt;/li&gt;&lt;li&gt;David Strong&lt;/li&gt;&lt;li&gt;Tijs Rademakers&lt;/li&gt;&lt;li&gt;Prasad A. Chodavarapu&lt;/li&gt;&lt;li&gt;John Merryman&lt;/li&gt;&lt;li&gt;Jeroen Benckhuijsen&lt;/li&gt;&lt;li&gt;Pratik Patel&lt;/li&gt;&lt;li&gt;Scott Dawson&lt;/li&gt;&lt;li&gt;Jason Kolter&lt;/li&gt;&lt;li&gt;Rod Biresch&lt;/li&gt;&lt;li&gt;Roberto Rojas&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Finally, a big thanks to the readers of Manning’s Early Access Program (MEAP) releases of the book for their comments and input via the &lt;a href="http://www.manning-sandbox.com/forum.jspa?forumID=496"&gt;Author Online forum&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;We authored the book using DocBook XML and it was processed using the Docbkx Tools Maven plug-in on Mac  OS X (To those folks who keep asking about my experience with DocBook, yes, it is worth it! Shoot me an email if you have any questions). Other items that went into the book include MacBook Pros, Google Docs, GMail, Foonz (until it shut down), FreeConferenceCall.com, barking dogs during conference calls, company acquisitions, lots and lots of music, loud construction next door, sleepless nights, too much work on airplanes, and plain old exhaustion.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-3822683369599705310?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/3822683369599705310/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2011/03/activemq-in-action-going-to-print.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/3822683369599705310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/3822683369599705310'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2011/03/activemq-in-action-going-to-print.html' title='ActiveMQ In Action Going to Print!'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_pSHP7VYSIjE/TQhLx-NFMrI/AAAAAAAAAeg/NgrJw7-JLgc/s72-c/cover-art.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-422581676947777550</id><published>2011-02-23T11:12:00.006-07:00</published><updated>2011-02-23T13:43:48.430-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='activemq camel jms'/><title type='text'>ActiveMQ and Message Redelivery</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-As38Kca0ecE/TWVUSkrKa8I/AAAAAAAAAfU/i87-4hsJtq8/s1600/usps-redelivery.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 210px; height: 170px;" src="http://4.bp.blogspot.com/-As38Kca0ecE/TWVUSkrKa8I/AAAAAAAAAfU/i87-4hsJtq8/s320/usps-redelivery.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5576956391627320258" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Today I helped a customer with a problem in their use of ActiveMQ where messages were getting backed up in a particular queue. It seems that messages in the queue would back up when a downstream process was not available. But this downstream process was only unavailable for a short period of time in the middle of the night for routine maintenance. However, this seems to have caused an ongoing problem for this customer. &lt;br /&gt;&lt;br /&gt;We looked at the JVM memory, the broker memory and the queue memory configs each of which was kinda low so I recommended that it be increased (though this was not the problem). I also recommended setting &lt;tt&gt;org.apache.activemq.UseDedicatedTaskRunner=false&lt;/tt&gt; to reduce the number of dispatcher threads being used internally by the broker and to consider the use of the &lt;a href="http://activemq.apache.org/configuring-version-5-transports.html#ConfiguringVersion5Transports-TheNIOTransport"&gt;NIO transport&lt;/a&gt; instead of the &lt;a href="http://activemq.apache.org/tcp-transport-reference.html"&gt;TCP transport&lt;/a&gt; to reduce the number of threads used for connections coming into the broker. &lt;br /&gt;&lt;br /&gt;As we dug deeper, I looked at the number of consumers on the queue and found that there were 256 &lt;i&gt;Apache Camel&lt;/i&gt; consumers in total, none of which was marked as being slow. The consumers were using the ActiveMQ &lt;tt&gt;PooledConnectionFactory&lt;/tt&gt; with the default settings (1 connection and 500 sessions). The consumer &lt;a href="http://activemq.apache.org/what-is-the-prefetch-limit-for.html"&gt;prefetch limit&lt;/a&gt; was already set to 1 so I knew that this was not a problem. However, while looking at the settings for the connection, I noticed that there was a &lt;a href="http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/processor/RedeliveryPolicy.html"&gt;Camel &lt;tt&gt;RedeliveryPolicy&lt;/tt&gt;&lt;/a&gt; set as well. Setting a redelivery policy is not a problem, but the values in it can be a problem if they are not verified. &lt;br /&gt;&lt;br /&gt;The settings being used for the Camel &lt;tt&gt;RedeliveryPolicy&lt;/tt&gt; included the following:&lt;ul&gt;&lt;li&gt; &lt;tt&gt;maximumRedeliveries=-1&lt;/tt&gt;: This means that redelivery attempts will continue forever (i.e., infinite)&lt;/li&gt;&lt;li&gt; &lt;tt&gt;useExponentialBackOff=true&lt;/tt&gt;: This means that the upon each successive delivery attempt, the amount of delay used will double (because the &lt;tt&gt;backoffMultiplier&lt;/tt&gt; property is set to 2 by default)&lt;/li&gt;&lt;li&gt; &lt;tt&gt;maximumRedeliveryDelay=36000000&lt;/tt&gt;: This means that the maximum amount of delay that can occur for a given message is 36000000 milliseconds -- yikes that's high! It wasn't until I actually did the math that I saw that 36000000 milliseconds = 10 hours!!!&lt;/li&gt;&lt;/ul&gt;When you stop and think about the combination of these settings, the problem becomes apparent. Once the exponential backoff causes the maximum redelivery delay for a given message to be reached, that message will be delayed for 10 hours. And if that message experiences another redelivery it will endure the maximum amount of redelivery time again, 10 hours. Geez! (I hazard a guess that the value for the &lt;tt&gt;maximumRedeliveryDelay&lt;/tt&gt;  was a simple typo of adding an extra zero. Without the extra zero, it  would have been only one hour, not 10 hours.) &lt;br /&gt;&lt;br /&gt;I then offered the following advice on dealing with the problem. &lt;ol&gt;&lt;li&gt;Using JMX, move the messages from the current queue to a different queue temporarily (let's refer to this different queue as the sandbox1 queue). Make sure that there are no consumers on the sandbox1 queue so you can work on them without a worry that they will be consumed right out from under you.&lt;/li&gt;&lt;li&gt;Using Camel, consume the message&lt;/li&gt;&lt;li&gt;Using Camel, copy the body and any headers to a new message, but skip the &lt;tt&gt;JMSRedelivered&lt;/tt&gt; header. You may also need to avoid the &lt;tt&gt;JMSmessageID&lt;/tt&gt; header as well since I think it is used to track a message for redelivery. By not copying the &lt;tt&gt;JMSRedelivered&lt;/tt&gt; header on each message it will be stripped.&lt;/li&gt;&lt;li&gt;Using Camel, put the message into sandbox2 queue.&lt;/li&gt;&lt;li&gt;Manually check each one to make sure that the &lt;tt&gt;JMSRedelivered&lt;/tt&gt; header is actually empty/false.&lt;/li&gt;&lt;li&gt;Using JMX, move the messages back to the original queue for the correct consumption and processing.&lt;/li&gt;&lt;/ol&gt;This is the only way that I can think to escape the 10 hour delay imposed on each message.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-422581676947777550?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/422581676947777550/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2011/02/activemq-and-message-redelivery.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/422581676947777550'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/422581676947777550'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2011/02/activemq-and-message-redelivery.html' title='ActiveMQ and Message Redelivery'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-As38Kca0ecE/TWVUSkrKa8I/AAAAAAAAAfU/i87-4hsJtq8/s72-c/usps-redelivery.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-8764853952592216848</id><published>2011-02-15T08:18:00.000-07:00</published><updated>2011-02-15T08:23:43.297-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='docbook'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><category scheme='http://www.blogger.com/atom/ns#' term='activemq in action'/><category scheme='http://www.blogger.com/atom/ns#' term='authoring'/><title type='text'>How to Access the DocBook DTDs When oasis-open.org Blocks You</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-VNgldzMA87c/TVnlDkrMw9I/AAAAAAAAAfM/qljb2k6pxnw/s1600/docbookLogoShadow.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 129px; height: 124px;" src="http://2.bp.blogspot.com/-VNgldzMA87c/TVnlDkrMw9I/AAAAAAAAAfM/qljb2k6pxnw/s320/docbookLogoShadow.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5573737863394935762" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Have you ever used the DocBook DTDs (or XSDs) and been blocked by the oasis-open.org website after a handful of accesses to them? If so, here's how to work around this problem. Granted, the solution I offer is specifically for Mac OS X, as long as you can run a webserver on your operating system, the same solution will still work (after all, Mac OS X is really just BSD Unix).&lt;br /&gt;&lt;br /&gt;While working on the &lt;a href="http://bit.ly/2je6cQ"&gt;ActiveMQ In Action&lt;/a&gt; book, we were originally using the DocBook 4.5 DTD directly from the oasis-open.org website. Every time I built the book to transform the DocBook XML into PDFs, the Maven build would access the DTDs directly. Pretty standard stuff when the DTDs are not already packaged in a JAR so that they can be accessed locally. I wasn't happy with build ing needing to grab these DTDs for every iteration, but since I have a fast connection it wasn't a big deal for me. However, after a very short period of time, the oasis-open.org website blocked me from accessing the DTDs. This was a pain because it caused the build to fail. To work around this problem, here's what I did. &lt;br /&gt;&lt;br /&gt;I simply downloaded the DTDs and related files that I needed, put the DTD and friends in &lt;tt&gt;/Library/WebServer/Documents/docbook/xml/4.5/&lt;/tt&gt; directory on my local hard drive and added the following entry to the &lt;tt&gt;/etc/hosts&lt;/tt&gt; file so that any requests to oasis-open.org to point to my local machine: &lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;127.0.0.1 www.oasis-open.org&lt;br /&gt;&lt;/pre&gt; &lt;br /&gt;&lt;br /&gt;Then I just started up web sharing on the MacBook Pro I used to work on the book and voila! I no longer had to access the DTDs online anymore and the fact that oasis-open.org blocked my IP address didn't matter anymore. &lt;br /&gt;&lt;br /&gt;This really wasn't a big deal for me, but I question the motive for making the DTDs publicly available and HTTP accessible if there are rules for accessing them. Why not post work arounds such as this to the oasis-open.org site? Why not just simply post a page of rules for accessing them? Of course, these items may be posted somewhere and I just wasn't able to find them. If so, that's a problem as well. Hint! Hint!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-8764853952592216848?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/8764853952592216848/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2010/04/how-to-work-around-docbook-dtds-when.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/8764853952592216848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/8764853952592216848'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2010/04/how-to-work-around-docbook-dtds-when.html' title='How to Access the DocBook DTDs When oasis-open.org Blocks You'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-VNgldzMA87c/TVnlDkrMw9I/AAAAAAAAAfM/qljb2k6pxnw/s72-c/docbookLogoShadow.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-7058628221662688901</id><published>2010-12-14T21:54:00.010-07:00</published><updated>2010-12-20T09:50:46.442-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ActiveMQ In Action Tomcat Spring'/><title type='text'>ActiveMQ and Tomcat Articles + 40% Discount on ActiveMQ In Action</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_pSHP7VYSIjE/TQhLx-NFMrI/AAAAAAAAAeg/NgrJw7-JLgc/s1600/cover-art.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 150px;" src="http://3.bp.blogspot.com/_pSHP7VYSIjE/TQhLx-NFMrI/AAAAAAAAAeg/NgrJw7-JLgc/s320/cover-art.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5550769862617674418" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As I mentioned here in late October, &lt;a href="http://bit.ly/2je6cQ"&gt;ActiveMQ In Action&lt;/a&gt; entered Manning's pre-production process, the final process of review and editing before actually printing the book. While working through this process, I was asked to write an article for &lt;a href="http://tomcatexpert.com/"&gt;TomcatExpert.com&lt;/a&gt; website so I decided to pull a bit of content from one of the chapters that discusses integrating ActiveMQ and Tomcat.&lt;br /&gt;&lt;br /&gt;The first article in the three-part series was published titled, &lt;a href="http://www.tomcatexpert.com/blog/2010/12/13/activemq-and-tomcat-perfect-partners"&gt;ActiveMQ and Tomcat: Perfect Partners&lt;/a&gt;. The first article briefly introduces ActiveMQ and the second and third articles provides the details on integrating ActiveMQ with Tomcat using both local JNDI and global JNDI. These two approaches are unique enough and the integration process tricky enough that this info was determined to be good content for an article.&lt;br /&gt;&lt;br /&gt;The second article in the series is named &lt;a href="http://www.tomcatexpert.com/blog/2010/12/16/integrating-activemq-tomcat-using-local-jndi"&gt;Integrating ActiveMQ With Tomcat Using Local JNDI &lt;/a&gt;. It covers the integration of ActiveMQ using a local JNDI context. I've had many people come to me who have encountered issues with this style of integration, so I know it can be confusing. &lt;br /&gt;&lt;br /&gt;The third article in this series is &lt;a href="http://www.tomcatexpert.com/blog/2010/12/20/integrating-activemq-tomcat-using-global-jndi"&gt;Integrating ActiveMQ With Tomcat Using Global JNDI&lt;/a&gt; and it focuses on configuring JMS resources using global a JNDI context. The global JNDI configuration can be rather difficult because it is a container-wide deployment instead of contained inside of a single web application. &lt;br /&gt;&lt;br /&gt;The example application used in the articles comes straight from chapter 8 of ActiveMQ In Action and uses a simple message flow. An HTML form is used to post a message to a queue in ActiveMQ that is consumed by the Spring message listener container. Whereas this example model is simple to demonstrate the power lies in using this model in a more distributed manner and/or with a stand alone ActiveMQ instance. This topic is popular enough that I've been asked numerous times about so I guess it's a good thing it was included in the book.&lt;br /&gt;&lt;br /&gt;Just in time for the holidays, you can get 40% off your purchase of &lt;a href="http://bit.ly/2je6cQ"&gt;ActiveMQ In Action&lt;/a&gt;! Just use the coupon code *activemq40* at the time of checkout. Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-7058628221662688901?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/7058628221662688901/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2010/12/activemq-and-tomcat-articles-40.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/7058628221662688901'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/7058628221662688901'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2010/12/activemq-and-tomcat-articles-40.html' title='ActiveMQ and Tomcat Articles + 40% Discount on ActiveMQ In Action'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_pSHP7VYSIjE/TQhLx-NFMrI/AAAAAAAAAeg/NgrJw7-JLgc/s72-c/cover-art.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-6350091470425155990</id><published>2010-10-26T10:24:00.007-06:00</published><updated>2011-02-28T09:01:14.717-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='activemq jms rebalance'/><title type='text'>New Features in ActiveMQ 5.4: Automatic Cluster Update and Rebalance</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_pSHP7VYSIjE/TMcBSqRwMxI/AAAAAAAAAeQ/CTvCfbON9TE/s1600/activemq-5.x-box-reflection.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 216px; height: 242px;" src="http://4.bp.blogspot.com/_pSHP7VYSIjE/TMcBSqRwMxI/AAAAAAAAAeQ/CTvCfbON9TE/s320/activemq-5.x-box-reflection.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5532392087345967890" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Apache ActiveMQ 5.4.0 was released in August, followed quickly in September by a 5.4.1 release. Not only were there tons of fixes in these releases, but there were also some really great new features including message scheduling, support for web sockets, new Unix control scripts, full message priority, producer message caching and cluster client updates and cluster client rebalancing just to name a few. In this blog post, I'm going to discuss the new &lt;a href="http://activemq.apache.org/failover-transport-reference.html#FailoverTransportReference-BrokersideOptionsforFailover"&gt;cluster client updates and cluster client rebalancing&lt;/a&gt; features so that you get a taste of how they are used. &lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Problem Introduction&lt;/h3&gt;&lt;br /&gt;When using a &lt;a href="http://activemq.apache.org/networks-of-brokers.html"&gt;network of brokers&lt;/a&gt; with ActiveMQ, the configuration of the brokers that form the network has always been rather static. The first step toward a more dynamic network of brokers was a feature I presented in a previous blog post titled &lt;a href="http://bsnyderblog.blogspot.com/2010/01/how-to-use-automatic-failover-in.html"&gt;How to Use Automatic Failover In an ActiveMQ Network of Brokers&lt;/a&gt;. In the event of a broker connection failure, the use of the failover transport for the network connections between brokers allows those connections to be automatically reestablished. This is a wonderful feature for sure, but it only got us part of the way toward a truly dynamic cluster of brokers. &lt;br /&gt;&lt;br /&gt;Two new features in ActiveMQ 5.4 introduce the concept of making the cluster of brokers even more dynamic. These two items are the ability to: &lt;ul&gt;&lt;li&gt;Update the clients in the cluster&lt;/li&gt;&lt;li&gt;Rebalance the brokers in the cluster&lt;/li&gt;&lt;/ul&gt; Both of these features are quite interesting so I will explain how each one works. &lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Update Cluster Clients&lt;/h3&gt;&lt;br /&gt;In the past, when clients connected to brokers in the cluster, it was recommended to keep a comma-separated list of broker URIs in the failover transport configuration. Below is an example of this style of configuration: &lt;br /&gt;&lt;br /&gt;&lt;code&gt;failover:(tcp://machineA:61616,tcp://machineB:61616,tcp://machineC:61616)?randomize=false&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The failover configuration example above lives on the client side and contains a static list of the URIs for each broker in the cluster. In the event that a broker in the cluster fails, the failover transport is what allows a client to automatically reconnect to another broker in that list of broker URIs. Unfortunately this style of configuration can be difficult to maintain because it is static. If you want to add another broker to the cluster, every client's failover transport configuration must be updated manually. Depending on the number of clients in your cluster, this could really be a maintenance headache. This is where the first new features comes to the rescue. &lt;br /&gt;&lt;br /&gt;ActiveMQ 5.4 provides the ability to automatically update the clients in the cluster. That is, if a new broker joins or leaves the existing network of brokers, the clients' failover transport configurations no longer need to be manipulated manually. Using configuration options on the broker, you can tell the broker to update each client's failover transport configuration automatically. Below is an example of this new feature: &lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;broker brokerName="brokerA" ...&amp;gt;&lt;br /&gt;  ...&lt;br /&gt; &amp;nbsp;&amp;lt;transportConnectors&amp;gt;&lt;br /&gt; &amp;nbsp; &amp;nbsp;&amp;lt;transportConnector name="tcp-connector" uri="tcp://192.168.0.23:61616" updateClusterClients="true" /&amp;gt;  &lt;br /&gt;  &amp;nbsp;&amp;lt;/&amp;lt;transportConnectors&amp;gt;&lt;br /&gt;  ...&lt;br /&gt;&amp;lt;/broker&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The configuration above is on the broker-side. Notice the new attribute in the &lt;tt&gt;&amp;lt;transportConnector&amp;gt;&lt;/tt&gt; element named &lt;tt&gt;updateClusterClients=true&lt;/tt&gt;. This attribute is used in conjunction with the failover transport on the client-side and it tells the broker to automatically update the client's failover transport configuration when the network topology changes. In addition to the &lt;tt&gt;updateClusterClients=true&lt;/tt&gt; property, there are also a few others including: &lt;ul&gt;&lt;li&gt;&lt;tt&gt;updateClusterClientsOnRemove&lt;/tt&gt; - Updates a client when brokers are removed from the cluster.&lt;/li&gt;&lt;li&gt;&lt;tt&gt;updateClusterFilter&lt;/tt&gt; - A comma-separated list of regexes to match broker names that are part of the cluster. This allows flexibility for the inclusion/exclusion of brokers.&lt;/li&gt;&lt;li&gt;&lt;tt&gt;updateURIsURL&lt;/tt&gt; - Used to provide the path to a file containing a comma-separted list of broker URIs.&lt;/li&gt;&lt;/ul&gt; These new features are extremely powerful because they allow for a much more dynamic network of brokers configuration. Anyone who has had to deal with the static nature of the failover transport configuration should understand the power in these new features and do some experimentation to see how they operate. &lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Rebalance Cluster Clients&lt;/h3&gt;&lt;br /&gt;The second new feature also builds upon the failover transport configuration, but for a slightly different purpose. Consider the fact that when a new broker is added to/removed from the cluster that clients cannot automatically take advantage of it. Even with the new ability to update the clients so that they have knowledge of the broker being added/removed, there was no way previously for them to actually use that broker unless a failure occurred. Well that's what this feature does. &lt;br /&gt;&lt;br /&gt;ActiveMQ 5.4 allows clients to be automatically disconnected from their current broker and reconnect to a different broker. Here's an example to illustrate this feature. Let's say you have a cluster of three brokers: brokerA, brokerB and brokerC, each of which has some clients connected. When a new broker is added to the cluster, if the &lt;tt&gt;updateClusterClients&lt;/tt&gt; property is set to true, then the clients will be notified about the new broker, but no action will be taken unless the &lt;tt&gt;rebalanceClusterClients&lt;/tt&gt; property is set to true. When the &lt;tt&gt;rebalanceClusterClients&lt;/tt&gt; property is set to true, the clients will be automatically be disconnected from their current broker in order to reconnect to another broker in the cluster. Below is an example configuration for the new rebalance property: &lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;broker brokerName="brokerA" ...&amp;gt;&lt;br /&gt;  ...&lt;br /&gt; &amp;nbsp;&amp;lt;transportConnectors&amp;gt;&lt;br /&gt; &amp;nbsp; &amp;nbsp;&amp;lt;transportConnector name="tcp-connector" uri="tcp://192.168.0.23:61616" updateClusterClients="true" rebalanceClusterClients="true" /&amp;gt;  &lt;br /&gt;  &amp;nbsp;&amp;lt;/&amp;lt;transportConnectors&amp;gt;&lt;br /&gt;  ...&lt;br /&gt;&amp;lt;/broker&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Notice the new &lt;tt&gt;rebalanceClusterClients&lt;/tt&gt; attribute in the &lt;tt&gt;&amp;lt;transportConnector&amp;gt;&lt;/tt&gt; element. This property enables the clients to immediately take advantage of the new broker in the cluster. Instead of waiting for the next connection failure and a reconnect from the failover transport, the clients are told to reconnect immediately to another broker in their list. &lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Testing The New Features&lt;/h3&gt;&lt;br /&gt;Testing these two new features is pretty easy actually. Below are the steps I have used on a few occasions: &lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Make sure that your clients are logging the broker URI to which they are connected for sending or receiving messages&lt;/li&gt;&lt;li&gt;Configure each client to only have one broker URI in its failover transport configuration&lt;/li&gt;&lt;li&gt;Configure the transport connector on the broker-side to set the &lt;tt&gt;updateClusterClients&lt;/tt&gt; property to true and the &lt;tt&gt;rebalanceClusterClients&lt;/tt&gt; property to true&lt;/li&gt;&lt;li&gt;Start up the brokers in your cluster&lt;/li&gt;&lt;li&gt;Start up the clients that connect to a broker in the cluster&lt;/li&gt;&lt;li&gt;Add a new broker to the cluster and observe the following behavior:&lt;/li&gt;&lt;/ol&gt; Due to the two new properties that have been set on the broker-side, each client will be notified of the new broker that was added to the cluster AND each client will automatically reconnect. That is, the functionality of the failover transport will be engaged so that each client is disconnected from the current broker and reconnected to another broker in the list (i.e., the list of broker URIs in the failover transport configuration). &lt;br /&gt;&lt;br /&gt;The fact that each client reconnects to a new broker tells you that: &lt;ol&gt;&lt;li&gt;The &lt;tt&gt;updateClusterClients&lt;/tt&gt; property is working correctly because you should see the logging change from one broker URI to another. Remember that each client was started with only one broker URI in their failover transport config. The fact that they are reconnecting tells you that they are receiving notifications of changes to the cluster.&lt;/li&gt;&lt;li&gt;The &lt;tt&gt;rebalanceClusterClients&lt;/tt&gt; property is working properly because the clients reconnected.&lt;/li&gt;&lt;/ol&gt; Verify this using the logging from each client. You will see that each client was sending or receiving messages to/from one broker URI and suddenly the logging changes to another broker URI. This tells you that the clients are being updated and rebalanced. &lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Conclusion&lt;/h3&gt;&lt;br /&gt;These new features are quite powerful additions to the ActiveMQ network of brokers. They really advance ActiveMQ beyond the static configurations upon which we have all relied for many years now. Most likely the sys admins and dev ops folks will enjoy these features the most because they will no longer need to manually manage a static list of broker URIs for clients. &lt;br /&gt;&lt;br /&gt;As I said earlier, many other great features were also introduced in &lt;a href="http://activemq.apache.org/activemq-541-release.html"&gt;ActiveMQ 5.4 and 5.4.1&lt;/a&gt;. So try them out yourself to see if they help to improve your application development.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update:&lt;/b&gt; If you only set the &lt;tt&gt;updateClusterClients="true"&lt;/tt&gt; and the &lt;tt&gt;rebalanceClusterClients="true"&lt;/tt&gt; options, you will notice that when a broker in the network fails and is brought back up, the client connections to other brokers in the network are not automatically rebalanced. This is due to the lack of the &lt;tt&gt; updateClusterClientsOnRemove="true" &lt;/tt&gt; option. After adding this option to the config, network broker clients are notified of broker failures which basically completes the circle and allows the automatic rebalancing to work as it should.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-6350091470425155990?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/6350091470425155990/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2010/10/new-features-in-activemq-54-automatic.html#comment-form' title='39 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/6350091470425155990'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/6350091470425155990'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2010/10/new-features-in-activemq-54-automatic.html' title='New Features in ActiveMQ 5.4: Automatic Cluster Update and Rebalance'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_pSHP7VYSIjE/TMcBSqRwMxI/AAAAAAAAAeQ/CTvCfbON9TE/s72-c/activemq-5.x-box-reflection.png' height='72' width='72'/><thr:total>39</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-7984620970223827897</id><published>2010-10-26T09:07:00.004-06:00</published><updated>2010-10-26T09:33:10.175-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='activemq book jms'/><title type='text'>40% Off ActiveMQ In Action To Celebrate Going Into Production!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.manning.com/snyder/snyder_cover150.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 150px; height: 188px;" src="http://www.manning.com/snyder/snyder_cover150.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Good news -- &lt;a href="http://www.manning.com/affiliate/idevaffiliate.php?id=1063_140"&gt;ActiveMQ In Action&lt;/a&gt; has now entered the Manning production process! This means that we are done with the writing of content for the book and it is currently being copy edited and undergoing technical review. In fact, we are currently seeking reviewers for the book. If you are interested to review the book, please send an email to  &lt;a href="mailto:mkt@manning.com"&gt;mkt@manning.com&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Also, we are currently offering 40% off your purchase of ActiveMQ In Action! Just use the coupon code *activemq40* at the time of checkout. Hurry and make your purchase today as this discount won't last long!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-7984620970223827897?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/7984620970223827897/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2010/10/40-off-activemq-in-action-to-celebrate.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/7984620970223827897'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/7984620970223827897'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2010/10/40-off-activemq-in-action-to-celebrate.html' title='40% Off ActiveMQ In Action To Celebrate Going Into Production!'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-903926399993118535</id><published>2010-10-25T20:13:00.006-06:00</published><updated>2010-10-26T10:19:52.985-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='springone java groovy grails'/><title type='text'>SpringOne 2GX 2010 in Chicago</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_pSHP7VYSIjE/TMb1STEAYrI/AAAAAAAAAeI/oKZ91dDIfBs/s1600/SpringOne2GX-logo_small.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 252px; height: 69px;" src="http://2.bp.blogspot.com/_pSHP7VYSIjE/TMb1STEAYrI/AAAAAAAAAeI/oKZ91dDIfBs/s320/SpringOne2GX-logo_small.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5532378886974759602" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Last week I attended our annual &lt;a href="http://springone.com/"&gt;SpringOne 2GX&lt;/a&gt; developer conference and I saw many excellent presentations by many different folks. As is common at a developer conference, there were numerous times where I was torn by the decision to attend one talk and not another due to time scheduling. Probably the most intriguing talk I attended was a &lt;i&gt;Technical deep-dive of hypervisors and virtualization for developers&lt;/i&gt; by Richard McDougall. I learned a lot about virtualization that I didn't know and, as always, Richard's depth of knowledge on this topic is completely impressive! But my favorite talk was one delivered by my friends Dave Syer and Mark Fisher titled &lt;i&gt;Concurrent and Distributed Applications with Spring&lt;/i&gt;. &lt;br /&gt;&lt;br /&gt;I always enjoy discussions, books, articles, etc. on the topic of Java concurrency, but Dave and Mark's session was different. In the same vein as the &lt;a href="http://www.javaconcurrencyinpractice.com/"&gt;Java Concurrency in Practice&lt;/a&gt; book, Dave and Mark brought a practicality to the topic that really scored a goal with the attendees. When I go to conferences I tend to judge sessions not solely based on my own opinion, but moreso on the opinion of other attendees. Not only was this session completely packed, but it stayed packed the entire time, i.e., people were not walking out early. This was due to the way that Dave and Mark delivered a difficult topic in a way that all Java developers can understand. What many of the conference sessions, books, articles, etc. have in common when presenting Java concurrency is that they don't seek to simplify the content and present it in a way that makes it easier to understand. Dave and Mark really tore down most of the complexity with Java concurrency and presented it in a way that makes it seem approachable. In fact, I saw more people taking notes in this session than in any other that I attended. They also provided hands-on examples that were simplified and to the point. I think that they could have gone on discussing this topic for another 90 minutes and people would have stayed. Now, aren't you jealous that you weren't there?! &lt;br /&gt;&lt;br /&gt;Other excellent sessions included:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Gaining visibility into enterprise Spring applications with tc server Spring Edition by Steve Mayzak&lt;/li&gt;&lt;li&gt;Clustering and load-balancing with tc Server and httpd by Mark Thomas&lt;/li&gt;&lt;li&gt;Mastering MVC 3 by Keith Donald&lt;/li&gt;&lt;li&gt;Developer Tools to push your Productivity by Andy Clement and Christian Dupuis&lt;/li&gt;&lt;li&gt;What's new in Spring Integration 2.0? by Mark Fisher and Oleg Zhurakousky&lt;/li&gt;&lt;li&gt;Diagnosing Performance Issues, with Spring Insight, Before it's a Problem  by Scott Andrews and Jon Travis&lt;/li&gt;&lt;li&gt;Spring and Java EE 6 by Juergen Hoeller&lt;/li&gt;&lt;li&gt;Payments in one API by John Davies and Rossen Stoyanchev&lt;/li&gt;&lt;li&gt;How to build business applications using Google Web Toolkit and Spring Roo by Amit Manjhi&lt;/li&gt;&lt;li&gt;Harnessing the power of HTML5 by Scott Andrews and Jeremy Grelle&lt;/li&gt;&lt;li&gt;Case Study: EMC Next-Generation ERP Integration Architecture by Brian Dussault and Tom McCuch&lt;/li&gt;&lt;li&gt;Case Study: Migrating Hyperic HQ from EJB to Spring by Jennifer Hickey&lt;/li&gt;&lt;li&gt;Monitoring Spring Batch and Spring Integration with SpringSource Hyperic by Dave Syer&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;There were also tons of really great Groovy and Grails talks such as: &lt;br /&gt;&lt;ul&gt;&lt;li&gt;Transforming to Groovy by Venkat Subramaniam&lt;/li&gt;&lt;li&gt;GORM Inside And Out by Jeff Brown&lt;/li&gt;&lt;li&gt;Improving your Groovy Code Quality by Venkat Subramaniam&lt;/li&gt;&lt;li&gt;Tuning Grails applications by Peter Ledbrook&lt;/li&gt;&lt;li&gt;Unit and Functional Testing using Groovy by Venkat Subramaniam&lt;/li&gt;&lt;li&gt;Groovy and Concurrency by Paul King&lt;/li&gt;&lt;li&gt;Tomorrow's Tech Today: HTML 5 + Grails by Scott Davis&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;So if you didn't make it to SpringOne this year, now you have just a taste of what you missed. And hopefully you have good reason to consider attending next year. Any guesses on where the conference might take place next year? Of course, I'm rooting for Boulder, CO. Adam? Are you listening? ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-903926399993118535?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/903926399993118535/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2010/10/springone-2gx-2010-in-chicago.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/903926399993118535'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/903926399993118535'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2010/10/springone-2gx-2010-in-chicago.html' title='SpringOne 2GX 2010 in Chicago'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_pSHP7VYSIjE/TMb1STEAYrI/AAAAAAAAAeI/oKZ91dDIfBs/s72-c/SpringOne2GX-logo_small.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-9146231487862929287</id><published>2010-05-21T08:30:00.003-06:00</published><updated>2010-12-21T10:35:13.379-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='activemq in action'/><title type='text'>50% Off ActiveMQ In Action!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.manning.com/snyder/snyder_cover150.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 150px; height: 188px;" src="http://www.manning.com/snyder/snyder_cover150.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.manning.com/affiliate/idevaffiliate.php?id=1063_140"&gt;ActiveMQ In Action&lt;/a&gt; book has made available a new early access release before going into final review and copy editing. All 14 chapters are included in this MEAP release. &lt;br /&gt;&lt;br /&gt;For a limited time you can get the definitive book on ActiveMQ at a 50% discount! Just use the coupon code *activemq50* at the time of checkout. Hurry and get this discounted price while it lasts because this offer expires on Monday, May 31, 2010. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.manning.com/affiliate/idevaffiliate.php?id=1063_140"&gt;I want to purchase ActiveMQ in Action today!&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-9146231487862929287?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/9146231487862929287/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2010/05/50-off-activemq-in-action.html#comment-form' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/9146231487862929287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/9146231487862929287'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2010/05/50-off-activemq-in-action.html' title='50% Off ActiveMQ In Action!'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-9167692041192217437</id><published>2010-05-21T08:27:00.015-06:00</published><updated>2011-08-15T12:33:20.933-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='spring jms message listener container activemq java'/><title type='text'>Tuning JMS Message Consumption In Spring</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_pSHP7VYSIjE/S3CoIdTOo7I/AAAAAAAAAcE/1wooXq_IyOs/s1600-h/spring-logo1.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 220px;" src="http://2.bp.blogspot.com/_pSHP7VYSIjE/S3CoIdTOo7I/AAAAAAAAAcE/1wooXq_IyOs/s320/spring-logo1.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5436029613493887922" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In a previous blog post titled &lt;a href="http://bsnyderblog.blogspot.com/2010/02/using-spring-to-receive-jms-messages.html"&gt;Using Spring to Receive JMS Messages&lt;/a&gt;, I introduced the use of the Spring default message listener container for asynchronous consumption of JMS messages. One very common discovery that folks make when first using JMS is that producers can send messages much faster than consumers can receive and process them. When using JMS queues, I always recommend the use of more consumers than you have producers. (When using JMS topics, you should only use a single consumer to guard against receiving the same message multiple times.) This is a normal situation with message-oriented middleware (MOM) and it is easy to handle if you are using the Spring message listener container. &lt;br /&gt;&lt;br /&gt;The Spring &lt;a href="http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/jms/listener/DefaultMessageListenerContainer.html"&gt;DefaultMessageListenerContainer&lt;/a&gt; (DMLC) is a highly flexible container for consuming JMS messages that can handle many different use cases via the numerous properties that it provides. For the situation mentioned above, the DMLC offers the ability to dynamically scale the number of consumers. That is, as the number of messages available for consumption increases, the DMLC can automatically increase and decrease the number of consumers. To configure the DMLC to automatically scale the number message consumers, the &lt;a href="http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/jms/listener/DefaultMessageListenerContainer.html#setConcurrentConsumers(int)"&gt;concurrentConsumers&lt;/a&gt; property and the &lt;a href=""&gt;maxConcurrentConsumers&lt;/a&gt; property are used. Below is an example JMS namespace style of XML configuration that employs these properties: &lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: xml"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;beans xmlns="http://www.springframework.org/schema/beans"&lt;br /&gt;       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt;       xmlns:jms="http://www.springframework.org/schema/jms"&lt;br /&gt;       xmlns:p="http://www.springframework.org/schema/p"&lt;br /&gt;       xsi:schemaLocation="&lt;br /&gt;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd&lt;br /&gt;http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-3.0.xsd"&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;!-- A JMS connection factory for ActiveMQ --&amp;gt;&lt;br /&gt;  &amp;lt;bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"&lt;br /&gt;  p:brokerURL="tcp://foo.example.com:61616" /&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;!-- A POJO that implements the JMS message listener --&amp;gt;&lt;br /&gt;  &amp;lt;bean id="simpleMessageListener" class="com.mycompany.SimpleMessageListener"&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;!-- A JMS namespace aware Spring configuration for the message listener container --&amp;gt;&lt;br /&gt;  &amp;lt;jms:listener-container&lt;br /&gt;      container-type="default"&lt;br /&gt;      connection-factory="connectionFactory"&lt;br /&gt;      acknowledge="auto"&lt;br /&gt;      concurrency="10-50"&amp;gt;&lt;br /&gt;    &amp;lt;jms:listener destination="TEST.FOO" ref="simpleMessageListener" method="onMessage" /&amp;gt;&lt;br /&gt;  &amp;lt;/jms:listener-container&amp;gt;&lt;br /&gt;&amp;lt;/beans&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Notice the concurrency="10-50" property above. This is a simplified configuration for setting the concurrentConsumers=10 and the maxConcurrentConsumers=50 properties of the DMLC. This tells the DMLC to always start up a minimum of 10 consumers. When a new message has been received, if the maxConcurrentConsumers has not been reached and the value of the idleConsumerLimit property has not been reached, then a new consumer is created to process the message. This behavior from the DMLC continues up to the limit set by the maxConcurrentConsumers property. When no messages are being received and the consumers become idle, the number of consumers is automatically decreased. &lt;br /&gt;&lt;br /&gt;(NOTE: The idleConsumerLimit property is used to specify the the maximum number of consumers that are allowed to be idle at a given time. The use of this property was recently clarified a bit in the Spring 3.x trunk. Increasing this limit causes invokers to be created more aggressively. This can be useful to ramp up the number of consumers faster.)&lt;br /&gt;&lt;br /&gt;It is important to be aware of a couple of things related to this dynamic scaling: &lt;br /&gt;&lt;ol&gt;&lt;li&gt;You should not increase the number of concurrent consumers for a JMS topic. This leads to concurrent consumption of the same message, which is hardly ever desirable.&lt;/li&gt;&lt;li&gt;The concurrentConsumers property and the maxConcurrentConsumers property can be modified at runtime, e.g., via JMX&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;The dynamic scaling can be tuned even further through the use of the &lt;a href="http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/jms/listener/DefaultMessageListenerContainer.html#setIdleTaskExecutionLimit(int)"&gt;idleTaskExecutionLimit&lt;/a&gt; property. The use of this property is best explained by a portion of the Javadoc: &lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Within each task execution, a number of message reception attempts (according to the "maxMessagesPerTask" setting) will each wait for an incoming message (according to the "receiveTimeout" setting). If all of those receive attempts in a given task return without a message, the task is considered idle with respect to received messages. Such a task may still be rescheduled; however, once it reached the specified "idleTaskExecutionLimit", it will shut down (in case of dynamic scaling).&lt;br /&gt;&lt;br /&gt;Raise this limit if you encounter too frequent scaling up and down. With this limit being higher, an idle consumer will be kept around longer, avoiding the restart of a consumer once a new load of messages comes in. Alternatively, specify a higher "maxMessagesPerTask" and/or "receiveTimeout" value, which will also lead to idle consumers being kept around for a longer time (while also increasing the average execution time of each scheduled task).&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Note the recommendations if you experience dynamic scaling taking place too often. To deal with this situation, you should experiment with increases to one or more of the following properties: &lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/jms/listener/DefaultMessageListenerContainer.html#setIdleTaskExecutionLimit(int)"&gt;idleTaskExecutionLimit&lt;/a&gt; - The limit for the number of allowed idle executions of a receive task. The default is 1 causing idle resources to be closed early once a task does not receive a message.&lt;/li&gt;&lt;li&gt;&lt;a href="http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/jms/listener/DefaultMessageListenerContainer.html#setMaxMessagesPerTask(int)"&gt;maxMessagesPerTask&lt;/a&gt; - The maximum number of messages to process in a single task. This determines how long a task lives before being reaped. The default is unlimited (-1) so you may not need to change this property.&lt;/li&gt;&lt;li&gt;&lt;a href="http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/jms/listener/AbstractPollingMessageListenerContainer.html#setReceiveTimeout(long)"&gt;receiveTimeout&lt;/a&gt; - The timeout to be used for JMS receive operations. The default is 1000 ms.&lt;/li&gt;&lt;li&gt;As I noted above, in the Spring 3.x trunk, the &lt;b&gt;idleConsumerLimit&lt;/b&gt; property was clarified a bit recently and exposed as a writable property. This is yet another property for tuning for situations where you need to ramp up the number of concurrent consumers faster. &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;One important thing to note about using these various properties for tuning. These are not usable in the JMS namespace style of XML configuration. To use these properties, you must use either a pure Spring XML configuration or straight Java. Below is an example of how to use the receiveTimeout property and the idleTaskExecutionLimit property: &lt;br /&gt;&lt;pre class="brush: xml"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;beans xmlns="http://www.springframework.org/schema/beans"&lt;br /&gt;       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt;       xmlns:p="http://www.springframework.org/schema/p"&lt;br /&gt;       xsi:schemaLocation="&lt;br /&gt;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;!-- A JMS connection factory for ActiveMQ --&amp;gt;&lt;br /&gt;  &amp;lt;bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"&lt;br /&gt;  p:brokerURL="tcp://foo.example.com:61616" /&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;!-- The JMS destination --&amp;gt;&lt;br /&gt;  &amp;lt;bean id="destination" class="org.apache.activemq.command.ActiveMQQueue" &lt;br /&gt;    physicalName="TEST.FOO" /&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;!-- A POJO that implements the JMS message listener --&amp;gt;&lt;br /&gt;  &amp;lt;bean id="simpleMessageListener" class="com.mycompany.SimpleMessageListener"&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;!-- A pure Spring configuration for the message listener container --&amp;gt;&lt;br /&gt;  &amp;lt;bean id="msgListenerContainer"&lt;br /&gt;      class="org.springframework.jms.listener.DefaultMessageListenerContainer" &lt;br /&gt;      p:connectionFactory-ref="connectionFactory"&lt;br /&gt;      p:destination-ref="destination"&lt;br /&gt;      p:messageListener-ref="simpleMessageListener"&lt;br /&gt;      p:concurrentConsumers="10"&lt;br /&gt;      p:maxConcurrentConsumers="50"&lt;br /&gt;      p:receiveTimeout="5000"&lt;br /&gt;      p:idleTaskExecutionLimit="10"&lt;br /&gt;      p:idleConsumerLimit="5" /&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/beans&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;In the example configuration above, the receiveTimeout property is set to five seconds to tell the DMLC's receive operation to poll for message for five seconds instead of the default one second. Also, the idleTaskExecutionLimit property is set to 10 to allow tasks to execute 10 times instead of the default value of 1. Lastly, the idleConsumerLimit property specifies the limit on the number of idle consumers. This property can be used to more aggressively ramp up the number of concurrent consumers. &lt;br /&gt;&lt;br /&gt;In addition to tuning these various properties for dynamic consumer scaling, it is also important to understand that the DMLC can also provide various levels of caching for JMS resources (i.e., JMS connections, sessions and consumers). By default, the DMLC will cache all JMS resources unless an external transaction manager is configured (because some containers require fresh JMS resources for external transactions). When an external transaction manager is configured, none of the JMS resources are cached by defualt. The level of caching can be configured using the &lt;a href="http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/jms/listener/DefaultMessageListenerContainer.html#setCacheLevel(int)"&gt;cacheLevel&lt;/a&gt; property. This property allows for a tiered caching from connection, to session, to consumer. This allows caching of: &lt;br /&gt;&lt;ul&gt;&lt;li&gt;The connection&lt;/li&gt;&lt;li&gt;The connection and the session&lt;/li&gt;&lt;li&gt;The connection, the session and the consumer&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Below is an example configuration that uses the cacheLevel property to specify consumer level caching: &lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: xml"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;beans xmlns="http://www.springframework.org/schema/beans"&lt;br /&gt;       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt;       xmlns:jms="http://www.springframework.org/schema/jms"&lt;br /&gt;       xmlns:p="http://www.springframework.org/schema/p"&lt;br /&gt;       xsi:schemaLocation="&lt;br /&gt;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd&lt;br /&gt;http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-3.0.xsd"&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;!-- A JMS connection factory for ActiveMQ --&amp;gt;&lt;br /&gt;  &amp;lt;bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"&lt;br /&gt;  p:brokerURL="tcp://foo.example.com:61616" /&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;!-- A POJO that implements the JMS message listener --&amp;gt;&lt;br /&gt;  &amp;lt;bean id="simpleMessageListener" class="com.mycompany.SimpleMessageListener"&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;!-- A JMS namespace aware Spring configuration for the message listener container --&amp;gt;&lt;br /&gt;  &amp;lt;jms:listener-container&lt;br /&gt;      container-type="default"&lt;br /&gt;      connection-factory="connectionFactory"&lt;br /&gt;      acknowledge="auto"&lt;br /&gt;      concurrency="10-50"&lt;br /&gt;      cache="consumer"&amp;gt;&lt;br /&gt;    &amp;lt;jms:listener destination="TEST.FOO" ref="simpleMessageListener" method="onMessage" /&amp;gt;&lt;br /&gt;  &amp;lt;/jms:listener-container&amp;gt;&lt;br /&gt;&amp;lt;/beans&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;By caching at the consumer level, this means that the connection, the session and the consumer is cached. Notice that the cacheLevel property can be used with the Spring JMS namespace style of XML configuration. &lt;br /&gt;&lt;br /&gt;The session is cached based on ack-mode and the consumer is cached based on the session, the selector and the destination. It's necessary to know this info to better understand where/when the JMS resources can and cannot be reused. For example, caching consumers that use different selectors and consume from different destinations is only going to be relevant if you partition these items appropriately for reuse. That is, you may need to use a separate connection and listener-container configuration if the cache keys are different and if you want to cache sessions or consumers for reuse. &lt;br /&gt;&lt;br /&gt;The overall point of the caching is that it can help to reduce the potential recurring thrash involved in creation and destruction of JMS resources. Reducing the thrash by using caching and employing the appropriate partitioning of these resources so as to allow for reuse can definitely improve the overall performance of the application. &lt;br /&gt;&lt;br /&gt;Hopefully this post helps you understand how to tune JMS message consumption in Spring. As you employ Spring JMS to your applications and experiment further and further, you will discover how much the DMLC is actually doing for you and how many more features it has beyond what you can easily build yourself.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-9167692041192217437?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/9167692041192217437/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2010/05/tuning-jms-message-consumption-in.html#comment-form' title='117 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/9167692041192217437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/9167692041192217437'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2010/05/tuning-jms-message-consumption-in.html' title='Tuning JMS Message Consumption In Spring'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_pSHP7VYSIjE/S3CoIdTOo7I/AAAAAAAAAcE/1wooXq_IyOs/s72-c/spring-logo1.jpg' height='72' width='72'/><thr:total>117</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-3854794530238560533</id><published>2010-02-08T17:09:00.017-07:00</published><updated>2012-01-09T23:26:44.449-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='spring jms message listener container activemq message driven pojos'/><title type='text'>Using Spring to Receive JMS Messages</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_pSHP7VYSIjE/S3CoIdTOo7I/AAAAAAAAAcE/1wooXq_IyOs/s1600-h/spring-logo1.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 220px;" src="http://2.bp.blogspot.com/_pSHP7VYSIjE/S3CoIdTOo7I/AAAAAAAAAcE/1wooXq_IyOs/s320/spring-logo1.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5436029613493887922" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Have you ever had a need to create your own JMS consumer? Or will you have this need in the future? If you answered yes to either one of these questions, this post will simplify your life.&lt;br /&gt;&lt;br /&gt;In the previous post, I discussed &lt;a href="http://bsnyderblog.blogspot.com/2010/02/using-spring-jmstemplate-to-send-jms.html"&gt;Using the Spring JmsTemplate to Send JMS Messages&lt;/a&gt;. As a follow-on, in this post I will demonstrate how to receive messages using Spring JMS. Although the previously mentioned JmsTemplate can receive messages synchronously, here I will focus on asynchronous message reception using the Spring message listener container architecture, specifically the  DefaultMessageListenerContainer.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/jms/listener/DefaultMessageListenerContainer.html"&gt;DefaultMessageListenerContainer&lt;/a&gt; (DMLC) is another wonderful convenience class that is part of the Spring Framework's JMS package. As you can see in the Javadoc, the DMLC is not a single class, but a well-abstracted hierarchy for the purpose of receiving messages. The reason for this is that the DMLC takes its inspiration from &lt;a href="http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/EJBConcepts5.html"&gt;Message Driven Beans&lt;/a&gt; (MDB). &lt;br /&gt;&lt;br /&gt;MDBs were originally defined in the EJB 2.0 spec as a stateless, transaction aware message listener that use JMS resources provided by the Java EE container. MDBs can also be pooled by the Java EE container in order to scale up. In short, MDBs were designed for asynchronous message reception in a way that the Java EE container could manage them. Although the intention was good, unfortunately the disadvantages of MDBs are numerous including:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;MDBs are static in their configuration and creation (they cannot be created dynamically)&lt;/li&gt;&lt;li&gt;MDBs can only listen to a single destination&lt;/li&gt;&lt;li&gt;MDBs can only send messages after first receiving a message&lt;/li&gt;&lt;li&gt;MDBs require an EJB container (and therefore the Java EE container)&lt;/li&gt;&lt;/ul&gt;Although the Spring DMLC took its inspiration from MDBs, it did not replicate these disadvantages; quite the opposite, in fact. The Spring DMLC is commonly used to create what have become known as Message-Driven POJOs (MDP). MDPs offer all of the same functionality as MDBs but without the disadvantages listed above. The Spring DMLC  provides many features including:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Various levels of caching of the JMS resources (connections and sessions) and JMS consumers for increased performance&lt;/li&gt;&lt;li&gt;The ability to dynamically grow and shrink the number of consumers to concurrently process messages based on load (see &lt;a href="http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/jms/listener/DefaultMessageListenerContainer.html#setConcurrentConsumers(int)"&gt; setConcurrentConsumers&lt;/a&gt; and &lt;a href="http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/jms/listener/DefaultMessageListenerContainer.html#setMaxConcurrentConsumers(int)"&gt; setMaxConcurrentConsumers&lt;/a&gt;) for additional performance&lt;/li&gt;&lt;li&gt;Automatically re-establishes connections if the message broker becomes unavailable&lt;/li&gt;&lt;li&gt;Asynchronous execution of a message listener using the &lt;a href="http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/core/task/TaskExecutor.html"&gt;Spring TaskExecutor&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Support for local JMS transactions as well as an external transaction manager around message reception and listener execution&lt;/li&gt;&lt;li&gt;Support for various message acknowledgement modes, each providing different semantics&lt;/li&gt;&lt;/ul&gt;For some situations, it is important to understand the additional error handling and the redelivery semantics that are provided by the DMLC. For more information, see the &lt;a href="http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/jms/listener/AbstractMessageListenerContainer.html"&gt;AbstractMessageListenerContainer JavaDoc&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The reason I recommend the DMLC (or even the &lt;a href="http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/jms/listener/SimpleMessageListenerContainer.html"&gt;SimpleMessageListenerContainer&lt;/a&gt;) is because writing JMS consumers can be a lot of work. In doing so, you must manually handle and mange the JMS resources and the JMS consumers, any concurrency that is necessary and any use of transactions. If you've ever done such work you know how arduous and error prone it can be. Certainly MDBs provide some of these features but with all their disadvantages. By creating MDPs using the Spring DMLC, I have seen users save a tremendous amount of time and increase their productivity significantly. This is because the DMLC offers much flexibility, robustness, a high amount of configurability and it has widespread deployment in businesses all over the world (so it has been widely tested).&lt;br /&gt;&lt;br /&gt;Compared to MDBs, use of the Spring DMLC is actually surprisingly simple. The easiest way to get started is to using an XML configuration as the Spring DMLC provides &lt;a href="http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/jms.html#jms-namespace"&gt;JMS namespace support&lt;/a&gt;. Below is a Spring application context that demonstrates the configuration to use the Spring DMLC with Apache ActiveMQ: &lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: xml"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;beans xmlns="http://www.springframework.org/schema/beans"&lt;br /&gt;       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt;       xmlns:jms="http://www.springframework.org/schema/jms"&lt;br /&gt;       xmlns:p="http://www.springframework.org/schema/p"&lt;br /&gt;       xsi:schemaLocation="&lt;br /&gt;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd&lt;br /&gt;http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-3.0.xsd"&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;!-- A JMS connection factory for ActiveMQ --&amp;gt;&lt;br /&gt;  &amp;lt;bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"&lt;br /&gt;  p:brokerURL="tcp://foo.example.com:61616" /&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;!-- A POJO that implements the JMS message listener --&amp;gt;&lt;br /&gt;  &amp;lt;bean id="simpleMessageListener" class="com.mycompany.SimpleMessageListener"&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;!-- The Spring message listener container configuration --&amp;gt;&lt;br /&gt;  &amp;lt;jms:listener-container&lt;br /&gt;      container-type="default"&lt;br /&gt;      connection-factory="connectionFactory"&lt;br /&gt;      acknowledge="auto"&amp;gt;&lt;br /&gt;    &amp;lt;jms:listener destination="TEST.FOO" ref="simpleMessageListener" method="onMessage" /&amp;gt;&lt;br /&gt;  &amp;lt;/jms:listener-container&amp;gt;&lt;br /&gt;&amp;lt;/beans&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;For folks who are already familiar with the Spring Framework, the XML above is quite straightforward. It defines a connection factory bean for ActiveMQ, a message listener bean and the Spring listener-container. Notice that the jms:listener contains the destination name and not the listener-container. This level of separation is important because it means that the listener-container is not tied to any destination, only the jms:listener is. You can define as many jms:listener elements as is necessary for your application and the container will handle them all. &lt;br /&gt;&lt;br /&gt;Below is the message listener implementation:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: java"&gt;&lt;br /&gt;import javax.jms.JMSException;&lt;br /&gt;import javax.jms.Message;&lt;br /&gt;import javax.jms.MessageListener;&lt;br /&gt;import javax.jms.TextMessage;&lt;br /&gt;&lt;br /&gt;import org.apache.log4j.Logger;&lt;br /&gt;&lt;br /&gt;public class MyMessageListener implements MessageListener {&lt;br /&gt;&lt;br /&gt;  private static final Logger LOG = Logger.getLogger(MyMessageListener.class);&lt;br /&gt;&lt;br /&gt;  public void onMessage(Message message) {&lt;br /&gt;      try {&lt;br /&gt;       TextMessage msg = (TextMessage) message;&lt;br /&gt;       LOG.info("Consumed message: " + msg.getText());&lt;br /&gt;      } catch (JMSException e) {&lt;br /&gt;          // TODO Auto-generated catch block&lt;br /&gt;          e.printStackTrace();&lt;br /&gt;      }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;The message listener implementation is deliberately simple as its only purpose is to demonstrate receiving the message and logging the payload of the message. Although this listener implements the &lt;tt&gt;javax.jms.MessageListener&lt;/tt&gt; interface, there are a total of three options available for implementing a message listener to be used with the Spring DMLC:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The &lt;a href="http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/jms/MessageListener.html"&gt;&lt;tt&gt;javax.jms.MessageListener&lt;/tt&gt;&lt;/a&gt; - This is what was used in the example above. It is a standardized interface from the JMS spec but handling threading is up to you. &lt;/li&gt;&lt;li&gt;The Spring &lt;a href="http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/jms/listener/SessionAwareMessageListener.html"&gt;&lt;tt&gt;SessionAwareMessageListener&lt;/tt&gt;&lt;/a&gt; - This is a Spring-specific interface the provides access to the JMS session object. This is very useful for request-response messaging. Just be aware that you must do your own exception handling (i.e., override the &lt;a href="http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/jms/listener/adapter/MessageListenerAdapter.html#handleListenerException(java.lang.Throwable)"&gt;handleListenerException&lt;/a&gt; method so exceptions are not lost). &lt;/li&gt;&lt;li&gt;The Spring &lt;a href="http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/jms/listener/adapter/MessageListenerAdapter.html"&gt;&lt;tt&gt;MessageListenerAdapter&lt;/tt&gt;&lt;/a&gt; - This is a Spring-specific interface that allows for type-specific message handling. Use of this interface avoids any JMS-specific dependencies in your code.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;So not only is the Spring message listener container easy to use, it is also full of options to adapt to many environments. And I've only focused on the DefaultMessageListenerContainer here, I have not talked about the SimpleMessageListenerContainer (SMLC) beyond a simple mention. At a high level the difference is that the SMLC is static and provides no support for transactions. &lt;br /&gt;&lt;br /&gt;One very big advantage of the Spring message listener container is that this type of XML config can be used in a Java EE container, in a servlet container or stand alone. This same Spring application context will run in Weblogic, JBoss, Tomcat or in a stand alone Spring container. Furthermore, the Spring DMLC also works with just about any JMS compliant messaging middleware available. Just define a bean for the JMS connection factory for your MOM and possibly tweak a few properties on the listener-container and you can begin consuming messages from different MOMs. &lt;br /&gt;&lt;br /&gt;I should also note that the XML configuration is certainly not a requirement either. You can go straight for the underlying Java classes in your own code if you wish. I've used each style in various situations, but to begin using the Spring DMLC in the shortest amount of time, I find the Spring XML application context the fastest.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update:&lt;/b&gt; I have made all of the code for these examples available via a &lt;a href="https://github.com/bsnyder/spring-jms-examples"&gt;GitHub repo&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-3854794530238560533?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/3854794530238560533/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2010/02/using-spring-to-receive-jms-messages.html#comment-form' title='106 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/3854794530238560533'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/3854794530238560533'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2010/02/using-spring-to-receive-jms-messages.html' title='Using Spring to Receive JMS Messages'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_pSHP7VYSIjE/S3CoIdTOo7I/AAAAAAAAAcE/1wooXq_IyOs/s72-c/spring-logo1.jpg' height='72' width='72'/><thr:total>106</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-3803651874315114788</id><published>2010-02-04T10:51:00.019-07:00</published><updated>2011-08-15T12:34:56.615-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='spring jms template activemq java jmstemplate'/><title type='text'>Using Spring to Send JMS Messages</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_pSHP7VYSIjE/S2sZsdwHcqI/AAAAAAAAAb8/wdySdLBLT_g/s1600-h/spring-logo1.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 220px;" src="http://2.bp.blogspot.com/_pSHP7VYSIjE/S2sZsdwHcqI/AAAAAAAAAb8/wdySdLBLT_g/s320/spring-logo1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5434465627044016802" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Recently I stumbled upon a number of places in the some docs and mailing lists where claims are made that the Spring &lt;a href="http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/jms/core/JmsTemplate.html"&gt;JmsTemplate&lt;/a&gt; is full of anti-patterns, is horribly inefficient and shouldn't be used. Well I'm here to debunk these erroneous claims by pointing out a class in the Spring Framework that was overlooked entirely. &lt;br /&gt;&lt;br /&gt;The Spring &lt;tt&gt;JmsTemplate&lt;/tt&gt; is a convenience class for sending and receiving JMS messages in a synchronous manner. The &lt;tt&gt;JmsTemplate&lt;/tt&gt; was originally designed to be used with a J2EE container where the container provides the necessary pooling of the JMS resources (i.e., connections, consumers and producers). Such requirements came from the EJB spec. But when developers began using the&lt;tt&gt; JmsTemplate&lt;/tt&gt; outside of J2EE containers, and because some JMS providers do not offer caching/pooling of JMS resources, a different solution was necessary. Enter the Spring &lt;tt&gt;CachingConnectionFactory&lt;/tt&gt;. &lt;br /&gt;&lt;br /&gt;The &lt;a href="http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/jms/connection/CachingConnectionFactory.html"&gt;CachingConnectionFactory&lt;/a&gt; is meant to wrap a JMS provider's connection to provide caching of sessions, connections and producers as well as automatic connection recovery. By default, it uses a single session to create many connections and this model works very well with most MOMs. But if you need to scale further, you can also specify the number of sessions to cache using the &lt;tt&gt;sessionCacheSize&lt;/tt&gt; property. &lt;br /&gt;&lt;br /&gt;Below is a snippet from a Spring app context that demonstrates the configuration for the &lt;tt&gt;CachingConnectionFactory&lt;/tt&gt; &lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: xml"&gt;&lt;br /&gt;...&lt;br /&gt;&amp;lt;!-- A connection to ActiveMQ --&amp;gt; &lt;br /&gt;&amp;lt;bean id="amqConnectionFactory" &lt;br /&gt;    class="org.apache.activemq.ActiveMQConnectionFactory" &lt;br /&gt;    p:brokerURL='tcp://localhost:61616" /&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!-- A cached connection to wrap the ActiveMQ connection --&amp;gt; &lt;br /&gt;&amp;lt;bean id="cachedConnectionFactory" &lt;br /&gt;    class="org.springframework.jms.connection.CachingConnectionFactory"&lt;br /&gt;    p:targetConnectionFactory-ref="amqConnectionFactory" &lt;br /&gt;    p:sessionCacheSize="10" /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!-- A destination in ActiveMQ --&amp;gt; &lt;br /&gt;&amp;lt;bean id="destination" &lt;br /&gt;    class="org.apache.activemq.command.ActiveMQQueue"&amp;gt;&lt;br /&gt;&amp;lt;constructor-arg value="FOO.TEST" /&amp;gt;&lt;br /&gt;&amp;lt;/bean&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!-- A JmsTemplate instance that uses the cached connection and destination --&amp;gt; &lt;br /&gt;&amp;lt;bean id="producerTemplate" &lt;br /&gt;    class="org.springframework.jms.core.JmsTemplate"&lt;br /&gt;    p:connectionFactory-ref="cachedConnectionFactory"&lt;br /&gt;    p:defaultDestination-ref="destination" /&amp;gt; &lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;As you can see, the configuration for the &lt;tt&gt;CachingConnectionFactory&lt;/tt&gt; along with the &lt;tt&gt;JmsTemplate&lt;/tt&gt; is quite simple. Furthermore, these two classes are also both in the &lt;tt&gt;org.springframework.jms&lt;/tt&gt; package path so they're both included in the spring-jms jar file making their use even easier. &lt;br /&gt;&lt;br /&gt;The only thing left to do is utilize the &lt;tt&gt;jmsTemplate&lt;/tt&gt; bean in your Java code to actually send a message. This is shown below: &lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: java"&gt;&lt;br /&gt;public class SimpleMessageProducer {&lt;br /&gt;    &lt;br /&gt;    private static final Logger LOG = Logger.getLogger(SimpleMessageProducer.class);&lt;br /&gt;    &lt;br /&gt;    @Autowired&lt;br /&gt;    protected JmsTemplate jmsTemplate; &lt;br /&gt;    &lt;br /&gt;    protected int numberOfMessages = 100; &lt;br /&gt;    &lt;br /&gt;    public void sendMessages() throws JMSException {&lt;br /&gt;        StringBuilder payload = null;&lt;br /&gt;        &lt;br /&gt;        for (int i = 0; i &lt; numberOfMessages; ++i) {&lt;br /&gt;            &lt;br /&gt;            payload = new StringBuilder(); &lt;br /&gt;            payload.append("Message [").append(i).append("] sent at: ").append(new Date());&lt;br /&gt;            &lt;br /&gt;            jmsTemplate.send(new MessageCreator() {&lt;br /&gt;                public Message createMessage(Session session) throws JMSException {&lt;br /&gt;                    TextMessage message = session.createTextMessage(payload.toString()); &lt;br /&gt;                    message.setIntProperty("messageCount", i);&lt;br /&gt;                    LOG.info("Sending message number [" + i + "]");&lt;br /&gt;                    return message;&lt;br /&gt;                }&lt;br /&gt;            });&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The &lt;tt&gt;SimpleMessageProducer&lt;/tt&gt; class above demonstrates the use of Spring &lt;a href="http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-factory-autowire"&gt;autowiring&lt;/a&gt; to resolve the relationship between the &lt;tt&gt;jmsTemplate&lt;/tt&gt; property and the &lt;tt&gt;producerTemplate&lt;/tt&gt; in the app context further above. Then an anonymous &lt;tt&gt;MessageCreator&lt;/tt&gt; instance is used to actually create a message for the &lt;tt&gt;jmsTemplate&lt;/tt&gt; to send. &lt;br /&gt;&lt;br /&gt;The &lt;tt&gt;JmsTemplate&lt;/tt&gt; and the &lt;tt&gt;CachingConnectionFactory&lt;/tt&gt; are both very widely used in businesses of all sizes throughout the world. Coupled with one of the Spring &lt;a href="http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/jms/listener/package-summary.html"&gt;message listener containers&lt;/a&gt;, they provide an ideal solution. &lt;br /&gt;&lt;br /&gt;I'll elaborate on message consumption using the Spring &lt;a href="http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/jms/listener/DefaultMessageListenerContainer.html"&gt;DefaultMessageListenerContainer&lt;/a&gt; and the &lt;a href="http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/jms/listener/SimpleMessageListenerContainer.html"&gt;SimpleMessageListenerContainer&lt;/a&gt; in a &lt;a href="http://bsnyderblog.blogspot.com/2010/02/using-spring-to-receive-jms-messages.html"&gt;future blog post&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-3803651874315114788?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/3803651874315114788/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2010/02/using-spring-jmstemplate-to-send-jms.html#comment-form' title='66 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/3803651874315114788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/3803651874315114788'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2010/02/using-spring-jmstemplate-to-send-jms.html' title='Using Spring to Send JMS Messages'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_pSHP7VYSIjE/S2sZsdwHcqI/AAAAAAAAAb8/wdySdLBLT_g/s72-c/spring-logo1.jpg' height='72' width='72'/><thr:total>66</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-8830942553461467293</id><published>2010-01-21T10:30:00.013-07:00</published><updated>2010-05-07T22:10:43.685-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='activemq'/><title type='text'>How to Use Automatic Failover In an ActiveMQ Network of Brokers</title><content type='html'>Last week I tested a new feature in ActiveMQ 5.3.0 to support automatic failover/reconnect in a &lt;a href="http://activemq.apache.org/networks-of-brokers.html"&gt;network of brokers&lt;/a&gt;. Besides adding this information to the &lt;a href="http://bit.ly/2je6cQ"&gt;ActiveMQ book&lt;/a&gt;, one person also suggested that I also post it on my blog for easier access, so here you go! &lt;br /&gt;&lt;br /&gt;Folks familiar with ActiveMQ already know that a network of brokers allows many broker instances to be networked for massive scalability. Prior to the addition of this feature in ActiveMQ 5.3, if one of the brokers in the network went down, reestablishing a connection with that broker when it comes back up is a manual process wrought with difficulty. By adding support for failover to the network of brokers, any broker in the network can come and go at will without any manual intervention. A very powerful feature, indeed. Although this post is long, the outcome of the testing is well worth it. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_pSHP7VYSIjE/S1iRyyj3nCI/AAAAAAAAASs/wp9sYKjno8k/s1600-h/amq-network-failover.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 211px; height: 320px;" src="http://1.bp.blogspot.com/_pSHP7VYSIjE/S1iRyyj3nCI/AAAAAAAAASs/wp9sYKjno8k/s320/amq-network-failover.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5429249652546837538" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The first thing to note is the topology for the network of brokers. I used a network of three brokers named amq1, amq2 and amq3. The attached diagram explains the topology, including the consumers and producers. amq1 and amq2 are stand alone with no network connector. amq3 defines a network connector with failover to amq1 and amq2. Consumers exist on amq1 and amq2. Producer will connect to amq3. To start with, I have only configured a uni-directional network connector in amq3. Later I will change the configuration for a bi-directional network connector. &lt;br /&gt;&lt;br /&gt;Thanks to the ability to upload any file to Google Docs this week, you can &lt;a href="http://docs.google.com/leaf?id=0By7tiS9GJHQsY2MxNzZiZmUtNmRjYy00OTM5LTk5NGItZThhOTc1NzRmZGY2&amp;hl=en"&gt;download the configuration files for the three brokers&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;The next thing to do is outline the steps I used to test out this feature. These steps were performed on Mac OS X (Unix) but could easily be adapted for Windoze. Below are those steps: &lt;br /&gt;&lt;br /&gt;1) Open six terminal windows as defined below:&lt;br /&gt;1a) Terminal 1 = cd into the amq1 dir&lt;br /&gt;1b) Terminal 2 = cd into the amq2 dir&lt;br /&gt;1c) Terminal 3 = cd into the amq3 dir&lt;br /&gt;1d) Terminal 4 = cd into the amq1/example dir&lt;br /&gt;1e) Terminal 5 = cd into the amq1/example dir&lt;br /&gt;1f) Terminal 6 = cd into the amq1/example dir&lt;br /&gt;&lt;br /&gt;2) Terminal 1: start up amq1 (./bin/activemq)&lt;br /&gt;3) Terminal 2: start up amq2 (./bin/activemq)&lt;br /&gt;4) Terminal 3: start up amq3 (./bin/activemq)&lt;br /&gt;&lt;br /&gt;Thanks to the configuration of the ActiveMQ &lt;a href="http://activemq.apache.org/logging-interceptor.html"&gt;logging interceptor&lt;/a&gt;, you  should see that amq3 makes a network connection to either amq1 or amq2. For the rest of these steps, let's assume that amq3 connected to amq1. &lt;br /&gt;&lt;br /&gt;5) Terminal 4: start up a consumer on amq1 (ant consumer -Durl=tcp://0.0.0.0:61616)&lt;br /&gt;6) Terminal 5: start up a consumer on amq2 (ant consumer -Durl=tcp://0.0.0.0:61617)&lt;br /&gt;7) Terminal 6: start up a producer on amq3 (ant producer -Durl=tcp://0.0.0.0:61618)&lt;br /&gt;&lt;br /&gt;You should see 2000 messages sent to amq3. The messages should be forwarded to either amq1. The consumer connected to amq1 should have received the 2000 messages and shut down.&lt;br /&gt;&lt;br /&gt;8) Terminal 1: shut down amq1 (ctrl-c)&lt;br /&gt;&lt;br /&gt;Note the logging that shows the failover taking place successfully. Let's test it to see if the demand forwarding bridge actually got started.&lt;br /&gt;&lt;br /&gt;9) Terminal 6: start up a producer on amq3 (ant producer -Durl=tcp://0.0.0.0:61618)&lt;br /&gt;&lt;br /&gt;You should see 2000 messages sent to amq3. The consumer connected to amq2 receives the 2000 messages and shuts down. &lt;br /&gt;&lt;br /&gt;10) Terminal 1: start up amq1 (./bin/activemq)&lt;br /&gt;&lt;br /&gt;11) Terminal 2: shut down amq2 (ctrl-c)&lt;br /&gt;&lt;br /&gt;Again, the failover took place successfully. Let's continue just a bit further to see if it will continue to failover if I bring up amq1 again. &lt;br /&gt;&lt;br /&gt;12) Terminal 4: start up a consumer on amq1 (ant consumer -Durl=tcp://0.0.0.0:61616)&lt;br /&gt;&lt;br /&gt;13) Terminal 6: start up a producer on amq3 (ant producer -Durl=tcp://0.0.0.0:61618)&lt;br /&gt;&lt;br /&gt;You should see 2000 messages sent to amq3. The consumer connected to amq1 receives the 2000 messages and shuts down. &lt;br /&gt;&lt;br /&gt;This proves that the failover transport is supported in a network connector and it does work correctly with a uni-directional network connector. In addition to a uni-directional network connector, I also tested a bi-directional network connector. This only requires a slight change to the configuration of the network connector in amq3. In the amq3 XML configuration file, in the network connector element, add a duplex=true attribute. Below is the network connector element for amq3 with the change: &lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: xml"&gt;&lt;br /&gt;&amp;lt;networkConnector name="amq3-nc" &lt;br /&gt;  uri="static:(failover:(tcp://0.0.0.0:61616,tcp://0.0.0.0:61617))" &lt;br /&gt;  dynamicOnly="true" &lt;br /&gt;  networkTTL="3" &lt;br /&gt;  duplex="true" /&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;With this minor change in configuration, the network connector is now bi-directional. I.e., communication between amq3 and whichever broker it connects to is two-way instead of just one-way. This means that messages can be sent in either direction, not just in one direction originating from amq3. &lt;br /&gt;&lt;br /&gt;Below are the steps I used to test this specific change: &lt;br /&gt;&lt;br /&gt;1) Open five terminal windows as defined below:&lt;br /&gt;1a) Terminal 1 = cd into the amq1 dir&lt;br /&gt;1b) Terminal 2 = cd into the amq2 dir&lt;br /&gt;1c) Terminal 3 = cd into the amq3 dir&lt;br /&gt;1d) Terminal 4 = cd into the amq1/example dir&lt;br /&gt;1e) Terminal 5 = cd into the amq1/example dir&lt;br /&gt;&lt;br /&gt;2) Terminal 1: start up amq1 (./bin/activemq)&lt;br /&gt;3) Terminal 2: start up amq2 (./bin/activemq)&lt;br /&gt;4) Terminal 3: start up amq3 (./bin/activemq)&lt;br /&gt;&lt;br /&gt;You should see that amq3 makes a network connection to either amq1 or amq2. For the rest of these steps, let's assume that amq3 connected to amq1. &lt;br /&gt;&lt;br /&gt;5) Terminal 4: start up a consumer on amq1 (ant consumer -Durl=tcp://0.0.0.0:61616) &lt;br /&gt;6) Terminal 5: start up a producer on amq3 (ant producer -Durl=tcp://0.0.0.0:61618) &lt;br /&gt;&lt;br /&gt;You should see 2000 messages sent to amq3. The messages should be forwarded to amq1. The consumer connected to amq1 should receive the 2000 messages and shut down. &lt;br /&gt;&lt;br /&gt;Let's test the duplex capability of the network connector in amq3 now. To do this we'll send messages to amq1 and consume those messages from amq3. &lt;br /&gt;&lt;br /&gt;7) Terminal 4: start up a consumer on amq3 (ant consumer -Durl=tcp://0.0.0.0:61618) &lt;br /&gt;8) Terminal 5: start up a producer on amq1 (ant producer -Durl=tcp://0.0.0.0:61616) &lt;br /&gt;&lt;br /&gt;You should see 2000 messages sent to amq1. The messages should be forwarded to amq3. The consumer connected to amq3 should receive the 2000 messages and shut down. This proves that the duplex feature is working. Now let's cause a failover/reconnect to take place and run through this same set of steps with amq3 and amq2. &lt;br /&gt;&lt;br /&gt;9) Terminal 1: shut down amq1 (ctrl-c) &lt;br /&gt;&lt;br /&gt;Notice the logging that shows the failover taking place successfully so that amq3 connects to amq2 now. &lt;br /&gt;&lt;br /&gt;10) Terminal 4: start up a consumer on amq2 (ant consumer -Durl=tcp://0.0.0.0:61617) &lt;br /&gt;11) Terminal 5: start up a producer on amq3 (ant producer -Durl=tcp://0.0.0.0:61618) &lt;br /&gt;&lt;br /&gt;You should see 2000 messages sent to amq3. The messages should be forwarded to amq2. The consumer connected to amq2 should receive the 2000 messages and shut down. &lt;br /&gt;&lt;br /&gt;Now let's test the duplex feature in the network connector. &lt;br /&gt;&lt;br /&gt;12) Terminal 4: start up a producer on amq2 (ant consumer -Durl=tcp://0.0.0.0:61617) &lt;br /&gt;13) Terminal 5: start up a consumer on amq3 (ant producer -Durl=tcp://0.0.0.0:61618) &lt;br /&gt;&lt;br /&gt;You should see 2000 messages sent to amq2. The messages should be forwarded to amq3. The consumer connected to amq3 should receive the 2000 messages and shut down. &lt;br /&gt;&lt;br /&gt;This proves that the duplex feature of the network connector works after a failover/reconnect to amq2. &lt;br /&gt;&lt;br /&gt;This is a great addition to ActiveMQ that really improves the usability of a network of brokers. I already have some very large clients using this feature successfully, some of which are using a network of over 2000 brokers. &lt;br /&gt;&lt;br /&gt;Hopefully these steps are clear enough to follow for your own use. If you need any clarifications, please contact me. &lt;br /&gt;&lt;br /&gt;&lt;!-- &lt;br /&gt;Also, a &lt;a href="https://docs.google.com/leaf?id=0By7tiS9GJHQsZGFlMDI1YWYtNDFmMy00Njc5LWJiZDItNWY0ZDlhYzMyZDhi&amp;hl=en"&gt;tarball of the examples is available here.&lt;/a&gt;&lt;br /&gt;--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-8830942553461467293?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/8830942553461467293/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2010/01/how-to-use-automatic-failover-in.html#comment-form' title='51 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/8830942553461467293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/8830942553461467293'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2010/01/how-to-use-automatic-failover-in.html' title='How to Use Automatic Failover In an ActiveMQ Network of Brokers'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_pSHP7VYSIjE/S1iRyyj3nCI/AAAAAAAAASs/wp9sYKjno8k/s72-c/amq-network-failover.png' height='72' width='72'/><thr:total>51</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-8338563330630256848</id><published>2009-11-12T13:50:00.009-07:00</published><updated>2010-02-08T15:34:35.683-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mac os x java snow leopard 1.5'/><title type='text'>Grrr - What Happened to Java 1.5 on Snow Leopard?!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://farm1.static.flickr.com/22/26044351_fa9bf19dc5.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px;" src="http://farm1.static.flickr.com/22/26044351_fa9bf19dc5.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Just this week I updated to Mac OS X Snow Leopard (10.6.2) only to discover that it removes Java 1.5 entirely - WTF?! I have no idea why Java 1.5 was removed but it was a bad decision. How is it logical that Java 1.3 is reinstalled but Java 1.5 is removed? Anyway, after some searching and a bit of trial and error on my system, here are steps that I had to take to fix this situation: &lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Download &lt;a href="http://support.apple.com/downloads/Java_for_Mac_OS_X_10_5_Update_4"&gt;Java for Mac OS X 10.5 Update 4&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;IMPORTANT!!!&lt;/b&gt; Make sure to run the following two commands BEFORE proceeding: &lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt; &lt;tt&gt;sudo rm /System/Library/Frameworks/JavaVM.framework/Versions/1.5&lt;/tt&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;tt&gt;sudo rm /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0&lt;/tt&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;This removes the old Java 1.5 sym links to prevent the Java 1.6 directory from being overwritten (very bad)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Using the Finder, locate the &lt;tt&gt;JavaForMacOSX10.5Update4.dmg&lt;/tt&gt; file and double-click on it to mount the disk image&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Create a sym link to a missing utility: &lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;&lt;tt&gt;sudo ln -s /usr/bin/update_dyld_shared_cache /usr/bin/update_prebinding&lt;/tt&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;This command fixes a missing sym link in Snow Leopard that is needed by the Pacifist in the next step&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Using the &lt;a href="http://www.charlessoft.com/"&gt;Pacifist&lt;/a&gt;, open the&lt;tt&gt; JavaForMacOSX10.5Update4.pkg&lt;/tt&gt; file from the mounted disk image&lt;/li&gt;&lt;br /&gt;&lt;/li&gt;In the Pacifist, navigate to &lt;tt&gt;/System/Library/Frameworks/JavaVM.framework/Versions&lt;/tt&gt; and follow these steps: &lt;/li&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Right-click on 1.5 and select 'Install to Default Location'&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Right-click on 1.5.0 and select 'Install to Default Location'&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;After going through these steps, Java 1.5 should now be installed on the system. You can see this by listing the following: &lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ ls -l /System/Library/Frameworks/JavaVM.framework/Versions/1.5&lt;br /&gt;lrwxr-xr-x  1 bsnyder  staff  5 Nov 12 13:47 /System/Library/Frameworks/JavaVM.framework/Versions/1.5 -&gt; 1.5.0&lt;br /&gt;$ ls -1 /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/&lt;br /&gt;Classes&lt;br /&gt;Commands&lt;br /&gt;Headers&lt;br /&gt;Home&lt;br /&gt;Libraries&lt;br /&gt;Resources&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.adelaideflashmob.com/wp-content/uploads/2008/12/ninja_crouch.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 75px;" src="http://www.adelaideflashmob.com/wp-content/uploads/2008/12/ninja_crouch.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;NOTE:&lt;/b&gt; Through my travels, I've found that many people have no idea that you could switch between different versions of Java. To make the task of switching extremely easy, grab my friend David's &lt;a href="http://docs.codehaus.org/display/ninja/setjdk"&gt;setjdk&lt;/a&gt; script and use it to handle this task from the command line. It's a bash script that even supports tab completion. So once the script is set up in your environment, switching between versions of Java is as easy as running the following command to see the available Java versions:&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;$ setjdk &amp;lt;tab&amp;gt;&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;Then just choose the version you'd like to use, e.g.: &lt;br /&gt;&lt;br /&gt;&lt;tt&gt;$ setjdk 1.5&lt;br /&gt;Setting this terminal's JDK to 1.5 ... java version "1.5.0_19"&lt;br /&gt;Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_19-b02-304)&lt;br /&gt;Java HotSpot(TM) Client VM (build 1.5.0_19-137, mixed mode, sharing)&lt;br /&gt;&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;UPDATE:&lt;/b&gt; I had to use the steps above to reinstall the documentation for Java 1.5 as well. I found it in the &lt;a href="http://connect.apple.com/cgi-bin/WebObjects/MemberSite.woa/207/wa/download?path=%2FJava%2Fjava_for_mac_os_x_10.5_update_4_developer_documentation%2Fjavaformacosx10.5update4docmanual.dmg&amp;wosid=4T5nczTZSGmU2EJH37Y1nPebTiB"&gt;Java for Mac OS X 10.5 Update 4 Developer Documentation&lt;/a&gt;. This placed the &lt;tt&gt;appledocs.jar&lt;/tt&gt;, the &lt;tt&gt;doc.jar&lt;/tt&gt; and the &lt;tt&gt;src.jar&lt;/tt&gt; files into the &lt;tt&gt;/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home&lt;/tt&gt; directory. Then I just expanded the &lt;tt&gt;doc.jar&lt;/tt&gt; file to be able to browse the API docs for Java 1.5 via a browser.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-8338563330630256848?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/8338563330630256848/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2009/11/grrr-what-happened-to-java-15-on-snow.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/8338563330630256848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/8338563330630256848'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2009/11/grrr-what-happened-to-java-15-on-snow.html' title='Grrr - What Happened to Java 1.5 on Snow Leopard?!'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm1.static.flickr.com/22/26044351_fa9bf19dc5_t.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-3054072339617153229</id><published>2009-06-20T10:07:00.004-06:00</published><updated>2009-06-20T10:40:15.245-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='core spring springsource'/><title type='text'>SpringSource University in Denver</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.springsource.com/files/u1/SU-logo.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 221px; height: 67px;" src="http://www.springsource.com/files/u1/SU-logo.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;On Tuesday morning I had just returned from a run at about 9:35am and was checking my messages before I showered and began working for the day. As I was reading various messages, dripping sweat and sipping on some water, I was pinged by my friend and colleague Filip Hanik on IRC. He  told me that he was sitting in a classroom in Denver for the &lt;a href="http://www.springsource.com/training"&gt;SpringSource University Core Spring Training&lt;/a&gt;. Here's how the conversation went: &lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;b&gt;Filip:&lt;/b&gt; hey &lt;br /&gt;&lt;b&gt;Bruce:&lt;/b&gt; hey, what's up? &lt;br /&gt;&lt;b&gt;Filip:&lt;/b&gt; sitting at Core Spring in Denver, but there is no trainer &lt;br /&gt;&lt;b&gt;Bruce:&lt;/b&gt; whoops &lt;br /&gt;&lt;b&gt;Bruce:&lt;/b&gt; sorry to hear that, is there anything I can do to help? &lt;br /&gt;&lt;b&gt;Filip:&lt;/b&gt; yeah, you can come down here and teach this course :)&lt;br /&gt;&lt;b&gt;Bruce:&lt;/b&gt; are you serious? &lt;br /&gt;&lt;b&gt;Filip:&lt;/b&gt; yes &lt;br /&gt;&lt;b&gt;Bruce: &lt;/b&gt; headed for the shower now, see you about 11 &lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;By 11am I was in Denver and teaching the first day of the course. &lt;br /&gt;&lt;br /&gt;Lucky for me, Chris Beams, a stellar consultant/engineer/trainer at SpringSource, was en route to deliver the rest of the course. Chris arrived later Tuesday evening and taught the course for the rest of the week through Friday and I was lucky enough to sit in. Chris went the extra mile to arrive early and stay late for the rest of the week and even wound up finishing on time on Friday afternoon, a testament to his talents, for sure.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-3054072339617153229?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/3054072339617153229/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2009/06/springsource-university-in-denver.html#comment-form' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/3054072339617153229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/3054072339617153229'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2009/06/springsource-university-in-denver.html' title='SpringSource University in Denver'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-5244933172235650523</id><published>2009-06-20T10:02:00.002-06:00</published><updated>2009-06-20T10:07:21.110-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='maven m2eclipse'/><title type='text'>Using Maven? You Should Be Using m2eclipse</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_pSHP7VYSIjE/SQdGqt2w0mI/AAAAAAAAANs/bPiBK5EygvI/s200/Maven_logo.gif"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 46px;" src="http://4.bp.blogspot.com/_pSHP7VYSIjE/SQdGqt2w0mI/AAAAAAAAANs/bPiBK5EygvI/s200/Maven_logo.gif" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you use Maven for your Java projects, then you should take a look at &lt;a href="http://eclipse.org/m2e/"&gt;m2eclipse&lt;/a&gt; plugin for Eclipse. After all, there's now a whole &lt;a href="http://www.sonatype.com/books/m2eclipse-book/reference/"&gt;book on m2eclipse&lt;/a&gt; instead of just a single chapter!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-5244933172235650523?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/5244933172235650523/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2009/06/using-maven-you-should-be-using.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/5244933172235650523'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/5244933172235650523'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2009/06/using-maven-you-should-be-using.html' title='Using Maven? You Should Be Using m2eclipse'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_pSHP7VYSIjE/SQdGqt2w0mI/AAAAAAAAANs/bPiBK5EygvI/s72-c/Maven_logo.gif' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-5076317595808979863</id><published>2009-06-11T15:25:00.003-06:00</published><updated>2009-06-11T15:43:50.858-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='integration apache camel javaone'/><title type='text'>Enterprise Integration Patterns in Practice at JavaOne 2009</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.sun.com/images/l2/l2_2009_J1.gif"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 100px; height: 88px;" src="http://www.sun.com/images/l2/l2_2009_J1.gif" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Last week I was in San Francisco to speak at JavaOne 2009 to deliver a talk named &lt;i&gt;Enterprise Integration Patterns in Practice&lt;/i&gt; where I co-presented with Andreas Egloff from Sun. &lt;br /&gt;&lt;br /&gt;We talked about implementing &lt;a href="http://eaipatterns.com/"&gt;EIP&lt;/a&gt; patterns using &lt;a href="http://camel.apache.org/"&gt;Apache Camel&lt;/a&gt; and Sun's &lt;a href="https://fuji.dev.java.net/"&gt;Fuji&lt;/a&gt;. I used &lt;a href="http://activemq.apache.org/"&gt;ActiveMQ&lt;/a&gt; in my demo which was rather short but worked well (yay! the demo gods smiled on me last week :-) ) and Andreas showed off Sun's web-based EIP editor. Although this editor looks very cool and Andreas showed how to edit scripting code in each component on the diagram, it left me wondering how it interfaces with Java code. After our demos, my laptop would not flip back to the presentation at the end (which presented an abrupt ending) but still we received a lot of complements throughout the rest of the week. &lt;br /&gt;&lt;br /&gt;Beyond the talk, I got to see tons of friends who I don't see that often throughout the year including Debbie, Guillaume, Hiram and Rob, as well as many new &lt;a href="http://springsource.com/"&gt;SpringSource&lt;/a&gt; colleagues (since the acquisition of &lt;a href="http://hyperic.com/"&gt;Hyperic&lt;/a&gt;). I also met many, many new folks including Colin and Jamie. I was also lucky enough to eat Thai food twice (love the yellow curry) and sushi once during the week - mmmmmmmmmmm. &lt;br /&gt;&lt;br /&gt;If you would like a copy of the presentation, just drop me an email and I'll send it your way (bruce DOT snyder AT gmail DOT com). I'm not sure how much sense the slides will make without the delivery, but it seems like folks are always requesting my presentations after the fact.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-5076317595808979863?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/5076317595808979863/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2009/06/enterprise-integration-patterns-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/5076317595808979863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/5076317595808979863'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2009/06/enterprise-integration-patterns-in.html' title='Enterprise Integration Patterns in Practice at JavaOne 2009'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-707641253924687787</id><published>2009-05-12T17:44:00.012-06:00</published><updated>2011-05-03T09:17:31.947-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JeOS Oracle XE VMWare'/><title type='text'>JeOS, Oracle XE and VMWare on MacOS X</title><content type='html'>Last week I installed &lt;a href="https://help.ubuntu.com/community/JeOS"&gt;Ubuntu JeOS&lt;/a&gt; (Just Enough Operating System) on VMWare Fusion. JeOS is a slimmed-down version of Ubuntu specifically made for installation in a virtual machine so that it has a much smaller footprint than the normal Ubuntu distribution. Anyway, I did this so that I'd have a VM with a smaller footprint that I can use on my MacBook Pro for development and testing. &lt;br /&gt;&lt;br /&gt;After setting up JeOS, I installed &lt;a href="http://www.oracle.com/technology/products/database/xe/index.html"&gt;Oracle XE&lt;/a&gt;, a slimmed down version of Oracle that is free for development and distribution. I used these &lt;a href="http://www.oracle.com/technology/tech/linux/install/xe-on-kubuntu.html"&gt;instructions for installing Oracle XE on Ubuntu&lt;/a&gt; but there were some catches, namely that by default the web application for Oracle XE was bound to the localhost, i.e., I couldn't see the web app from Firefox in MacOS X. This was easily remedied via &lt;a href="http://tedwise.com/2008/10/03/running-oracle-for-development-on-the-mac/comment-page-1/#comment-89"&gt;this comment on a blog post about this very topic&lt;/a&gt;: &lt;br /&gt;&lt;br /&gt;Set up the environment on JeOS to use sqlplus: &lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;export ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server&lt;br /&gt;export PATH=${PATH}:${ORACLE_HOME}/bin&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Now use the Oracle sqlplus command-line utility to alter a setting that disables local-only access to Apex. Below is the command to run: &lt;br /&gt;&lt;br /&gt;&lt;tt&gt;&lt;br /&gt;$ sqlplus system@xe&lt;br /&gt;Enter password: SYSTEM_password&lt;br /&gt;&lt;br /&gt;SQL&gt; EXEC DBMS_XDB.SETLISTENERLOCALACCESS(FALSE);&lt;br /&gt;&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;Now that I could access the Apex webapp (http://127.0.0.1:8080/apex) that is installed with Oracle XE and I was able to use Apex create a user for myself. After this, I could access Oracle XE from MacOS X.  &lt;br /&gt;&lt;br /&gt;This setup has been working very well for me until today. For no apparent reason, the networking in JeOS went flaky and I could not access the outside world at all. I switched between NAT and host-only networking in VMWare multiple times, rebooting the VM each time - no dice. I upgraded to the latest VMWare Fusion - no dice. I could SSH into the VM from MacOS but that was it. No commands from JeOS would reach the outside world. So on a whim, I reran the &lt;tt&gt;vmware-install.pl&lt;/tt&gt; script again and after that the networking seems to work again. I still have no idea why this happened which is a bit troubling. I don't want to just blindly keep running the install script again with no idea why it's fixing this networking issue.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;I guess the networking issue is common enough that Fusion provides a script to restart everything underneath of Fusion, e.g.: &lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;/Library/Application\ Support/VMware\ Fusion/boot.sh --restart&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Also, there's a good document available for &lt;a href="http://communities.vmware.com/docs/DOC-2527"&gt;Understanding Networking in VMware Fusion&lt;/a&gt; if you're interested. It's brief and to the point.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-707641253924687787?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/707641253924687787/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2009/05/jeos-oracle-xe-and-vmware-on-macos-x.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/707641253924687787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/707641253924687787'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2009/05/jeos-oracle-xe-and-vmware-on-macos-x.html' title='JeOS, Oracle XE and VMWare on MacOS X'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-5490864537397988618</id><published>2009-05-07T10:29:00.005-06:00</published><updated>2009-05-07T11:46:05.893-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java spring springsource tool suite sts'/><title type='text'>SpringSource Tool Suite Now Available For FREE!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_pSHP7VYSIjE/SdY38k7W2QI/AAAAAAAAAP8/AlUtr2ODfIk/s1600-h/springsource-logo.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 75px;" src="http://1.bp.blogspot.com/_pSHP7VYSIjE/SdY38k7W2QI/AAAAAAAAAP8/AlUtr2ODfIk/s200/springsource-logo.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5320501523629136130" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Last week in Amsterdam, at the &lt;a href="http://europe.springone.com/"&gt;SpringOne EU&lt;/a&gt; conference, it was announced that &lt;b&gt;the &lt;a href="http://www.springsource.com/products/sts"&gt;SpringSource Tool Suite&lt;/a&gt; (STS) is now available for FREE!&lt;/b&gt; I was very pleased that we made this move as STS is an excellent set of Eclipse-based development tools that can make your Java development much more productive. &lt;br /&gt;&lt;br /&gt;If you use Eclipse for your Java development and you use the Spring Framework, then you should really take STS for a spin. It's just like using the Eclipse you know and love but with many added features to make your development more productive. &lt;a href="http://www.springsource.com/products/sts/registration"&gt;Download the SpringSource Tool Suite now!&lt;/a&gt;  &lt;br /&gt;&lt;br /&gt;I also saw many great talks at SpringOne EU that showcased STS via demos using it. Here is a partial list of some that I saw: &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Development using the &lt;a href="http://www.springframework.org/"&gt;Spring Framework&lt;/a&gt;; editing Spring XML files is so much easier with STS.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Demos of OSGi development using the &lt;a href="http://www.springsource.com/products/dmserver"&gt;SpringSource dm Server&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Many demos using the feverishly popular (and close to me because I work on it) &lt;a href="http://www.springsource.com/products/tcserver"&gt;SpringSource tc Server&lt;/a&gt; (BTW, the interest in tc Server is through the roof! Who knew it would be such a hit?)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Numerous &lt;a href="http://www.grails.org/"&gt;Grails&lt;/a&gt; demos using &lt;a href="http://www.springsource.com/products/tcserver"&gt;SpringSource tc Server&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Combined with the official unveiling of &lt;a href="http://blog.springsource.com/2009/05/01/roo-part-1/"&gt;SpringSource Roo&lt;/a&gt;, the increase in productivity surprised even me.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;One of the demos that stands out in my mind was delivered by Adrian Colyer during his keynote on day two that utilized many technologies. But the thing I remember the most (and wish that I had more time to play with) was the use of the &lt;a href="http://aws.amazon.com/eclipse/"&gt;AWS Toolkit for Eclipse&lt;/a&gt; and Chris Richardson's &lt;a href="http://www.cloudfoundry.com/"&gt;Cloud Foundry&lt;/a&gt;, both for working with app deployment and monitoring in the cloud. The ease with which Adrian deployed apps to Amazon EC2 and was able to monitor them were amazing. I say it was amazing because I started working with Amazon EC2 from the command line before any such polished tools were available. It is really great to see the ever-increasing ease of working with cloud-based platforms. If you haven't checked out these two tools and you work with Amazon EC2, I highly encourage you to take some time to do so. Coupled with STS, they will make your life much, much easier. &lt;br /&gt;&lt;br /&gt;I have to say it is very cool to see the products all come together like this. It's also awesome to watch demos delivered by folks who know each tool so well. It makes me wish that we had more face-to-face meetings so that I could sponge more of the product knowledge from folks!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-5490864537397988618?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/5490864537397988618/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2009/05/springsource-tool-suite-now-available.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/5490864537397988618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/5490864537397988618'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2009/05/springsource-tool-suite-now-available.html' title='SpringSource Tool Suite Now Available For FREE!'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_pSHP7VYSIjE/SdY38k7W2QI/AAAAAAAAAP8/AlUtr2ODfIk/s72-c/springsource-logo.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-7060259908057929026</id><published>2009-04-03T10:51:00.002-06:00</published><updated>2009-04-03T11:08:39.594-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='springone activemq'/><title type='text'>Apache ActiveMQ at SpringOne EU</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://static.springframework.org/images/i21-spring-one-logo.gif"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 197px; height: 52px;" src="http://static.springframework.org/images/i21-spring-one-logo.gif" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Later this month I'll be in Amsterdam again, this time to speak at &lt;a href="http://europe.springone.com/"&gt;SpringOne EU&lt;/a&gt; about &lt;a href="http://activemq.apache.org/"&gt;Apache ActiveMQ&lt;/a&gt;. It will be great to be back in Amsterdam, especially because the annual &lt;a href="http://en.wikipedia.org/wiki/Koninginnedag"&gt;Queen's Day celebration&lt;/a&gt; takes place the week of the conference, which is always a fun time. &lt;br /&gt;&lt;br /&gt;My first SpringOne conference was back in December in Florida and it was very good. Unfortunately I had a lot of travel booked back-to-back at the time so I wasn't able to be there for the entire conference. This time I will be able to spend the entire week at the conference which will be great because there are many sessions I'd like to see. Here are just a few: &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://europe.springone.com/europe-2009/presentation/Extreme+Productivity+in+Application+Development"&gt;Extreme Productivity in Application Development&lt;/a&gt; - A talk by Ben Alex about Spring ROO&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://europe.springone.com/europe-2009/presentation/Advanced+Concurrency%3A+Design+and+Construction"&gt;Advanced Concurrency: Design and Construction&lt;/a&gt; - A talk by Rob Harrop about, well, concurrency&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://europe.springone.com/europe-2009/presentation/Implementing+REST+Web+Application+Architectures+with+Spring+MVC"&gt;Implementing REST Web Application Architectures with Spring MVC&lt;/a&gt; - A talk by Arjen Poutsma about the Spring 3.0 support for REST&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://europe.springone.com/europe-2009/presentation/Practical+Usages+of+SpringSource+dm+Server"&gt;Practical Usages of SpringSource dm Server&lt;/a&gt; - Another talk by Rob Harrop but this one is about building OSGi applications&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://europe.springone.com/europe-2009/presentation/Introduction+to+Spring+Integration"&gt;Introduction to Spring Integration&lt;/a&gt; - A talk by Mark Fisher about Spring Integration (believe it or not, I don't know much about it - but I intend to learn ;-))&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;There are many other talks I'd like to see, just too many to list. Take a look at the &lt;a href="http://europe.springone.com/europe-2009/schedule/"&gt;SpringOne EU schedule&lt;/a&gt; for the full list.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-7060259908057929026?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/7060259908057929026/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2009/04/apache-activemq-at-springone-eu.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/7060259908057929026'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/7060259908057929026'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2009/04/apache-activemq-at-springone-eu.html' title='Apache ActiveMQ at SpringOne EU'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-2252900138991668050</id><published>2009-04-03T10:21:00.004-06:00</published><updated>2009-04-03T10:51:48.960-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='springsource'/><title type='text'>Working For SpringSource</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_pSHP7VYSIjE/SdY38k7W2QI/AAAAAAAAAP8/AlUtr2ODfIk/s1600-h/springsource-logo.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 75px;" src="http://1.bp.blogspot.com/_pSHP7VYSIjE/SdY38k7W2QI/AAAAAAAAAP8/AlUtr2ODfIk/s200/springsource-logo.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5320501523629136130" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I keep hearing from folks who aren't aware that I made a move recently. So for those who don't already know it, I'm working for SpringSource now. So far the experience has been terrific because I'm surrounded by nothing but very smart people, some of whom I already knew and respected. SpringSource is most notable for one of the most widely adopted Java frameworks in existence today, the &lt;a href="http://springframework.org/"&gt;Spring Framework&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;I began using the Spring Framework back in 2003 and I can't see developing any new applications without using it. Although I don't have the privilege of working on the Spring Framework, I do get to heckle Juergen and team from the sidelines. My role hasn't changed much from the past in that I continue to do consulting and engineering. I  spend my time working on &lt;a href="http://activemq.apache.org/"&gt;Apache ActiveMQ&lt;/a&gt;, &lt;a href="http://camel.apache.org/"&gt;Apache Camel&lt;/a&gt;, &lt;a href="http://www.springsource.com/products/ams"&gt;SpringSource AMS&lt;/a&gt; and &lt;a href="http://www.springsource.com/products/tcserver"&gt;SpringSource tc Server&lt;/a&gt;. I still enjoy working with customers but I'm getting to spend a lot more time doing engineering work which is a nice change. &lt;br /&gt;&lt;br /&gt;If you want to hear me blather on more, just &lt;a href="http://www.twitter.com/brucesnyder"&gt;follow me on Twitter&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-2252900138991668050?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/2252900138991668050/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2009/04/working-for-springsource.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/2252900138991668050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/2252900138991668050'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2009/04/working-for-springsource.html' title='Working For SpringSource'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_pSHP7VYSIjE/SdY38k7W2QI/AAAAAAAAAP8/AlUtr2ODfIk/s72-c/springsource-logo.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-5041010431432033505</id><published>2009-04-03T09:49:00.004-06:00</published><updated>2009-04-03T11:10:16.531-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='apache camel integration'/><title type='text'>Need Integration? Camel Integrates With 70+ Protocols</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_pSHP7VYSIjE/SdY1RckvYVI/AAAAAAAAAP0/QU7gpDbElO0/s1600-h/camel.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 150px;" src="http://1.bp.blogspot.com/_pSHP7VYSIjE/SdY1RckvYVI/AAAAAAAAAP0/QU7gpDbElO0/s200/camel.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5320498583629160786" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Apache Camel already provides easy integration with over 70 different protocols! And the list is still growing! Take a look at the &lt;a href="http://camel.apache.org/components.html"&gt;Camel components&lt;/a&gt; and the &lt;a href="http://code.google.com/p/camel-extra/"&gt;Camel Extras&lt;/a&gt; project to see the protocols that exist today.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-5041010431432033505?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/5041010431432033505/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2009/04/need-integration-camel-integrates-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/5041010431432033505'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/5041010431432033505'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2009/04/need-integration-camel-integrates-with.html' title='Need Integration? Camel Integrates With 70+ Protocols'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_pSHP7VYSIjE/SdY1RckvYVI/AAAAAAAAAP0/QU7gpDbElO0/s72-c/camel.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-6232203808034079346</id><published>2009-04-02T12:12:00.009-06:00</published><updated>2010-08-20T09:06:15.828-06:00</updated><title type='text'>Why Hiring Consultants is Good For Business</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_pSHP7VYSIjE/SdUDaiM47JI/AAAAAAAAAPs/ORBvgoI7dfU/s1600-h/ren-stimpy.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 125px;" src="http://2.bp.blogspot.com/_pSHP7VYSIjE/SdUDaiM47JI/AAAAAAAAAPs/ORBvgoI7dfU/s200/ren-stimpy.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5320162289200458898" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Anyone whose seen the goofball comedy The Office knows who Dwight is and how his co-workers enjoy winding him up and watching him go. Well it turns out that the Dwights of the world (aka the oddball) or someone who thinks different or even just someone from the outside is actually &lt;a href="http://www.time.com/time/health/article/0,8599,1888696,00.html?cnn=yes"&gt;good for business&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;This doesn't surprise me at all because as a consultant sometimes it is odd to walk into a business and discover that the reality inside doesn't quite match the reality outside. Inviting opinions from someone who doesn't know the business and isn't afraid to ask crazy questions helps everyone to see the familiar from a different point of view. And this is partially what I enjoy about being a consultant. By not having been a part of the team, you enter the group with a fresh perspective that will hopefully spawn many ideas. So assembling a team of miscreants and hooligans is not always a bad thing ;-).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-6232203808034079346?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/6232203808034079346/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2009/04/why-hiring-consultants-is-good-for.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/6232203808034079346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/6232203808034079346'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2009/04/why-hiring-consultants-is-good-for.html' title='Why Hiring Consultants is Good For Business'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_pSHP7VYSIjE/SdUDaiM47JI/AAAAAAAAAPs/ORBvgoI7dfU/s72-c/ren-stimpy.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-537873230454566018</id><published>2009-04-01T22:38:00.000-06:00</published><updated>2009-04-02T12:08:27.632-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='calendars'/><title type='text'>Syncing Multiple Calendars With Google Calendar</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.dabbledoo.com/ee/images/uploads/appletell/iCal.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 100px;" src="http://www.dabbledoo.com/ee/images/uploads/appletell/iCal.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Calendars are important in my family. My wife and I are both busy professionals, I travel for work a fair amount and we have the events from our two kids as well. Given that we both use MacBook Pros at home this would be very easy. But for her professional life, my wife uses a Palm Treo phone and that's her master calendar. She (begrudgingly) syncs her Treo with her Windows PC at work. I use an iPhone which syncs easily with my MacBook. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.blogcdn.com/www.engadgetmobile.com/media/2006/11/11.5.06---goosync.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 157px;" src="http://www.blogcdn.com/www.engadgetmobile.com/media/2006/11/11.5.06---goosync.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So I hunted around a bit and found something called &lt;a href="http://www.goosync.com/"&gt;GooSync&lt;/a&gt; that can sync the Treo calendar with Google Calendar. This works great for her and all I had to do was sign up for a free account. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://busymac.com/images/icon.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 100px;" src="http://busymac.com/images/icon.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Syncing my iCal calendar from my MacBook was also easy using &lt;a href="http://busymac.com/"&gt;BusySync&lt;/a&gt;. This works great, but in the future it would really be nice if I could set up a CalDav server like the &lt;a href="http://www.apple.com/server/macosx/features/ical.html"&gt;iCal Server&lt;/a&gt; from Apple. &lt;br /&gt;&lt;br /&gt;At SpringSource we recently switched from using &lt;a href="http://www.zimbra.com/"&gt;Zimbra&lt;/a&gt; to Microsoft Exchange (blech) which made me pull out Entourage again (essentially Outlook/Lookout for the Mac - happy, happy, joy, joy). When this change occurred I started maintaining my Exchange calendar via Entourage which gave me yet another calendar to maintain. Fortunately Entourage has a feature that will automatically sync an Exchange calendar with iCal automatically. Unfortunately this is a client-side solution so Entourage must be running for the sync to take place. Luckily, EasySync just syncs another calendar from iCal to Google Calendar and my iPhone just does the same automatically. &lt;br /&gt;&lt;br /&gt;The whole point of all this syncing to Google Calendar is so that we can each share one another's calendars via Google Calendar. Each syncing solution syncs in a bi-directional manner from Google Calendar making all of this possible. We've been using this for nearly a year and so far we haven't had any hiccups with any of these solutions and everything has worked great. &lt;br /&gt;&lt;br /&gt;Good solutions are good because you don't hardly notice them after the initial configuration and that initial configuration doesn't require a huge time investment.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-537873230454566018?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/537873230454566018/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2009/04/syncing-multiple-calendars-with-google.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/537873230454566018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/537873230454566018'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2009/04/syncing-multiple-calendars-with-google.html' title='Syncing Multiple Calendars With Google Calendar'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-9006877996866022890</id><published>2009-04-01T15:54:00.004-06:00</published><updated>2010-12-21T10:36:36.218-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EIP'/><title type='text'>EIP Patterns in OmniGraffle</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://graffletopia.com/images/previews/137/original.png?1212108551"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 250px;" src="http://graffletopia.com/images/previews/137/original.png?1212108551" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you use OmniGraffle and you haven't checked out &lt;a href="http://graffletopia.com/"&gt;Graffletopia&lt;/a&gt; yet, do it now! Graffletopia is full of stencils galore for OmniGraffle that have been created by folks in the community. &lt;br /&gt;&lt;br /&gt;Sadly, our non-Mac friends are out of luck with the fine collection of apps from the OmniGroup as all the Omni apps are only available on MacOS X. But if you're a Mac user, like my buddy &lt;a href="http://www.sonatype.com/people/author/jason/"&gt;Jason&lt;/a&gt; says, 'Omni apps are like crack.' Totally true! &lt;br /&gt;&lt;br /&gt;Here's an awesome &lt;a href="http://graffletopia.com/stencils/137"&gt;EIP patterns stencil&lt;/a&gt; for those who work with the EIP patterns and need to create nice diagrams noting the patterns. I've used this for a while but, again, someone noticed me using it recently and asked where I got the icons for the patterns. &lt;br /&gt;&lt;br /&gt;My latest cool find on Graffletopia is shown below, it's called &lt;a href="http://graffletopia.com/stencils/449"&gt;Napkin UML&lt;/a&gt;: &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://graffletopia.com/images/previews/449/original.png?1237196049"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 175px" src="http://graffletopia.com/images/previews/449/original.png?1237196049" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Simple, straightforward UML that looks as if it was hand drawn.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-9006877996866022890?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/9006877996866022890/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2009/04/eip-patterns-in-omnigraffle.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/9006877996866022890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/9006877996866022890'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2009/04/eip-patterns-in-omnigraffle.html' title='EIP Patterns in OmniGraffle'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-5562715755553537661</id><published>2009-04-01T10:23:00.001-06:00</published><updated>2009-04-02T14:56:09.397-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='productivity'/><title type='text'>Productivity Tools and Techniques</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://thumb.visualizeus.com/thumbs/08/04/04/cartoon,funny,list,procrastination,productivity,spongebob,to,do-184c68999c1dd8a81cad33d00af7afbb_m.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 125px;" src="http://thumb.visualizeus.com/thumbs/08/04/04/cartoon,funny,list,procrastination,productivity,spongebob,to,do-184c68999c1dd8a81cad33d00af7afbb_m.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It seems that many times when I am sitting side-by-side working with others, they start asking me about the software on my computer that they see me using. At that point I have explain GTD and many things surrounding it. So here are some unique productivity tools and techniques, some that I've used for a while and one I just discovered: &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Getting_Things_Done"&gt;Getting Things Done (GTD)&lt;/a&gt; is a book and a way of working. In the last few years many apps have sprung up surrounding the GTD style including &lt;a href="http://www.omnigroup.com/applications/omnifocus/"&gt;OmniFocus&lt;/a&gt;, &lt;a href="http://www.rememberthemilk.com/"&gt;RememberTheMilk&lt;/a&gt;, &lt;a href="http://culturedcode.com/things/"&gt;Things&lt;/a&gt;, &lt;a href="http://bargiel.home.pl/iGTD/"&gt;iGTD&lt;/a&gt;, &lt;a href="http://www.gtdgmail.com/"&gt;GTDInbox/GTDGMail&lt;/a&gt; and many, many more. I have used and like RememberTheMilk and OmniFocus, though I must say that OmniFocus has won me over more because I used kGTD (though I haven't shelled out for the iPhone app yet). Check out this &lt;a href="http://www.priacta.com/Articles/Comparison_of_GTD_Software.php"&gt;GTD software comparison&lt;/a&gt; for a huge list of GTD software for many platforms.&lt;/li&gt; &lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.pomodorotechnique.com/"&gt;The Pomodoro Technique&lt;/a&gt; is interesting to me because I'm into GTD. This was introduced to me by my friend &lt;a href="http://blog.arendsen.net/"&gt;Alef&lt;/a&gt; and is rather practical. This technique helps you to actually execute if you use GTD. The Pomodoro Technique advises you to gather your tasks in the morning on a sheet of paper as a todo list and then work down the list in uncommitted blocks of 25 minute periods. Although David Allen says that the morning todo list idea is less than ideal, it works for some folks. I don't stick to it religiously, but when I use it I'm much more productive.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;(Just a quick mention since I mentioned GTD,  has anyone ready David Allen's new book, &lt;a href="http://www.davidco.com/miaw.php"&gt;Making It All Work&lt;/a&gt;, the follow-up to GTD? Unfortunately I haven't had the time to read this one yet.) &lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://dejal.com/timeout/"&gt;Dejal Time Out&lt;/a&gt; is great for sticking to a regular schedule of taking breaks throughout the work day. It also works well for use with the Pomodoro Technique mentioned above. Believe it or not, this is a great tool for keeping you focused on tasks by making you take regular breaks. For years I've always thought about difficult problems by getting away from them completely and doing something like playing my guitar. Well this app regularly reminds me to clear my mind to make room for productive thinking.&lt;/li&gt; &lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://visitsteve.com/work/selfcontrol/"&gt;SelfControl&lt;/a&gt; allows you to set up a blacklist of sites to block in an effort to make you stop visiting certain URLs. This app is funny but I'll bet it works, I haven't tried it yet. I typically will just close email apps and the browser (not always possible when developing web apps) to dampen the distraction that is the internet. Research shows that multi-tasking is bullshit. I like to call it multi-ignoring.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.apimac.com/timer/index.php"&gt;Timer for Mac OS X&lt;/a&gt; is something I used before I discovered Dejal Time Out. I still tend to go back and forth between this and Time Out. Just set the timer to count down for 25 minutes and go.&lt;/li&gt; &lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/time-tracker-mac/"&gt;Time Tracker&lt;/a&gt; is a very simple app for tracking time on a task. This one works well but is less needed if I can stick to working in 25 minute blocks.&lt;/li&gt; &lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;This post is really a quick braindump of stuff. There are many other items that I could add and maybe I will over time through more posts. But for now, this is what I had available in the cache tonight. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Do you know of any other tools and techniques that you find handy? Tell me about them.&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-5562715755553537661?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/5562715755553537661/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2009/03/productivity-tools-and-techniques.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/5562715755553537661'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/5562715755553537661'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2009/03/productivity-tools-and-techniques.html' title='Productivity Tools and Techniques'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-7845850115154079689</id><published>2009-04-01T09:20:00.002-06:00</published><updated>2009-04-01T09:30:55.957-06:00</updated><title type='text'>Google CADIE - AI for Email and a Hilarious Home Page</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.google.com/googleblogs/images/cadie/anipanda.gif"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 94px; height: 117px;" src="http://www.google.com/googleblogs/images/cadie/anipanda.gif" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Early this morning when I logged into GMail, I noticed that the GMail home page was displaying information about Google's Cognitive Autoheuristic Distributed-Intelligence Entity (CADIE). Immediately I remembered playing with &lt;a href="http://search.cpan.org/dist/Chatbot-Eliza/"&gt;Chatbot::Eliza&lt;/a&gt; many years ago in Perl. A very interesting idea with many possibilities. &lt;br /&gt;&lt;br /&gt;Then I checked out the &lt;a href="http://cadiesingularity.blogspot.com/"&gt;CADIE homepage&lt;/a&gt; only to be greeted by a cheesy, panda-laden website with goofy music playing in the background. At first I thought that I must have landed on the wrong page somehow. But after reading the page and seeing the link to the technical info about CADIE, I really laughed. Good to see folks with a healthy sense of humor about themselves. What a hoot!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-7845850115154079689?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/7845850115154079689/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2009/04/google-cadie-ai-for-email-and-hilarious.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/7845850115154079689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/7845850115154079689'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2009/04/google-cadie-ai-for-email-and-hilarious.html' title='Google CADIE - AI for Email and a Hilarious Home Page'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-240671598681031234</id><published>2009-03-31T09:52:00.007-06:00</published><updated>2010-12-21T10:37:19.061-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='activemq in action'/><title type='text'>Last Day to Get 40% Off of ActiveMQ in Action</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://manning.com/snyder/snyder_cover150.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 150px; height: 188px;" src="http://manning.com/snyder/snyder_cover150.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Today is the last day to get 40% off of &lt;a href="http://www.manning.com/affiliate/idevaffiliate.php?id=1063_140"&gt;ActiveMQ in Action&lt;/a&gt; (either print+ebook or just ebook). Just use the coupon code &lt;b&gt;activemq40&lt;/b&gt; to get the discount at the time of checkout. Hurry!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;UPDATE: I've just been informed that the code above was mistakenly deactivated for a short time and has since been corrected. Now this code will not expire until tomorrow. So now you have an additional day!&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-240671598681031234?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/240671598681031234/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2009/03/last-day-to-get-40-off-of-activemq-in.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/240671598681031234'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/240671598681031234'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2009/03/last-day-to-get-40-off-of-activemq-in.html' title='Last Day to Get 40% Off of ActiveMQ in Action'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-2707826125417750114</id><published>2009-03-30T16:48:00.003-06:00</published><updated>2009-03-30T16:54:36.513-06:00</updated><title type='text'>The Sheep Market</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_pSHP7VYSIjE/SdFMo0Fn-cI/AAAAAAAAAPk/rdXkHt-_F1I/s1600-h/sheep.gif"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 205px; height: 205px;" src="http://2.bp.blogspot.com/_pSHP7VYSIjE/SdFMo0Fn-cI/AAAAAAAAAPk/rdXkHt-_F1I/s320/sheep.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5319116898961979842" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This has been around the internet for a few years but it's still neat. If you haven't seen &lt;a href="http://www.thesheepmarket.com/"&gt;The Sheep Market&lt;/a&gt; yet, you should check it out. My kids love it and enjoy looking at the sheep drawings. Not only that, but the app itself is kinda cool.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-2707826125417750114?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/2707826125417750114/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2009/03/sheep-market.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/2707826125417750114'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/2707826125417750114'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2009/03/sheep-market.html' title='The Sheep Market'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_pSHP7VYSIjE/SdFMo0Fn-cI/AAAAAAAAAPk/rdXkHt-_F1I/s72-c/sheep.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-7090684630739785187</id><published>2009-03-17T12:51:00.003-06:00</published><updated>2009-03-17T13:15:40.047-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='apache camel eip'/><title type='text'>Apache Camel and EIP at JavaOne 2009</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.eaipatterns.com/img/book_cover.gif"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 150px;" src="http://www.eaipatterns.com/img/book_cover.gif" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Looks like I'll be headed to San Francisco to speak at JavaOne in June. If you're at all familiar with the wonderful &lt;a href="http://eaipatterns.com/"&gt;Enterprise Integration Patterns&lt;/a&gt; book, then this will be of interest to you since it's focused on using the EIP patterns in your applications. &lt;br /&gt;&lt;br /&gt;I'm doing a session titled &lt;a href="http://www28.cplan.com/cc230/session_details.jsp?isid=304839&amp;ilocation_id=230-1&amp;ilanguage=english"&gt;Enterprise Integration Patterns In Practice&lt;/a&gt; with Andreas Egloff from Sun. Andi is going to speak about &lt;a href="https://fuji.dev.java.net/"&gt;Fuji&lt;/a&gt; and I'll be talking about &lt;a href="http://camel.apache.org/"&gt;Apache Camel&lt;/a&gt;. Both software packages allow you to make use of EIP patterns in their own way. We're planning to discuss the patterns themselves and where they might fit into your applications, the use of Domain Specific Languages to express EIP patterns, the relation of EIP patterns to items such as Message Oriented Middleware and Service Oriented Architecture and we'll do a demo of  both Fuji and Camel.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-7090684630739785187?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/7090684630739785187/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2009/03/apache-camel-and-eip-at-javaone-2009.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/7090684630739785187'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/7090684630739785187'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2009/03/apache-camel-and-eip-at-javaone-2009.html' title='Apache Camel and EIP at JavaOne 2009'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-3886275618679332765</id><published>2009-03-12T12:58:00.003-06:00</published><updated>2009-05-14T13:56:10.060-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Direct Linux Kernel Input</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.gnist.org/images/articles/sysrq_1_original.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 275px;" src="http://blog.gnist.org/images/articles/sysrq_1_original.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;CAUTION: &lt;/b&gt;Wicked powerful feature in Linux&lt;br /&gt;&lt;br /&gt;I've worked with Linux since back around 1995 or 1996 and I was not aware of this feature until yesterday. Did you know that you can send commands directly into the Linux kernel via &lt;a href="http://www.redhat.com/docs/manuals/enterprise/RHEL-4-Manual/en-US/Reference_Guide/s2-proc-sysrq-trigger.html"&gt;&lt;tt&gt;/proc/sysrq-trigger&lt;/tt&gt;&lt;/a&gt;? You can instruct the kernel to perform such tasks as rebooting the kernel and crashing the system among many others.  This winds up being very handy for testing purposes (and incredibly powerful). &lt;br /&gt;&lt;br /&gt;Just don't invoke this command without first checking with your sysadmin or you might be heavily flogged.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-3886275618679332765?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/3886275618679332765/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2009/03/direct-linux-kernel-input.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/3886275618679332765'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/3886275618679332765'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2009/03/direct-linux-kernel-input.html' title='Direct Linux Kernel Input'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-6668053556197842331</id><published>2009-03-10T21:36:00.007-06:00</published><updated>2010-12-21T10:37:37.507-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='activemq in action'/><title type='text'>40% Off of ActiveMQ in Action!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://manning.com/snyder/snyder_cover150.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 150px; height: 188px;" src="http://manning.com/snyder/snyder_cover150.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Starting today Manning is offering 40% off &lt;a href="http://www.manning.com/affiliate/idevaffiliate.php?id=1063_140"&gt;ActiveMQ in Action&lt;/a&gt; (either print+ebook or just ebook) redeemable at checkout. You can use the coupon code &lt;b&gt;activemq40&lt;/b&gt; to get the discount. This offer expires on  Tuesday, 31 March 2009.&lt;br /&gt;&lt;br /&gt;Your Mom wants you to &lt;a href="http://www.manning.com/affiliate/idevaffiliate.php?id=1063_140"&gt;buy this book&lt;/a&gt;!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-6668053556197842331?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/6668053556197842331/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2009/03/40-off-of-activemq-in-action.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/6668053556197842331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/6668053556197842331'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2009/03/40-off-of-activemq-in-action.html' title='40% Off of ActiveMQ in Action!'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-4486818035993040572</id><published>2009-03-05T20:56:00.003-07:00</published><updated>2009-03-05T22:15:04.397-07:00</updated><title type='text'>Web Designer/Webmaster Position at SpringSource</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_pSHP7VYSIjE/SbCi7mmQ4JI/AAAAAAAAAO8/Yk9-nv0ggtc/s1600-h/springsource-logo.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 222px; height: 83px;" src="http://1.bp.blogspot.com/_pSHP7VYSIjE/SbCi7mmQ4JI/AAAAAAAAAO8/Yk9-nv0ggtc/s320/springsource-logo.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5309923105526833298" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Please DO NOT APPLY for this position if you: &lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Are a talentless hack whose best skill is procrastination&lt;/li&gt; &lt;br /&gt;&lt;li&gt;You crumble under pressure&lt;/li&gt; &lt;br /&gt;&lt;li&gt;You disdain collaborating with coworkers&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Please DO APPLY for this position if you:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Enjoy working in Flash, Illustrator and Photoshop&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Live to hack CSS, Javascript and PHP&lt;/li&gt; &lt;br /&gt;&lt;li&gt;You are enthusiastic and focused on users and their experience on your websites&lt;/li&gt; &lt;br /&gt;&lt;li&gt;You enjoy working with an incredibly talented group of folks&lt;/li&gt;&lt;br /&gt;&lt;li&gt;You want to work for a company whose products are incredibly popular and have been adopted far and wide&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;At &lt;a href="http://springsource.com/"&gt;SpringSource&lt;/a&gt; we're looking for somebody who lives to handle everything about websites from graphic design to technical infrastructure to marketing to support to site analytics. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.linkedin.com/jobs?viewJob=&amp;jobId=661524&amp;trk=NUS_JOBP_title&amp;goback=%2Ehom"&gt;APPLY TODAY&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-4486818035993040572?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/4486818035993040572/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2009/03/web-designerwebmaster-position-at.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/4486818035993040572'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/4486818035993040572'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2009/03/web-designerwebmaster-position-at.html' title='Web Designer/Webmaster Position at SpringSource'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_pSHP7VYSIjE/SbCi7mmQ4JI/AAAAAAAAAO8/Yk9-nv0ggtc/s72-c/springsource-logo.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-3121094659277801525</id><published>2009-03-05T14:15:00.007-07:00</published><updated>2009-03-05T17:25:47.907-07:00</updated><title type='text'>Systems Integration Has Done It Again, Mein Furer</title><content type='html'>Below is a clip from a film about Nazi Germany named &lt;a href="http://www.downfallthefilm.com/"&gt;Downfall&lt;/a&gt;(Der Untergang in German - thanks Emmanuel). The subtitles were added so as to relate the entire clip to systems integration and the seeming battle over control amongst teams inside of a company (as well as a little hat tip to my friend Ross and his system integration product named &lt;a href="http://www.mulesource.org/"&gt;Mule&lt;/a&gt;). This had me laughing out loud a few times - absolutely hilarious!&lt;br /&gt;&lt;br /&gt;&lt;object width="480" height="295"&gt;&lt;param name="movie" value="http://www.youtube.com/v/4qeWTg5b3mw&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/4qeWTg5b3mw&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="295"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;For some reason the embedded video is a bit chopped so here's the &lt;a href="http://www.youtube.com/watch?v=4qeWTg5b3mw"&gt;link to YouTube&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-3121094659277801525?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/3121094659277801525/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2009/03/systems-integration-has-done-it-again.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/3121094659277801525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/3121094659277801525'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2009/03/systems-integration-has-done-it-again.html' title='Systems Integration Has Done It Again, Mein Furer'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-4103210711173450525</id><published>2009-02-27T06:08:00.006-07:00</published><updated>2009-02-27T16:14:39.926-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mac os x safari'/><title type='text'>Safari 4 Beta - Nice and Speedy</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://images.apple.com/safari/images/button-download-icon-20090217.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 93px; height: 102px;" src="http://images.apple.com/safari/images/button-download-icon-20090217.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;I've been a dedicated Firefox user for years now, but I tend to open many, many tabs at once causing it to push the CPU quite a lot. This isn't a big deal when my MacBook Pro is plugged in but when running on battery it means that the battery life can take a serious hit - down to less than two hours at times. So over the last few months I have tended to dance back and forth between FireFox and Safari even more. &lt;br /&gt;&lt;br /&gt;Although there are some FireFox plugins I use fairly regularly, I've been living OK without them in Safar. The biggest discovery I made in Safari a couple months ago was the restoration of tabs and windows after quitting Safari. Firefox handles this automatically. After poking around under the History menu I found an option named 'Reopen All Windows From Last Session' and another option named 'Reopen Last Closed Window'. These two options in Safari are the equivalent of two options I use in Firefox all the time. The difference with Firefox is that it will prompt you when it opens asking if you'd like to restore the tabs and windows from the last session. Then this week I saw some folks talking about upgrading to Safari 4, so I took the plunge and it was well worth it. &lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Safari 4 is simply much faster. GMail is incredibly fast (not a huge surprise since it has always been faster than Firefox) - even faster than Safari 3.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The new visual history feature named Top Sites is nice eye candy but not earth-shattering as Opera already has similar features.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Top Sites also offers a nice search feature. It's really no different from standard history searching but it uses Top Sites so it shows the visual preview of the pages in your history.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Tabs have been moved to the very top of the overall window which is a little goofy looking at first, but they can be dragged around and even dragged off the current window to make a new window or even dragged onto an existing window to form a tab.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Autocomplete on the browser command line with a suggestion about what you're typing is pretty cool.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The reload button has been moved to the end of the browser command line (like the iPhone).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Safari 4 upgraded and didn't break the DeliciousSafari plugin I use. Very nice considering that many Firefox plugins need to be upgraded after a FireFox upgrade.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;I'm sure there's much more to the Safari 4 upgrade, but these are the items I noticed right away. Here's a &lt;a href="http://www.apple.com/safari/features.html"&gt;list of 150 features in Safari 4&lt;/a&gt; from Apple with the new features flagged. &lt;br /&gt;&lt;br /&gt;One thing I found odd was that the upgrade required MacOS X to be rebooted. I'm sure there's good reason, but what a PITA. Oh well, small pain for big gains in speed.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;UPDATE:&lt;/b&gt; Well, what I said about the DeliciousSafari seems to only apply to it. It looks like 1Password is not working at all so I need to look into reinstalling it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-4103210711173450525?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/4103210711173450525/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2009/02/safari-4-beta-nice-and-speedy.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/4103210711173450525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/4103210711173450525'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2009/02/safari-4-beta-nice-and-speedy.html' title='Safari 4 Beta - Nice and Speedy'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-3828957764097393419</id><published>2009-02-17T23:53:00.003-07:00</published><updated>2009-02-17T23:58:12.889-07:00</updated><title type='text'>Do You Need Integration Patterns? You Need Camel</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://fohn.net/camel-pictures-facts/the-pictures/Arabian-Camel-800x600.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="http://fohn.net/camel-pictures-facts/the-pictures/Arabian-Camel-800x600.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I'm in Germany consulting this week and it is cold and snowy - brrrr. I miss the Colorado sunshine. &lt;br /&gt;&lt;br /&gt;This is just a quick re-blog of Jon's awesome entry about EIPs and Camel named &lt;a href="http://janstey.blogspot.com/2009/02/apache-camel-more-eips-than-you-can.html"&gt;Apache Camel... more EIPs than you can shake a stick at!&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;If you need enterprise integration patterns, you need Apache Camel.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-3828957764097393419?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/3828957764097393419/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2009/02/do-you-need-integration-patterns-you.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/3828957764097393419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/3828957764097393419'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2009/02/do-you-need-integration-patterns-you.html' title='Do You Need Integration Patterns? You Need Camel'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-4864623353866248937</id><published>2009-02-15T05:57:00.002-07:00</published><updated>2009-02-15T06:07:27.966-07:00</updated><title type='text'>If You Use Maven, You Need These Books</title><content type='html'>If you use Maven at all, you should really check out the list of books surrounding Maven and developing with Maven that &lt;a href="http://www.sonatype.com/documentation/books"&gt;Sontaype now offers&lt;/a&gt;. Judging by the quality of &lt;a href="http://www.sonatype.com/books/maven-book/reference/"&gt;Maven: The Definitive Guide&lt;/a&gt; and the quality of Sonatype software, the books on Nexus and Eclipse look equally good. &lt;br /&gt;&lt;br /&gt;I use m2e and Nexus in my daily development and can't live without either of them. m2e makes working with Maven from within Eclipse extremely easy and I use it every day. There are just too many great features in m2e to name them and I can't recommend it enough. I also use and am very happy with Nexus. In fact, &lt;a href="http://bsnyderblog.blogspot.com/2008/08/do-you-use-maven-if-so-you-need-nexus.html"&gt;I run a local copy of Nexus&lt;/a&gt; because it speeds up my Maven builds tremendously. If you don't believe me, try it out yourself.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-4864623353866248937?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/4864623353866248937/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2009/02/if-you-use-maven-you-need-these-books.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/4864623353866248937'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/4864623353866248937'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2009/02/if-you-use-maven-you-need-these-books.html' title='If You Use Maven, You Need These Books'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-3442544407551401952</id><published>2009-02-09T16:02:00.004-07:00</published><updated>2009-02-09T16:40:48.914-07:00</updated><title type='text'>Use Dropins to Make Eclipse Plugin Management Easier</title><content type='html'>In Eclipse 3.3 I used to manage plugins by keeping them all in a local site that was a completely separate directory from my eclipse directory. In Eclipse 3.4, this functionality was more or less eliminated as adding a local site actually copies the plugin into the features and plugins dirs under the Eclipse dir. But last Summer I discovered a feature in Eclipse 3.4 that makes managing plugins much easier named &lt;a href="http://wiki.eclipse.org/Equinox_p2_Getting_Started#Dropins"&gt;dropins&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;This is nothing more than a known watched directory named dropins that is scanned at startup. There are some additional features, but this is the basic functionality. It supports a few different formats but the one I've used is demonstrated below. In the base eclipse dir, I create a dir named dropins. Then I manually download and expand plugins that I'd like to use into the dropins dir. For example, here are the contents of a dropins dir I've used: &lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ ls -1 ./eclipse/dropins/&lt;br /&gt;GEF-SDK-3.4.1&lt;br /&gt;GEF-zest-sdk-3.4.1&lt;br /&gt;ajdt_1.6.0_for_eclipse_3.4&lt;br /&gt;dtp-sdk_1.6.1&lt;br /&gt;emf-runtime-2.4.1&lt;br /&gt;mylyn-3.0.3-e3.4&lt;br /&gt;site-1.4.3&lt;br /&gt;wtp-sdk-R-3.0.2-20080921203356&lt;br /&gt;xsd-runtime-2.4.1&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The contents of the GEF-SDK dir looks like this: &lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ ls -1 ./eclipse/dropins/GEF-SDK-3.4.1/eclipse/&lt;br /&gt;epl-v10.html&lt;br /&gt;features&lt;br /&gt;notice.html&lt;br /&gt;plugins&lt;br /&gt;readme&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This is nothing more than an expanded copy of the GEF-SDK. Instead of being expanded into the base eclipse dir, it's expanded into a dir of its own inside the dropins dir. so the contents of the features dir is here: &lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ ls -1 ./eclipse/dropins/GEF-SDK-3.4.1/eclipse/features/           &lt;br /&gt;org.eclipse.draw2d.sdk_3.4.1.v20080806-67718083A56B4H3F84A-__6_2A32&lt;br /&gt;org.eclipse.draw2d.source_3.4.1.v20080806-3307w31191_2102462&lt;br /&gt;org.eclipse.draw2d_3.4.1.v20080806-3307w31191_2102462&lt;br /&gt;org.eclipse.gef.sdk_3.4.1.v20080806-7B7E297OK9c7WEeDMZJfHVNDRBPX&lt;br /&gt;org.eclipse.gef.source_3.4.1.v20080806-67718083A56B4H2A3213573&lt;br /&gt;org.eclipse.gef_3.4.1.v20080806-67718083A56B4H2A3213573&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;And the contents of the plugins dir is here: &lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ ls -1 ./eclipse/dropins/GEF-SDK-3.4.1/eclipse/plugins/&lt;br /&gt;org.eclipse.draw2d.doc.isv_3.4.1.v20080806.jar&lt;br /&gt;org.eclipse.draw2d.source_3.4.1.v20080806-3307w31191_2102462&lt;br /&gt;org.eclipse.draw2d_3.4.1.v20080910-1351.jar&lt;br /&gt;org.eclipse.gef.doc.isv_3.4.1.v20080806.jar&lt;br /&gt;org.eclipse.gef.examples.ui.pde_3.4.0.v20080226.jar&lt;br /&gt;org.eclipse.gef.source_3.4.1.v20080806-67718083A56B4H2A3213573&lt;br /&gt;org.eclipse.gef_3.4.1.v20080806.jar&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This makes managing many plugins in many different Eclipse instances much easier. But I must warn you that troubleshooting can try your nerves. If the contents of a dir is not formatted correctly, Eclipse just won't load the plugin. Though Eclipse does output some errors to the &lt;tt&gt;$WORKSPACE/.metadata/.log&lt;/tt&gt; file which can be very handy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-3442544407551401952?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/3442544407551401952/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2009/02/use-dropins-to-make-eclipse-plugin.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/3442544407551401952'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/3442544407551401952'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2009/02/use-dropins-to-make-eclipse-plugin.html' title='Use Dropins to Make Eclipse Plugin Management Easier'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-4720587637452611126</id><published>2009-02-06T00:04:00.003-07:00</published><updated>2009-02-09T10:19:13.468-07:00</updated><title type='text'>ActiveMQ Architect/Developer Position in NYC</title><content type='html'>I know the job market is difficult now, but there are still some companies looking for folks in the IT area. Here's a position for those of you with enterprise messaging experience and especially using ActiveMQ:&lt;br /&gt;&lt;br /&gt;A very dynamic and fast growing software-based services company in NYC serving the high volume trading sector of the financial marketplace is seeking someone for a full-time position who can own the messaging architecture and development of a product in a SOA environment.&lt;br /&gt;&lt;br /&gt;Skills required include:&lt;br /&gt;* Proven experience with and knowledge of enterprise messaging&lt;br /&gt;* Experience with ActiveMQ, WebsphereMQ, SonicMQ, TIBCO, etc. a plus&lt;br /&gt;* 7+ years of experience with Java/Java EE&lt;br /&gt;* Experience with architecture, design, refactoring and testing&lt;br /&gt;* Excellent leadership skills&lt;br /&gt;* Ability to work with and oversee other developers&lt;br /&gt;&lt;br /&gt;Do you have ActiveMQ experience? Does this position suit you? If so, please &lt;a href="bruceDOTsnyderATgmailDOTcom"&gt;send me an email&lt;/a&gt; with a cover letter introducing yourself and your resume.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-4720587637452611126?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/4720587637452611126/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2009/02/activemq-architectdeveloper-position-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/4720587637452611126'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/4720587637452611126'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2009/02/activemq-architectdeveloper-position-in.html' title='ActiveMQ Architect/Developer Position in NYC'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-8723124099250131037</id><published>2009-02-05T11:57:00.005-07:00</published><updated>2009-02-05T17:53:51.360-07:00</updated><title type='text'>Prevent Your MacBook From Going to Sleep When the Lid is Closed</title><content type='html'>&lt;img align="left" src="http://insomniax.semaja2.net/logo.png" /&gt;Have you ever wanted to prevent a MacBook from going to sleep when the lid is closed? I use a 24" external monitor with my MacBook's lid closed which tells me it has the capability, but this is somehow different than preventing it from going to sleep every time the lid is closed. Well, today I stumbled upon a solution for this in a piece of software named &lt;a href="http://semaja2.net/insomniaxinfo/"&gt;InsomniaX&lt;/a&gt;. I haven't tried this yet, so if you take it for a spin, I'm curious to know how it works for you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-8723124099250131037?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/8723124099250131037/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2009/02/prevent-your-macbook-from-going-to.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/8723124099250131037'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/8723124099250131037'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2009/02/prevent-your-macbook-from-going-to.html' title='Prevent Your MacBook From Going to Sleep When the Lid is Closed'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-8666341885113975261</id><published>2009-02-05T11:16:00.004-07:00</published><updated>2009-02-13T15:46:02.146-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='activemq'/><title type='text'>New Chapters Available From ActiveMQ in Action</title><content type='html'>&lt;img align="left" src="http://manning.com/snyder/snyder_cover150.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;More new chapters were made available from &lt;a href="http://manning.com/snyder/"&gt;ActiveMQ in Action&lt;/a&gt; today via the Manning Early Access Program. Please note that the list of chapters available at the link above is slightly incorrect. We're working to get the page corrected, but in the meantime, below is the correct list of chapters that are currently available: &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Chapter 1 - Understanding message-oriented middleware and JMS&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Chapter 2 - Introduction to Apache ActiveMQ&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Chapter 3 - Understanding connectors&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Chapter 4 - Persisting messages&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Chapter 5 - Securing Apache ActiveMQ&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Chapter 6 - Creating Java applications with ActiveMQ&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Chapter 8 - Connecting to ActiveMQ with other languages&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Chapter 12 - Tuning ActiveMQ for performance&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;The real reason that the numbering is off is due to us writing some chapters out of order. We're using DocBook to author the book with each chapter set up as a separate XML file and we're using XInclude to gather them into a book. When you assemble DocBook documents in this manner, the numbering is automatic. Because we skipped some chapters, the numbering is simple one-based numbering and it disregards us skipping some chapters. Simple to live with for the time-being. &lt;br /&gt;&lt;br /&gt;The Manning Early Access Program (MEAP) is interesting because it gives readers access to the chapters as we (the authors) write them. These chapters have not yet undergone any copy editing and are provided in a PDF that I built on my laptop personally. This means that the chapters are fairly raw but it also means that you can provide feedback to the authors via the forums. And we really like that feedback because it helps to improve the quality of the book. &lt;br /&gt;&lt;br /&gt;If you're interested to read the book as it's being written and to even provide some feedback before it's actually published, I encourage you to start using MEAP. Your feedback will improve the quality of the book for everyone.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-8666341885113975261?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/8666341885113975261/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2009/02/new-chapters-available-from-activemq-in.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/8666341885113975261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/8666341885113975261'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2009/02/new-chapters-available-from-activemq-in.html' title='New Chapters Available From ActiveMQ in Action'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-127541835987833973</id><published>2009-01-30T16:53:00.006-07:00</published><updated>2009-02-05T11:38:11.936-07:00</updated><title type='text'>Playmobil Security Check Point</title><content type='html'>&lt;img align="left" src="http://ecx.images-amazon.com/images/I/41G9WA5NRDL._SL500_AA280_.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;As a frequent traveler for business, not only did the existence of this toy make me say to myself, 'WTF? I've gotta check this out', but the most popular reviews made me laugh out loud. Never again will I pass through a security check point without thinking of this toy. To think that there's a toy modeled after those annoying and reactionary security check points in airports is completely hilarious. (I mean, really, do they make anyone feel safer?) Is there also an interrogation play set to go along with this? My First Guantanamo Bay or My First Camp XRay perhaps? Oh sorry, I guess that's Fisher Price, not Playmobil ;-). &lt;br /&gt;&lt;br /&gt;Still, those reviews are not nearly as funny as the most popular review for the children's book &lt;a href="http://www.amazon.com/Story-About-Ping-Marjorie-Flack/dp/0140502416"&gt;The Story About Ping&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-127541835987833973?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/127541835987833973/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2009/01/playmobil-security-check-point.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/127541835987833973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/127541835987833973'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2009/01/playmobil-security-check-point.html' title='Playmobil Security Check Point'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-8447185489550604730</id><published>2009-01-12T15:34:00.004-07:00</published><updated>2009-01-15T14:00:16.713-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='email entourage apple mail'/><title type='text'>Microsoft Entourage Mangles URLs</title><content type='html'>Last week we switched the mail server from Zimbra to Exchange (blech!) so I started using Entourage as my mail client (blech!). I'm not a fan of Microsoft software but I've used Entourage before and the experience was good enough - connectivity to the contat list and calendars, etc. &lt;br /&gt;&lt;br /&gt;Everything started off OK until I realized that the URLs in the support messages I receive from the support system were mangled. WTF?! Could this really be? Here's an example of what I'm seeing. First, check out the URL below which came from a message received using Entourage: &lt;br /&gt;&lt;br /&gt;http://www.company.com/sugarcrm/index.php?action=DetailView=Cases=90e6ce2e-c0d0-8de5-3e9a-491d5af0a8d6&lt;br /&gt;&lt;br /&gt;Now check out the URL from the same message in the OWA web ui: &lt;br /&gt;&lt;br /&gt;http://www.covalent.net/sugarcrm/index.php?action=DetailView&amp;module=Cases&amp;record=90e6ce2e-c0d0-8de5-3e9a-491d5af0a8d6&lt;br /&gt;&lt;br /&gt;Notice that the first URL is missing all of the '&lt;tt&gt;&amp;amp;&amp;lt;parameter&amp;gt;&lt;/tt&gt;' fields in the URL. The only difference with that message is that it was received from Entourage. Totally awesome! &lt;br /&gt;&lt;br /&gt;Note that Apple Mail can connect to Exchange servers and it does not mangle URLs - woot!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-8447185489550604730?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/8447185489550604730/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2009/01/microsoft-entourage-mangles-urls.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/8447185489550604730'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/8447185489550604730'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2009/01/microsoft-entourage-mangles-urls.html' title='Microsoft Entourage Mangles URLs'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-9188474711356566480</id><published>2008-12-11T17:28:00.004-07:00</published><updated>2008-12-11T17:48:31.191-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javapolis javoxx devoxx'/><title type='text'>Apache ActiveMQ and ServiceMix at Devoxx</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://devoxx.com/download/attachments/131075/devoxx250.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 250px; height: 228px;" src="http://devoxx.com/download/attachments/131075/devoxx250.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This week I delivered a three hour University talk at the &lt;a href="http://devoxx.com/"&gt;Devoxx&lt;/a&gt; conference in Antwerp, Belgium. Stephan and his crew really do a great job with the conference. This was my third year in a row to speak at Javapolis/Devoxx and I feel pretty lucky to have had the opportunity to speak there. &lt;br /&gt;&lt;br /&gt;The crowd this year was over 3000, but I'm not sure of the exact number as I heard both 3200 and 3600. The speaker's dinner was on Tuesday night and I heard that there were 150 speakers! Geez, that's the lot! I had a great time seeing old friends and meeting lots of new people as well. &lt;br /&gt;&lt;br /&gt;If it seems like I'm rambling in this post, it's because I am. I'm writing this from the Memphis airport and I'm incredibly jet-lagged right now. My body clock is going in nine directions right now and I feel a headache coming on. One more flight and I'm home - phew! This was the last scheduled conference for a while. I'm pretty burned out from all the travel lately. This makes the sixth conference I've done since late September and three of those were in the EU. I'm just ready to be home with my family for a while.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-9188474711356566480?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/9188474711356566480/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2008/12/apache-activemq-and-servicemix-at.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/9188474711356566480'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/9188474711356566480'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2008/12/apache-activemq-and-servicemix-at.html' title='Apache ActiveMQ and ServiceMix at Devoxx'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-5771422584847231373</id><published>2008-12-07T15:22:00.000-07:00</published><updated>2008-12-11T17:49:48.469-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='springone activemq'/><title type='text'>Apache ActiveMQ at SpringOne</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://static.springframework.org/images/i21-spring-one-logo.gif"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 197px; height: 52px;" src="http://static.springframework.org/images/i21-spring-one-logo.gif" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Last week I spoke about ActiveMQ at the SpringOne Americas conference in Hollywood, Florida. This was my first time at SpringOne but it was good since it's organized by fellow Coloradan Jay Zimmerman of &lt;a href="http://nofluffjuststuff.com/"&gt;NFJS&lt;/a&gt; fame. Tons of great people, lots of great sessions and I finally got to meet lots of folks from SpringSource. &lt;br /&gt;&lt;br /&gt;The hotel was right on the beach so I was fortunate enough to be able to stroll on the beach a couple times. Unfortunately not enough time to go for a swim or rent a wave runner though. The weather was pretty nice while we were there. Compared to the cold spell that blew into Colorado as I was leaving on Wednesday, 70 degrees Fahrenheit was pretty nice. &lt;br /&gt;&lt;br /&gt;After the conference Arjen Poutsma and I flew to Amsterdam where I took a train to Antwerp for the Devoxx conference. No sleep on the plane means that I'm gonna be upside down all week - ugh.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-5771422584847231373?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/5771422584847231373/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2008/12/apache-activemq-at-springone.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/5771422584847231373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/5771422584847231373'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2008/12/apache-activemq-at-springone.html' title='Apache ActiveMQ at SpringOne'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-1714574763890440447</id><published>2008-11-21T01:25:00.005-07:00</published><updated>2008-11-21T02:02:52.581-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java software conference'/><title type='text'>Apache ActiveMQ and ServiceMix at Øredev Conference</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_pSHP7VYSIjE/SSZw6u7IfMI/AAAAAAAAAN0/mEQ3hbjJtpg/s1600-h/oredev_logo.gif"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 108px;" src="http://3.bp.blogspot.com/_pSHP7VYSIjE/SSZw6u7IfMI/AAAAAAAAAN0/mEQ3hbjJtpg/s320/oredev_logo.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5271024568214518978" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This week I am at the &lt;a href="http://www.oredev.org/"&gt;Øredev Conference&lt;/a&gt; in Malm&amp;#246;, Sweden speaking about &lt;a href="http://activemq.apache.org/"&gt;ActiveMQ&lt;/a&gt; and &lt;a href="http://servicemix.apache.org/"&gt;ServiceMix&lt;/a&gt;. The weather here has been quite cold, rainy and windy, but the conference has been great. I've met lots of great people here, many of whom are very passionate about the &lt;a href="http://en.wikipedia.org/wiki/Scrum_(development)"&gt;Scrum&lt;/a&gt; development process. Unfortunately I haven't slept much since I've been here (sometimes that happens when I travel internationally) but I have gotten a lot of work completed. &lt;br /&gt;&lt;br /&gt;One unique feature of this conference is the keynote talk each morning to start off the day and each one has been very good in topic and delivered by some very entertaining speakers including &lt;a href="http://www.oredev.org/topmenu/program/keynotespeakers/tedneward.4.3efb083311ac562f9fe80003913.html"&gt;Ted Neward&lt;/a&gt;, &lt;a href="http://www.oredev.org/topmenu/program/keynotespeakers/jamesbach.4.3efb083311ac562f9fe80002868.html"&gt;James Bach&lt;/a&gt; and &lt;a href="http://www.oredev.org/topmenu/program/keynotespeakers/robertcmartin.4.3efb083311ac562f9fe80004129.html"&gt;Robert C. Martin&lt;/a&gt;. Another unique offering here has been a track dedicated to development processes, and, as I mentioned, very slanted toward Scrum. I wish I saw this level of passion for the development process at more companies where I've consulted! I've also noticed that every talk has been captured on video (using Macs ;-) ), so I wonder if it will be offered up on the website - hmmmm - I need to ask Michael Tiberg about that. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Some Choice Quotes&lt;/b&gt;&lt;br /&gt;Wednesday morning that Ted was speaking, he asked if anyone in the crowd writes perfect concurrent code. As one guy in the nearly 1000 person crowed raised his hand, Ted pointed in his direction and said, 'Aaaahhh, I think we need some mental health professionals over there.' &lt;br /&gt;&lt;br /&gt;&lt;!-- Yesterday when James Bach was speaking he said, '.' --&gt;&lt;br /&gt;&lt;br /&gt;Today, Bob Martin asked, 'How many people have looked at code and thought, oh I must fix this code, but then you decide not to do it? Because if you fix the code you might break it and if you break it, you own it - ha, ha.'&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-1714574763890440447?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/1714574763890440447/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2008/11/apache-activemq-and-servicemix-at-redev.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/1714574763890440447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/1714574763890440447'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2008/11/apache-activemq-and-servicemix-at-redev.html' title='Apache ActiveMQ and ServiceMix at Øredev Conference'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_pSHP7VYSIjE/SSZw6u7IfMI/AAAAAAAAAN0/mEQ3hbjJtpg/s72-c/oredev_logo.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-4843457101447042241</id><published>2008-11-10T13:55:00.007-07:00</published><updated>2008-11-10T14:15:34.873-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sonatype'/><title type='text'>New CEO Joins Sonatype</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://sonatype.com/"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 357px; height: 53px;" src="http://sonatype.com/rw_common/images/sonatype_banner3_optima.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Recently Sonatype hired a new CEO to take the helm. &lt;a href="http://www.linkedin.com/in/markdevisser"&gt;Mark de Visser&lt;/a&gt; has a lot of experience working with open source companies as he has held key positions at &lt;a href="http://zend.com/"&gt;Zend&lt;/a&gt;, &lt;a href="http://agitar.com/"&gt;Agitar&lt;/a&gt; and &lt;a href="http://redhat.com/"&gt;Red Hat&lt;/a&gt;. As &lt;a href="http://news.cnet.com/8301-13505_3-10058696-16.html"&gt;noted previously by Matt Asay&lt;/a&gt;, Mark joined the team in early October, but it's only recently become fairly recognized. &lt;br /&gt;&lt;br /&gt;I had the pleasure of spending some time with Mark back in October and I was impressed with Mark's analytical sense even the first time I met him. I think he's a good fit for the Sonatype crew. He's got a lot of knowledge of the open source world how to do the right kind of marketing in it. This is very important for any startup who is focused on building quality commercial products around open source and Mark's experience in this area is immediately useful. &lt;br /&gt;&lt;br /&gt;Sonatype has done a great job with its &lt;a href="http://sonatype.com/products/index.html"&gt;products&lt;/a&gt; so far and they're getting great adoption. Now Mark can help them really get the right marketing message out there and spread further awareness of the company and all that it offers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-4843457101447042241?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/4843457101447042241/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2008/11/new-ceo-joins-sonatype.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/4843457101447042241'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/4843457101447042241'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2008/11/new-ceo-joins-sonatype.html' title='New CEO Joins Sonatype'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-3740497825765609580</id><published>2008-11-10T10:05:00.009-07:00</published><updated>2012-01-04T08:12:00.983-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iphone'/><title type='text'>Purchased Songs Disappear From iPhone</title><content type='html'>Just recently I finally broke down and got an iPhone. My old Sony Ericcson T610 was konking out so it was time to buy a new phone anyway. So far I've been very happy with it, even the service from at&amp;t has not been too bad. Being that my old phone was nearly eight years old, having a phone with newer, more easily accessible features is a nice change. &lt;br /&gt;&lt;br /&gt;A couple weeks ago I purchased the new album from &lt;a href="http://www.cardinology.com/"&gt;Ryan Adams and the Cardinals&lt;/a&gt; from iTunes on my iPhone. After listening to it for a week or so I sync'd my iPhone with my MacBook Pro only to realize that the entire album disappeared from both the iPhone and iTunes. Upon trying to download it again on my iPhone, I received an error stating that I had already downloaded it, am I sure I want to purchase it again? So I started Googling the problem and much to my amazement this seems to be a fairly widespread issue with the iPhone. I found many folks in the same predicament with no solution whatsoever. The only option is file an issue with Apple about it by selecting the purchase in my iTunes account and clicking a button named Report a Problem. &lt;br /&gt;&lt;br /&gt;So far I have received nothing from Apple about the problem I reported and, sadly, I don't expect anything. My solution was to purchase the album a second time and make sure it was backed up by iTunes so I won't lose it again (hopefully). &lt;br /&gt;&lt;br /&gt;Has anyone else experienced this and had the situation remedied by Apple in some way?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-3740497825765609580?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/3740497825765609580/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2008/11/purchased-songs-disappear-from-iphone.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/3740497825765609580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/3740497825765609580'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2008/11/purchased-songs-disappear-from-iphone.html' title='Purchased Songs Disappear From iPhone'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-4466814586897214315</id><published>2008-11-08T10:11:00.005-07:00</published><updated>2008-11-13T01:10:31.716-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='apachecon activemq camel servicemix'/><title type='text'>ActiveMQ, Camel and ServiceMix at ApacheCon US 2008</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://us.apachecon.com/"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 125px; height: 125px;" src="http://us.apachecon.com/page_attachments/0000/0003/Basic_125x125.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I just returned late last night from New Orleans after speaking at the ApacheCon US 2008 conference. I had a great time seeing old friends, attending the conference and exploring the &lt;a href="http://en.wikipedia.org/wiki/French_Quarter"&gt;French Quarter&lt;/a&gt; with Guillaume, John, Shawna and Jack. Lot&amp;apos;s of history throughout the area and the people of New Orleans were very pleasant. I&amp;apos;ve been to many cities where folks are very nonplussed by your presence, but that&amp;apos;s not the case in New Orleans. Everyone was very friendly, forthcoming with information and helpful. &lt;br /&gt;&lt;br /&gt;I was at ApacheCon to speak about &lt;a href="http://servicemix.apache.org/"&gt;Apache ServiceMix&lt;/a&gt;. Then last weekend I was contacted by my friend Aaron Mulder who informed me that his whole family was ill and he wasn&amp;apost going to make it to the conference so he wondered if I could deliver his talk about &lt;a href="http://activemq.apache.org/"&gt;Apache ActiveMQ&lt;/a&gt; at the conference. So I spent some time putting together the slides and prepared for this talk. &lt;br /&gt;&lt;br /&gt;I was scheduled to deliver the two talks on Friday afternoon and I was prepared. Then only 20 minutes before I was to begin speaking, I got a call from my good friend Chris Custine. He was calling me to let me know that he was in the hospital in New Orleans with a herniated disk in his back (ouch!) and wondered if I could cover his talk as well. So I agreed to cover Chris&amp;apos; talk as well, but with a different topic - &lt;a href="http://activemq.apache.org/camel/"&gt;Apache Camel&lt;/a&gt;. Just before Chris&amp;apos; time slot, I explained to the attendees the situation and they were all gracious enough to let me speak about Camel. &lt;br /&gt;&lt;br /&gt;In the end, everything went well. I just hope Chris will be OK. I even finally got to meet Joe and Roger from &lt;a href="http://ttmsolutions.com/"&gt;TTM Solutions&lt;/a&gt;. I only wish we&amp;apos;d met earlier in the week so we could have spent some more time together.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update:&lt;/b&gt;&lt;br /&gt;All three sets of slides have been posted to &lt;a href="http://www.slideshare.net/bruce.snyder"&gt;my SlideShare space&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-4466814586897214315?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/4466814586897214315/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2008/11/activemq-camel-and-servicemix-at.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/4466814586897214315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/4466814586897214315'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2008/11/activemq-camel-and-servicemix-at.html' title='ActiveMQ, Camel and ServiceMix at ApacheCon US 2008'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-5599851901809690906</id><published>2008-10-31T13:53:00.003-06:00</published><updated>2008-10-31T14:22:22.126-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java apache camel'/><title type='text'>New Release of Apache Camel Now Available</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://activemq.apache.org/camel/banner.data/apache-camel-6.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 232px; height: 108px;" src="http://activemq.apache.org/camel/banner.data/apache-camel-6.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The newest release of Apache Camel is now available for download! Grab the binary release as a &lt;a href="http://repo1.maven.org/maven2/org/apache/camel/apache-camel/1.5.0/apache-camel-1.5.0.tar.gz"&gt;tarball&lt;/a&gt; or a &lt;a href="http://repo1.maven.org/maven2/org/apache/camel/apache-camel/1.5.0/apache-camel-1.5.0.zip"&gt;zip&lt;/a&gt; now. It includes &lt;a href="http://activemq.apache.org/camel/camel-150-release.html"&gt;a big list of improvements and new features&lt;/a&gt; driven from the Camel community. This is a great testament to the continuing widespread adoption of Camel. &lt;br /&gt;&lt;br /&gt;Just a few of my favorite items include: &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://activemq.apache.org/camel/camel-maven-archetypes.html"&gt;Camel's Maven archetypes&lt;/a&gt;&lt;/li&gt; &lt;br /&gt;&lt;li&gt;&lt;a href="http://issues.apache.org/activemq/browse/CAMEL-804"&gt;clarification of the recursive property on the file component&lt;/a&gt;&lt;/li&gt; &lt;br /&gt;&lt;li&gt;The &lt;a href="http://issues.apache.org/activemq/browse/CAMEL-760"&gt;use of exclusive locks for reading a file&lt;/a&gt; to prevent reading a file before it's fully written&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Some new options on the &lt;a href="http://activemq.apache.org/camel/tracer.html"&gt;tracer&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The &lt;a href="http://janstey.blogspot.com/2008/08/eclipse-templates-for-apache-camel.html"&gt;Eclipse Templates for Camel&lt;/a&gt; (nice work Jon)&lt;/li&gt; &lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;There are many, many more items in the &lt;a href="http://activemq.apache.org/camel/camel-150-release.html"&gt;full list of improvements&lt;/a&gt;, take a peek. &lt;br /&gt;&lt;br /&gt;A couple weeks ago I spoke about Camel at the &lt;a href="http://www.softwaresummit.com/"&gt;Colorado Software Summit&lt;/a&gt; and received a lot of wonderful feedback. Folks at the conference really enjoyed the session, so much that three separate people began writing Camel routes after seeing my session and were really enjoying its simplicity.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-5599851901809690906?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/5599851901809690906/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2008/10/new-release-of-apache-camel-now.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/5599851901809690906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/5599851901809690906'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2008/10/new-release-of-apache-camel-now.html' title='New Release of Apache Camel Now Available'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-168657238560885881</id><published>2008-10-28T10:49:00.004-06:00</published><updated>2008-10-28T11:10:56.728-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java maven eclipse nexus hudson'/><title type='text'>Free Maven, m2eclipse, Nexus and Hudson Training Next Week!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_pSHP7VYSIjE/SQdGqt2w0mI/AAAAAAAAANs/bPiBK5EygvI/s1600-h/Maven_logo.gif"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 46px;" src="http://4.bp.blogspot.com/_pSHP7VYSIjE/SQdGqt2w0mI/AAAAAAAAANs/bPiBK5EygvI/s200/Maven_logo.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5262252389283451490" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you want to brush up your skills with &lt;a href="http://maven.apache.org/"&gt;Maven&lt;/a&gt;, &lt;a href="http://m2eclipse.sonatype.org/"&gt;m2eclipse&lt;/a&gt;, &lt;a href="http://nexus.sonatype.org/"&gt;Nexus&lt;/a&gt; and &lt;a href="http://https//hudson.dev.java.net/"&gt;Hudson&lt;/a&gt; then you should get to this free training in New Orleans next week! &lt;br /&gt;&lt;br /&gt;&lt;a href="http://blogs.sonatype.com/people/brian"&gt;Brian Fox&lt;/a&gt;, &lt;a href="http://blogs.sonatype.com/people/jvanzyl/"&gt;Jason van Zyl&lt;/a&gt; and I will be in New Orleans for &lt;a href="http://us.apachecon.com/c/acus2008/"&gt;ApacheCon US 2008&lt;/a&gt; next week and are offering a free one-day training in order to gather feedback on the course material. The course is intended for folks already familiar with Maven and will focus on using Maven proficiently with your team, working with Maven in Eclipse via m2eclipse, managing your artifacts with Nexus and automating your build and testing it with Hudson. &lt;br /&gt;&lt;br /&gt;The training will be held at the &lt;a href="http://www.marriott.com/hotels/travel/msyla-new-orleans-marriott/"&gt;Marriot&lt;/a&gt; on Tuesday November 4th from 9am to 4pm. To sign up for the course, please email us at &lt;b&gt;training at sonatype dot com&lt;/b&gt;. Availability is on a first come, first served basis so we suggest you sign up quickly. &lt;br /&gt;&lt;br /&gt;Everyone is welcome and make sure to bring your laptop!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-168657238560885881?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/168657238560885881/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2008/10/free-maven-m2eclipse-nexus-and-hudson.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/168657238560885881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/168657238560885881'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2008/10/free-maven-m2eclipse-nexus-and-hudson.html' title='Free Maven, m2eclipse, Nexus and Hudson Training Next Week!'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_pSHP7VYSIjE/SQdGqt2w0mI/AAAAAAAAANs/bPiBK5EygvI/s72-c/Maven_logo.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-1821203014139819940</id><published>2008-10-19T09:33:00.005-06:00</published><updated>2011-02-15T08:31:50.586-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open source'/><title type='text'>Open Source is Free Software - What's Your Opinion as a User?</title><content type='html'>My friend &lt;a href="http://blogs.webtide.com/gregw/entry/open_source_is_free_software"&gt;Greg Wilkins&lt;/a&gt; recently wrote a thought-provoking post about free software and open source. I encourage you to go read it, but I also encourage you to think about what it means to &lt;b&gt;YOU&lt;/b&gt;. My experience has taught me that it's too easy for those of us who are actually working on open source projects to have a clouded point of view so I'm always very interested in your opinion as a user of open source but not a developer of the open source you use. &lt;br /&gt;&lt;br /&gt;Something I found compelling was an analogy posted in the comments by a reader. The following is the quote: &lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Taking without contributing at all is destructive. My local bank branch is 5 mins walk away. It has free coffee for customers. I am a customer. What happens if I no longer buy coffee at home but get all my coffee from the bank? What if I go a step further and sell the bank's coffee in my coffee shop? Most likely, this will mean no more free coffee in the bank, for anyone. By your logic I didn't do anything wrong. BUT I HAVE PRODUCED A BAD OUTCOME "Everything free" might be a noble aim but how can it work in practice? You fail to consider the practical implications of "take with no give."&lt;br /&gt;&lt;/blockquote&gt; &lt;br /&gt;&lt;br /&gt;While this analogy seems good, it kinda misses the mark slightly. The bank's business model is based on the financial services it provides. The coffee is just a small perk to keep you happy while you are there using the bank's financial services. So the analogy doesn't isn't 100% stable, though I still see the author's point. If you are a consumer of open source and you contribute back in absolutely no way, then the community is said to be at risk. Remember, contributing is as easy as participating in mailing list discussions and filing bugs. That's exactly how I tend to get started with any open source project because the bar for participation is usually pretty low. &lt;br /&gt;&lt;br /&gt;Anyway, it's an interesting topic for sure as I've had many of these types of discussions over the years at software conferences, on consulting gigs and even inside the companies where I have worked. What's interesting is very wide range of the points in such a discussion. But I digress...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-1821203014139819940?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/1821203014139819940/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2008/10/open-source-is-free-software-whats-your.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/1821203014139819940'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/1821203014139819940'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2008/10/open-source-is-free-software-whats-your.html' title='Open Source is Free Software - What&apos;s Your Opinion as a User?'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-2208906463858181945</id><published>2008-10-17T14:28:00.005-06:00</published><updated>2008-10-17T14:53:17.055-06:00</updated><title type='text'>seq Unix Utility for MacOS X</title><content type='html'>Today I needed the &lt;a href="http://www.ss64.com/bash/seq.html"&gt;seq&lt;/a&gt; Unix utility and I discovered that MacOS X does not have it. Neither does &lt;a href="http://www.macports.org/"&gt;MacPorts&lt;/a&gt; :-(. So I Googled for it and found that scripting god Dave Taylor (who lives in Boulder) has a &lt;a href="http://www.askdavetaylor.com/step_through_count_numeric_values_bash_shell_script.html"&gt;blog post about this&lt;/a&gt;. He provides a shell script that produces basic seq functionality and it works great. Now I'm able to write quick little one-liners like this: &lt;br /&gt;&lt;br /&gt;&lt;tt&gt;for i in $(seq 1 10); do cp ~/tmp/cheese.xml ~/tmp/cheese$i.xml; done&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;Thanks, Dave!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-2208906463858181945?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/2208906463858181945/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2008/10/seq-unix-utility-for-macos-x.html#comment-form' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/2208906463858181945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/2208906463858181945'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2008/10/seq-unix-utility-for-macos-x.html' title='seq Unix Utility for MacOS X'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-4459231747480306675</id><published>2008-10-10T09:58:00.003-06:00</published><updated>2008-10-10T10:03:31.348-06:00</updated><title type='text'>Me Meme</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_pSHP7VYSIjE/SO98PBcWbKI/AAAAAAAAANk/xUHFsSr87i4/s1600-h/Photo+24.jpg"&gt;&lt;img style="float:center; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_pSHP7VYSIjE/SO98PBcWbKI/AAAAAAAAANk/xUHFsSr87i4/s200/Photo+24.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5255555887691885730" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Idea from &lt;a href="http://blog.discursive.com/2008/10/me-meme.html"&gt;Tim&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Take a picture of yourself right now.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Don’t change your clothes, don’t fix your hair…just take a picture. (should be super-easy with Photobooth)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Post that picture with NO editing.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Post these instructions with your picture&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-4459231747480306675?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/4459231747480306675/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2008/10/me-meme.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/4459231747480306675'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/4459231747480306675'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2008/10/me-meme.html' title='Me Meme'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_pSHP7VYSIjE/SO98PBcWbKI/AAAAAAAAANk/xUHFsSr87i4/s72-c/Photo+24.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-3879172366673992784</id><published>2008-10-07T08:29:00.005-06:00</published><updated>2008-10-07T08:59:53.245-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java maven eclipse nexus'/><title type='text'>Maven: The Definitive Guide Now Available For Use With Post-Its!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.3m.com/us/images/postit/direct/postit_logo_lg.gif"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 100px;" src="http://www.3m.com/us/images/postit/direct/postit_logo_lg.gif" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;OK, OK, hands up, who likes to litter their technical books with &lt;a href="http://www.3m.com/us/office/postit/products/prod_ft.html?gnID=1"&gt;Post-It flags&lt;/a&gt;? I've consulted to many companies over the years and every time I'm at a company I can immediately tell where the developer area is located based on the number of Post-Its hanging out of the books. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://ecx.images-amazon.com/images/I/51oZrk0Ls6L._SL500_AA240_.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px;" src="http://ecx.images-amazon.com/images/I/51oZrk0Ls6L._SL500_AA240_.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you've ever had questions about using Maven, &lt;a href="http://www.theserverside.com/tt/articles/article.tss?l=Introductiontom2eclipse"&gt;integrating Maven with Eclipse&lt;/a&gt; or using a &lt;a href="http://bsnyderblog.blogspot.com/2008/08/do-you-use-maven-if-so-you-need-nexus.html"&gt;repository manager&lt;/a&gt;, then you should grab a copy of &lt;a href="http://www.amazon.com/Maven-Definitive-Guide-Sonatype-Company/dp/0596517335/ref=pd_bbs_sr_1?ie=UTF8&amp;s=books&amp;qid=1223303639&amp;sr=8-1"&gt;Maven: The Definitive Guide&lt;/a&gt; from Amazon so you can litter it with those Post-It flags, notes, highlights, etc. &lt;br /&gt;&lt;br /&gt;A *lot* of work went into this book and it shows. It was written by many of the folks who created Maven and made it what it is today. So it's full of insider information and examples. &lt;br /&gt;&lt;br /&gt;Before blindly purchasing a copy however, I recommend taking a look at the &lt;a href="http://www.sonatype.com/community/definitive_guide.html"&gt;freely available version&lt;/a&gt; on the Sonatype website. Although I've suggested the digital version to many, many folks over the last few months, I've heard a fair amount say that they still like to have an actual book. For those that want the actual book to hold, here's your chance! &lt;br /&gt;&lt;br /&gt;BTW, check out that link above to the Post-Its. Who knew there were so damn many Post-It products today!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-3879172366673992784?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/3879172366673992784/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2008/10/maven-definitive-guide-now-available.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/3879172366673992784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/3879172366673992784'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2008/10/maven-definitive-guide-now-available.html' title='Maven: The Definitive Guide Now Available For Use With Post-Its!'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-4564213837489471567</id><published>2008-10-03T18:50:00.002-06:00</published><updated>2008-10-03T18:53:26.124-06:00</updated><title type='text'>Register to Vote NOW!!!</title><content type='html'>&lt;center&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/0vtHwWReGU0&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/0vtHwWReGU0&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.maps.google.com/vote"&gt;REGISTER TO VOTE NOW!!!&lt;/a&gt;&lt;br /&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-4564213837489471567?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/4564213837489471567/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2008/10/register-to-vote-now.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/4564213837489471567'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/4564213837489471567'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2008/10/register-to-vote-now.html' title='Register to Vote NOW!!!'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-8526615703487033674</id><published>2008-10-03T14:54:00.005-06:00</published><updated>2008-10-03T15:11:58.115-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java conference'/><title type='text'>Colorado Software Summit Approaching</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://coloradosoftwaresummit.com/graphics/whitelogo.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; background-color: #333366" src="http://coloradosoftwaresummit.com/graphics/whitelogo.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It looks like the &lt;a href="http://www.softwaresummit.com/2008/spkrsched.htm"&gt;session schedule&lt;/a&gt; for the &lt;a href="http://softwaresummit.com/"&gt;Colorado Software Summit&lt;/a&gt; has been made available just yesterday. This is the time where all the speakers figure out where they're speaking slots fall throughout the week. &lt;br /&gt;&lt;br /&gt;For those that have never attended, the Software Summit is a yearly software conference in the Rocky Mountains of Colorado in late October. &lt;!-- &lt;br /&gt;One unique aspect of the Software Summit is that speakers must deliver two talks each three times throughout the week for a total of six speaking slots. Ouch! This will be my fourth year speaking there and to date, I've never seen another conference organized in this manner. The idea is that the organizers want to give all attendees the chance to see every talk and, by offering each talk more times, attendees chances of seeing every talk is increased considerably (I'm not sure if I agree with the strategy or not). &lt;br /&gt;--&gt;Last year on my drive up, it was a blizzard of snow once I got through the west side of the &lt;a href="http://en.wikipedia.org/wiki/Eisenhower_Tunnel"&gt;Eisenhower Tunnel&lt;/a&gt;. Of course, the next day all the snow had melted and the weather was beautiful again. That's one reason why I love Colorado :-). &lt;br /&gt;&lt;br /&gt;This year I'm speaking about &lt;a href="http://www.softwaresummit.com/2008/speakers/snyder.htm"&gt;Service Oriented Integration With Apache ServiceMix&lt;/a&gt; and &lt;a href="http://www.softwaresummit.com/2008/speakers/snyder.htm"&gt;Taking Apache Camel for a Ride&lt;/a&gt;. Both talks are about integration with Apache projects. &lt;br /&gt;&lt;br /&gt;This year &lt;a href="http://raibledesigns.com/"&gt;Raible&lt;/a&gt; and I are sharing a condo with &lt;a href="http://blogs.sonatype.com/jvanzyl/"&gt;Jason&lt;/a&gt;. The dude abides.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-8526615703487033674?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/8526615703487033674/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2008/10/colorado-software-summit-approaching.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/8526615703487033674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/8526615703487033674'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2008/10/colorado-software-summit-approaching.html' title='Colorado Software Summit Approaching'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-5251588334977944958</id><published>2008-09-25T11:45:00.005-06:00</published><updated>2008-09-25T11:55:36.538-06:00</updated><title type='text'>Apple Adds NDA to App Store Rejection Notices</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://farm1.static.flickr.com/22/26044351_fa9bf19dc5.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px;" src="http://farm1.static.flickr.com/22/26044351_fa9bf19dc5.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Can you say &lt;a href="http://www.osnews.com/story/20321/Apple_Adds_NDA_to_App_Store_Rejection_Notices"&gt;heavy hand&lt;/a&gt;? &lt;br /&gt;&lt;br /&gt;I'm not claiming to understand the entire situation, but this certainly seems dodgy. &lt;br /&gt;&lt;br /&gt;Thanks to &lt;a href="http://www.bosit.be/blog/?p=50"&gt;Jonathan Bosmans&lt;/a&gt; for pointing this out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-5251588334977944958?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/5251588334977944958/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2008/09/apple-adds-nda-to-app-store-rejection.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/5251588334977944958'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/5251588334977944958'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2008/09/apple-adds-nda-to-app-store-rejection.html' title='Apple Adds NDA to App Store Rejection Notices'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm1.static.flickr.com/22/26044351_fa9bf19dc5_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-1272095998253520137</id><published>2008-09-24T12:19:00.006-06:00</published><updated>2008-09-25T11:45:11.334-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iphone g1'/><title type='text'>gPhone or iPhone?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://cache.gizmodo.com/assets/images/gizmodo/2008/09/androidevent83.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px;" src="http://cache.gizmodo.com/assets/images/gizmodo/2008/09/androidevent83.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://d4rkn3ss.files.wordpress.com/2008/04/3g-iphone.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px;" src="http://d4rkn3ss.files.wordpress.com/2008/04/3g-iphone.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It's time for me to finally replace my trusty Sony Ericsson t610 and these are the two options I'm considering.&lt;br /&gt;&lt;br /&gt;I've put off getting an iPhone because I was waiting for the 3G but even now that it's out my fears of switching to at&amp;t still stand. I've heard from friends how awful at&amp;t is in so many ways so I'm reluctant to switch. And then, along comes the &lt;a href="http://www.t-mobileg1.com/"&gt;G1 from T-Mobile&lt;/a&gt; - my wireless carrier! &lt;br /&gt;&lt;br /&gt;I see that &lt;a href="http://crazybob.org/2008/09/taken-with-my-gphone.html"&gt;Crazy Bob has a gPhone&lt;/a&gt; already. The quality of the photos from the camera looks great, but the camera is not a major concern for me. &lt;br /&gt;&lt;br /&gt;I'm curious to hear any opinions one way or the other.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update:&lt;/b&gt; Is it just me, or are these statements about Google products not competing with Apple products a bit ridiculous? How else are these products to be viewed?&lt;br /&gt;&lt;br /&gt;Just as with Google's Chrome browser, the G1 phone press releases state that it's not being positioned to compete with Apple products. I find this statement ludicrous. How can these items not compete with Apple products? This is like saying I have created a new car that gets 100mpg but the car is not competing with GM or Ford. Perception is reality. Just as I'm looking for a new phone, many people are looking for a new car and most logical people will compare and contrast some vehicles just as I'm comparing and contrasting the iPhone with the G1.&lt;br /&gt;&lt;br /&gt;To date, the iPhone is one of the few mobile devices that touts Google services. Also, offering the Amazon music store app is in direct competition with Apple's iTunes integration for the iPhone. Additionally, the Android Market is a direct point of competition with Apple's App Store. &lt;br /&gt;&lt;br /&gt;Wayne has pointed out a good &lt;a href="http://www.appleinsider.com/articles/08/09/25/breakdown_android_g1_iphone_share_little_in_common.html"&gt;comparison of the G1 with the iPhone&lt;/a&gt; if you're interested. I've read much about the G1 lately and I must say that the iPhone still has many small advantages over it, though I'm sure in time the playing field will be leveled further. After all, this is the first generation for the very first Android-based mobile phone.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update 2:&lt;/b&gt; As much as I am a fan of Apple products and have been since 1990, the evictions of competing applications from the App Store is disconcerting to say the least. When I first heard that Apple was actively going after enterprise customers, I began to wonder if this the beginning of the end for the Apple we know and love. Going so far as to tell owners of rejected apps that the &lt;a href="http://www.osnews.com/story/20321/Apple_Adds_NDA_to_App_Store_Rejection_Notices"&gt;rejection itself is under NDA&lt;/a&gt; is definitely stepping over the line. Leave it to the corporate lawyers to fuck up everything. I've gotta say that this has left a very bad taste in my mouth.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-1272095998253520137?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/1272095998253520137/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2008/09/gphone-or-iphone.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/1272095998253520137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/1272095998253520137'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2008/09/gphone-or-iphone.html' title='gPhone or iPhone?'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-2899480088938941743</id><published>2008-09-20T15:13:00.003-06:00</published><updated>2008-09-23T15:52:29.571-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mobile voicemail'/><title type='text'>Comparing Mobile Voicemail Solutions</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://cache.lifehacker.com/assets/resources/2006/06/voicemail.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 120px;" src="http://cache.lifehacker.com/assets/resources/2006/06/voicemail.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;After using &lt;a href="http://www.callwave.com/"&gt;CallWave&lt;/a&gt; for about a year, the free beta test of its service is ending, so I'm reviewing other competing services. &lt;br /&gt;&lt;br /&gt;CallWave handles mobile voicemail so that instead of leaving a message on my mobile carrier's provided voicemail, callers unknowingly are leaving their message with CallWave instead. I simply keyed in a simple code to tell my mobile carrier to use CallWave's voicemail instead. I started using this solution because I was missing too many calls from being out of range of mobile service. Not only does CallWave notify me via email and SMS when I get a voicemail, but it also handles voice-to-text (although not very well) and lets me listen to the message online via the CallWave website. To upgrade to a non-beta account is $5/month which isn't much but I'm also already paying $10/month for CallWave's fax to PDF service. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.grandcentral.com/"&gt;Grand Central&lt;/a&gt; offers a similar set of features and it's free but it makes you get a new phone number. I've had this same phone number for eight years and too many folks know it. I'm not getting a new phone number just for unified messaging. Grand Central should be able to use my existing phone number. Can anyone confirm that this is not a requirement? &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.spinvox.com/"&gt;Spinvox&lt;/a&gt; seems to be one alternative, but it seems to be focused on the voice-to-text conversion but I'm not so keen on that feature really. What I need is mainly voicemail notification. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.voicenation.com/"&gt;Voicenation&lt;/a&gt; requires you to get a new number (or so it seems) and is much more about providing a PBX service. Again, not something I need. &lt;br /&gt;&lt;br /&gt;Just recently I signed up with &lt;a href="http://www.youmail.com/"&gt;YouMail&lt;/a&gt; because it seems to focus on exactly what I need and it's basic service is free (and they claim it will remain free). I just keyed in a special code to tell my mobile carrier to use YouMail's voicemail instead of the carrier's provided voicemail and voila. I'm just starting to get used to it but it seems to provide what I need so far. YouMail offers &lt;a href="http://www.youmail.com/login/channel/channelView.do?id=1122"&gt;pre-recorded messages&lt;/a&gt; that you can buy to use for your various greetings are funny. My favorite is titled, 'No one wants to buy your shit (for solicitors).'&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-2899480088938941743?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/2899480088938941743/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2008/09/comparing-mobile-voicemail-solutions.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/2899480088938941743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/2899480088938941743'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2008/09/comparing-mobile-voicemail-solutions.html' title='Comparing Mobile Voicemail Solutions'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-1226119570764406047</id><published>2008-09-18T06:16:00.005-06:00</published><updated>2008-09-18T06:33:47.326-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java javazone camels llamas'/><title type='text'>Camels and Llamas at JavaZone in Norway</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.worldrider.com/blog/photos/llama_car.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px;" src="http://www.worldrider.com/blog/photos/llama_car.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Yesterday I spoke about &lt;a href="http://activemq.apache.org/camel/"&gt;Apache Camel&lt;/a&gt; at the &lt;a href="http://javazone.no/"&gt;JavaZone conference&lt;/a&gt; here in Oslo, Norway and I was able to sneek some more funny images into my presentation. As Dan Diephouse, Jason van Zyl, Kirk Pepperdine, Geert Bevin, John Davies and I were working on our slides for our talks, we got some good laughs from the images we found including the llama car shown here. We all especially liked the bungy cord holding all five llamas onto the roof. &lt;br /&gt;&lt;br /&gt;We also found &lt;a href="http://www.darlingtonfamily.co.uk/images/Camel%20truck.jpg"&gt;a camel in a truck&lt;/a&gt;, &lt;a href="http://lh6.ggpht.com/_8PKhSBzQXbs/SA3933Z1QgI/AAAAAAAABoo/F599nGnKUAc/P1010269.JPG"&gt;three camels in a truck&lt;/a&gt; among many more images that I really shouldn't show here. &lt;br /&gt;&lt;br /&gt;I was in Denmark a couple years ago speaking at another conference and I'm finding the weather here in Norway is very similar to Denmark (big surprise). I wish I wasn't flying out so soon so that I had time to go sight-seeing and do some exploration.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-1226119570764406047?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/1226119570764406047/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2008/09/camels-and-llamas-at-javazone-in-norway.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/1226119570764406047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/1226119570764406047'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2008/09/camels-and-llamas-at-javazone-in-norway.html' title='Camels and Llamas at JavaZone in Norway'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-3623038461690113453</id><published>2008-09-11T08:49:00.005-06:00</published><updated>2008-09-11T09:11:31.791-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javapolis javoxx devoxx'/><title type='text'>JavaPolis &gt;&gt; Javoxx &gt;&gt; Devoxx</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.devoxx.com/s/1116/1/JV08/_/download/userResources/JV08/logo"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px;" src="http://www.devoxx.com/s/1116/1/JV08/_/download/userResources/JV08/logo" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In yet another bitter twist of irony from the machine that is Sun, it has bitten the hand that feeds yet again by forcing BeJUG to rebrand its wildly successful European Java conference for the second time! &lt;br /&gt;&lt;br /&gt;First Sun said JavaPolis had to change its name so it rebranded itself as Javoxx. Now Sun has decided that Javoxx must change its name so it has been rebranded Devoxx. What's truly ironic about this whole episode is that Sun is a platinum sponsor of the conference! Demonstrating yet again that Sun is an interloper. &lt;br /&gt;&lt;br /&gt;I'm very happy to see the conference continue and not let this trip up anything. Stephan and his group have definitely taken these hits with class. Rock on BeJUG!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-3623038461690113453?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/3623038461690113453/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2008/09/javapolis-javoxx-devoxx.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/3623038461690113453'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/3623038461690113453'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2008/09/javapolis-javoxx-devoxx.html' title='JavaPolis &gt;&gt; Javoxx &gt;&gt; Devoxx'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-1676819611825763407</id><published>2008-09-09T10:41:00.004-06:00</published><updated>2008-09-09T10:49:41.870-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java maven nexus'/><title type='text'>Nexus Not Finding Artifacts After Adding a Repository?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://nexus.sonatype.org/nexus.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px;" src="http://nexus.sonatype.org/nexus.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In my &lt;a href="http://bsnyderblog.blogspot.com/2008/08/do-you-use-maven-if-so-you-need-nexus.html"&gt;last post about Nexus&lt;/a&gt;, I provided some steps to get started quickly using Nexus. After adding some additional repositories, I found that Nexus doesn't always immediately handle the indexes as it should causing some builds to not be able to locate certain artifacts, so I took the following measures to rectify the situation. &lt;br /&gt;&lt;br /&gt;After adding some repositories, sometimes I had to clear the cache for the public groups and reindex them using the following steps: &lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Under the Views section, click on Browse Repositories&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Right-click on the Public Repositories group and select Clear Cache&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Right-click on the Public Repositories group and select Reindex&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Right-click on the Public Snapshot Repositories group and select Clear Cache&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Right-click on the Public Snapshot Repositories group and select Reindex&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;After following the steps above, Nexus happily reindexed the repositories I added and artifacts were located successfully. &lt;br /&gt;&lt;br /&gt;At one point, I also had to manually publish the indexes for the public groups using the following steps: &lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Under the Administration section, click Scheduled Tasks&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Click the Add button&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Give the task a name&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Task Type is Publish Indexes&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Repository/Group is Public Repositories (Group)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Recurrance is Once&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Upon doing this manual step, Nexus again started humming along.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-1676819611825763407?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/1676819611825763407/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2008/09/nexus-not-finding-artifacts-after.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/1676819611825763407'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/1676819611825763407'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2008/09/nexus-not-finding-artifacts-after.html' title='Nexus Not Finding Artifacts After Adding a Repository?'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-562396433286610594</id><published>2008-09-09T08:03:00.004-06:00</published><updated>2008-09-09T08:09:38.673-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='badger cartoon'/><title type='text'>Badger Badger Badger</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_pSHP7VYSIjE/SMaCWQQRcQI/AAAAAAAAALg/76il66X57ZQ/s1600-h/badger.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_pSHP7VYSIjE/SMaCWQQRcQI/AAAAAAAAALg/76il66X57ZQ/s200/badger.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5244022134951473410" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Every once in a great while my youngest daughter requests that we watch &lt;i&gt;'the &lt;a href="http://badgerbadgerbadger.com/"&gt;badger snake cartoon&lt;/a&gt; on your computer'&lt;/i&gt;. I haven't gotten this request in a quite a long time but this morning was one of those times. Although I'm sure most folks have seen it, I just had to blog about it. &lt;br /&gt;&lt;br /&gt;I remember playing this in the Netscape browser from the command line on someone's Linux machine as a prank at a past company. I seem to recall an option to the command that tells the UI not to come up, so the song would drive them nuts and the only way to stop it is to find the process and kill it :-).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-562396433286610594?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/562396433286610594/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2008/09/badger-badger-badger.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/562396433286610594'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/562396433286610594'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2008/09/badger-badger-badger.html' title='Badger Badger Badger'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_pSHP7VYSIjE/SMaCWQQRcQI/AAAAAAAAALg/76il66X57ZQ/s72-c/badger.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-5158984657744252128</id><published>2008-09-05T21:15:00.004-06:00</published><updated>2008-09-05T21:59:42.024-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='skunks'/><title type='text'>Sprayed By a Skunk... Again!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_pSHP7VYSIjE/SMH93GBBu8I/AAAAAAAAALY/0JkgMvV9NVU/s1600-h/skunk.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_pSHP7VYSIjE/SMH93GBBu8I/AAAAAAAAALY/0JkgMvV9NVU/s200/skunk.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5242750564185521090" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In my family, we have two dogs. Each one is three years old, each one is a mutt that we got from a puppy rescue for my kids' birthdays, each one is about 100lbs, but one of them aims to please and is relatively smart while the other one is just a big, dumb teddy bear. &lt;br /&gt;&lt;br /&gt;Over the last year, we moved house and discovered that there are many wild animals around the property. Luckily we have an invisible fence to keep the dogs from leaving the yard. Most of these animals have learned to simply stay away when the dogs are out, but the foxes like to taunt the dogs by staying just out of reach (hence the phrase, crazy like a fox). But one of the animals doesn't stay away, quite possibly due to arrogance - skunks. &lt;br /&gt;&lt;br /&gt;So far, the two dogs have been sprayed by skunks together on two occasions. However, over the last month, the big, dumb teddy bear has been sprayed two more times on his own - what an idiot! I'm hoping that after being sprayed four times he'll learn. Fat chance I figure. &lt;br /&gt;&lt;br /&gt;The first time it happened I googled all over looking for a remedy to clean the stink and found way too many answers and claims. So I contacted my friend &lt;a href="http://www.savoirtech.com/"&gt;Jeff&lt;/a&gt; who has had experience with this issue with his dogs. Jeff lives in the mountains and his dogs had been sprayed by skunks a few times, too, so I figured he had a solution that worked. Luckily he was able to recommend a recipe of baking soda, vinegar and Dawn dish washing liquid. I can tell you to this day it works like a charm - as long as you can stomach the stench for a bit while you're scrubbing!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-5158984657744252128?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/5158984657744252128/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2008/09/sprayed-by-skunk-again.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/5158984657744252128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/5158984657744252128'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2008/09/sprayed-by-skunk-again.html' title='Sprayed By a Skunk... Again!'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_pSHP7VYSIjE/SMH93GBBu8I/AAAAAAAAALY/0JkgMvV9NVU/s72-c/skunk.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-6239619284202068598</id><published>2008-09-05T09:16:00.004-06:00</published><updated>2008-09-05T09:41:10.630-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dude'/><title type='text'>A Decade of the Dude</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i.realone.com/assets/rn/img/8/8/9/4/22664988-22664991-slarge.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 220px;" src="http://i.realone.com/assets/rn/img/8/8/9/4/22664988-22664991-slarge.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;For a movie that bombed at the box office, The Big Lebowski has done astoundingly well on DVD raking in $40 million as well as generating a cult following like no other from its generation. And with a 10th anniversary, limited-edition of the DVD due out this month, fans of the Dude proclaim, 'Far out, man.' &lt;br /&gt;&lt;br /&gt;I can't believe that the Dude turns 10 this year because it sure doesn't seem to have been that long. &lt;a href="http://www.rollingstone.com/news/story/22694342/the_decade_of_the_dude"&gt;A Decade of the Dude&lt;/a&gt; briefly recounts the Dude's escapades and the phenomenon that is the Dude in a manner that serves all the actors in the movie well. An interview with Bridges even caused the Dude's sweater to come out of hiding for a moment. For fans of the Dude, this article is well worth the 10 minute read. &lt;br /&gt;&lt;br /&gt;I remember seeing The Big Lebowski in the theatre with my wife when it first came out and I thought it was hilarious; she thought it was goofy and kind shrugged it off. For my close friends and I, this movie unites us. We see it at the Boulder Theatre twice a year and anytime we talk with one another at least two or three quotes from Lebowski make it into the conversation. &lt;br /&gt;&lt;br /&gt;The Dude represents everything that our uptight society needs today and it couldn't have been said better than Philip Seymour Hoffman, the brilliant actor who played Brandt, the wealthy Lebowski's obsequious personal assistant: &lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;'The Dude abides, and I think that's something people really yearn for, to be able to live their life like that. You can see why young people would enjoy that.'&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Ah, fuck it, Dude. Let's go bowlin.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-6239619284202068598?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/6239619284202068598/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2008/09/decade-of-dude.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/6239619284202068598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/6239619284202068598'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2008/09/decade-of-dude.html' title='A Decade of the Dude'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-374485306838866984</id><published>2008-08-27T11:10:00.003-06:00</published><updated>2008-08-27T14:31:22.250-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java eclipse maven'/><title type='text'>m2eclipse Loves Test Reports</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://docs.codehaus.org/download/attachments/76710077/surefire-hyperlinks.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 400px;" src="http://docs.codehaus.org/download/attachments/76710077/surefire-hyperlinks.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;Just a quick note about developing with m2eclipse and how much easier it makes tasks. When running tests in Eclipse, m2e now creates a link to the surefire report for quick access. See the image above for a screenshot. This is so much better than using cat or less from the command line because it just saves time (and I love the command line!). A single click v. typing many keys to view the report - rockin. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://jira.codehaus.org/browse/MNGECLIPSE-749"&gt;Thanks, Eugene&lt;/a&gt; ;-).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-374485306838866984?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/374485306838866984/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2008/08/m2eclipse-loves-test-reports.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/374485306838866984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/374485306838866984'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2008/08/m2eclipse-loves-test-reports.html' title='m2eclipse Loves Test Reports'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-7931711682239076678</id><published>2008-08-27T08:29:00.006-06:00</published><updated>2008-08-28T09:00:52.445-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java eclipse'/><title type='text'>Live Coding Collaboration With Eclipse - Wow!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.eclipse.org/eclipse.org-common/themes/Phoenix/images/eclipse_home_header.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px;" src="http://www.eclipse.org/eclipse.org-common/themes/Phoenix/images/eclipse_home_header.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You've got to check out &lt;a href="http://www.vimeo.com/1195398"&gt;this video&lt;/a&gt; that demonstrates the a shared coding session using the &lt;a href="http://eclipse.org/ecf/"&gt;Eclipse Communication Framework&lt;/a&gt;. This is amazing! They're editing the same class concurrently and changes are reflected in real time without saving! &lt;br /&gt;&lt;br /&gt;I have often longed for the ability to collaborate with others beyond just commit/update via SVN with folks. In the past I've tried a multiplexing X server in Linux and SubEthaEdit for MacOS X, but neither is ideal. Given that so many people use Eclipse for writing code these days, this is exactly what we need. Now I just need to convince someone to install it and take it for a spin ;-).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-7931711682239076678?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/7931711682239076678/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2008/08/live-coding-collaboration-with-eclipse.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/7931711682239076678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/7931711682239076678'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2008/08/live-coding-collaboration-with-eclipse.html' title='Live Coding Collaboration With Eclipse - Wow!'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-4043131790963635574</id><published>2008-08-26T22:29:00.007-06:00</published><updated>2008-09-09T10:42:00.113-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java maven nexus'/><title type='text'>Do You Use Maven? If So, You Need Nexus</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://nexus.sonatype.org/nexus.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px;" src="http://nexus.sonatype.org/nexus.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you use Maven for your development or you manage a Maven repository inside your company then you need a Maven repository manager and &lt;a href="http://nexus.sonatype.org/"&gt;Nexus&lt;/a&gt; is hands-down the best choice. Today Sonatype &lt;a href="http://www.infoworld.com/article/08/08/26/Java-developers-get-repository-help_1.html"&gt;announced the release of Nexus 1.0&lt;/a&gt;, the easiest to use, enterprise-ready Maven repository manager. &lt;br /&gt;&lt;br /&gt;Nexus serves as a proxy between your organization and public Maven repositories and as an easy-to-use deployment target for your own, possible commerical artifacts. &lt;br /&gt;&lt;br /&gt;Nexus acts as a cache of artifacts between your organization and any public Maven repository. This means that artifacts and their dependencies only need to be downloaded once. I run Nexus locally on my laptop for this purpose and after the first download of artifacts, my builds sped up tremendously. I've done this &lt;a href="http://bsnyderblog.blogspot.com/2007/11/using-proximity-maven-repo-cacheproxy.html"&gt;since it was called Proximity&lt;/a&gt; because it works very well.&lt;br /&gt;&lt;br /&gt;A shared, internal Maven repository inside of a company can be a very efficient way to share snapshots and releases of internal projects. Using Nexus dramatically simplifies this task and saves large amounts of time and effort. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Start Using Nexus in Minutes&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;If you want to speed up your Maven builds, follow these steps: &lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://nexus.sonatype.org/downloads/"&gt;Download Nexus&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Start up Nexus (&lt;tt&gt;$NEXUS_HOME/bin/nexus start&lt;/tt&gt;)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Drop &lt;a href="http://www.sonatype.com/book/reference/repository-manager.html#ex-maven-nexus-snap"&gt;this settings.xml&lt;/a&gt; in your ~/.m2/ directory&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Perform a Maven build&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;You might need to &lt;a href="http://www.sonatype.com/book/reference/repository-manager.html#d0e21053"&gt;add more repositories&lt;/a&gt; to Nexus, but it's a cakewalk! Trust me, Nexus will simplify your use of Maven.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-4043131790963635574?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/4043131790963635574/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2008/08/do-you-use-maven-if-so-you-need-nexus.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/4043131790963635574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/4043131790963635574'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2008/08/do-you-use-maven-if-so-you-need-nexus.html' title='Do You Use Maven? If So, You Need Nexus'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-112883879679187036</id><published>2008-08-24T10:18:00.007-06:00</published><updated>2008-10-10T10:26:03.911-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='multitasking'/><title type='text'>On Multi-Ignoring</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_pSHP7VYSIjE/SLGLiD37stI/AAAAAAAAAKk/lwg_e1GvgAU/s1600-h/slash-ignore.gnp"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_pSHP7VYSIjE/SLGLiD37stI/AAAAAAAAAKk/lwg_e1GvgAU/s200/slash-ignore.gnp" border="0" alt=""id="BLOGGER_PHOTO_ID_5238121258880316114" /&gt;&lt;/a&gt;&lt;br /&gt;We all do it, some better than others but I have yet to see anyone who has perfected it - multi-tasking. So I've always referred to multi-tasking as multi-ignoring. Well it seems that Merlin Mann has found someone &lt;a href="http://www.43folders.com/2008/08/22/multitasking"&gt;who thinks the same way&lt;/a&gt;. For those not willing the click through, here's the quote: &lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Multitasking is the art of distracting yourself from two things you'd rather not be doing by doing them simultaneously.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;This pretty much sums it up. I say pretty much because I know that I have been guilty of multi-ignoring when I have way too many tasks to handle. That doesn't happen to me so much these days, but I've gone through periods in the past where this just doesn't seem to stop. The other thing that pushes me into this state are constant interruptions. Being interrupted multiple times every hour can make even the most productive person start to do this. That's when you either: &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;A. Log off IRC and IM and just go dark for a few days to get it all done ;-), OR &lt;/li&gt;&lt;br /&gt;&lt;li&gt;B. Throw it in the bit bucket - /ignore&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update&lt;/b&gt;&lt;br /&gt;Tim's latest comment inspired me to update this post regarding some things that author Neal Stephenson said about the process of writing and Merlin Mann blogged about. &lt;br /&gt;&lt;br /&gt;Concentration when writing is so important. I think that Neal Stephenson explained it best when he said the following: &lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Writing novels is hard, and requires vast, unbroken slabs of time. Four quiet hours is a resource that I can put to good use. Two slabs of time, each two hours long, might add up to the same four hours, but are not nearly as productive as an unbroken four. If I know that I am going to be interrupted, I can’t concentrate, and if I suspect that I might be interrupted, I can’t do anything at all. Likewise, several consecutive days with four-hour time-slabs in them give me a stretch of time in which I can write a decent book chapter, but the same number of hours spread out across a few weeks, with interruptions in between them, are nearly useless.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Check it out via &lt;a href="http://www.43folders.com/2008/08/05/bad-correspondent"&gt;Merlin Mann's blog post series&lt;/a&gt; about Neal Stephenson's comments.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-112883879679187036?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/112883879679187036/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2008/08/on-multi-ignoring.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/112883879679187036'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/112883879679187036'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2008/08/on-multi-ignoring.html' title='On Multi-Ignoring'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_pSHP7VYSIjE/SLGLiD37stI/AAAAAAAAAKk/lwg_e1GvgAU/s72-c/slash-ignore.gnp' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-3050290615650513463</id><published>2008-08-23T00:45:00.004-06:00</published><updated>2008-08-23T08:12:00.819-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='keynote powerpoint'/><title type='text'>from(Keynote 4).to(Powerpoint 2008).sucks()</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_pSHP7VYSIjE/SK-0hK7cMKI/AAAAAAAAAKE/EA0n17hZHro/s1600-h/you-suck.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_pSHP7VYSIjE/SK-0hK7cMKI/AAAAAAAAAKE/EA0n17hZHro/s320/you-suck.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5237603373617524898" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;See this kid here? This is what Powerpoint 2008 told me today after exporting a presentation from Keynote 4.x and attempting to open it in Powerpoint. &lt;br /&gt;&lt;br /&gt;I was pretty concerned, but certainly not out of ideas. So I began to Google and found that others were also experiencing the issue, and I discovered that manually removing all the presenter notes from the presentation worked around the issue. This was good news - yay! The bad news was that I had nearly 400 slides in the presentation with notes in nearly half of the slides :-(. &lt;br /&gt;&lt;br /&gt;Lesson learned: Until Apple fixes Keynote to export to the Powerpoint 2008 format properly or Powerpoint 2008 can open the Powerpoint 2004 format without crashing, don't put notes in your Keynote presentations.&lt;br /&gt;&lt;br /&gt;For those who don't know, the API-like title is taken from the &lt;a href="http://activemq.apache.org/camel/"&gt;Apache Camel&lt;/a&gt; API for message routing and mediation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-3050290615650513463?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/3050290615650513463/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2008/08/fromkeynote-4topowerpoint-2008sucks.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/3050290615650513463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/3050290615650513463'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2008/08/fromkeynote-4topowerpoint-2008sucks.html' title='from(Keynote 4).to(Powerpoint 2008).sucks()'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_pSHP7VYSIjE/SK-0hK7cMKI/AAAAAAAAAKE/EA0n17hZHro/s72-c/you-suck.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-6031095914326367817</id><published>2008-08-17T13:09:00.004-06:00</published><updated>2008-08-18T07:54:35.828-06:00</updated><title type='text'>VMWare Appliance Marketplace to the Rescue</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.mnsu.edu/labman2008/images/VMwareLogo.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px;" src="http://www.mnsu.edu/labman2008/images/VMwareLogo.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Recently I blogged about &lt;a href="http://bsnyderblog.blogspot.com/2008/08/vmware-fusion-112-shared-folders-issue.html"&gt;trouble with shared folders and VMWare&lt;/a&gt; and now I've run into it again! Previously I was working with CentOS 5.1 and now I've installed a newer copy of Ubuntu on my MacBook only to discover that folder sharing would not work at all. After searching around a bit, I found some info stating that this was an issue with the commercial version of the VMWare tools and that the &lt;a href="http://communities.vmware.com/message/887802#887802"&gt;open source VMWare tools has fixed the issue&lt;/a&gt;. I'm usually not deterred by such solutions at all, but in this case, my install of Ubuntu was plain vanilla and I just need it for testing. So I decided to grab an install from the &lt;a href="http://www.vmware.com/appliances/"&gt;VMWare Appliance Marketplace&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;So I just grabbed an image of &lt;a href="http://www.vmware.com/appliances/directory/1224"&gt;Ubuntu 8.04 Desktop with VMware Tools&lt;/a&gt; preinstalled (I figured I'd forgo the misery this time). Upon registering with VMWare to download appliances, I was taken to the &lt;a href="http://chrysaor.info/?page=ubuntu"&gt;website of the person who is actually offering the image for download&lt;/a&gt;, downloaded the image via bit torrent and had the image up and running in no time. &lt;br /&gt;&lt;br /&gt;Until recently I wasn't aware of the VMWare Appliance Marketplace. This is similar in concept to the public and freely available OS images available on Amazon EC2 (e.g., On EC2 I have successfully used the &lt;a href="http://developer.amazonwebservices.com/connect/entry.jspa?externalID=1065"&gt;Ubuntu 7.10 Gutsy Base Install&lt;/a&gt;). Why spend the time installing and configuring Linux distributions that I'm simply using for testing? My only requirement is Java and some Java-based tools like Ant and Maven. So there's no reason for me to waste time on a custom install when I can download, run and go. So now I've used preconfigured images on both Amazon EC2 and VMWare successfully and I definitely will again. What a time saver!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-6031095914326367817?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/6031095914326367817/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2008/08/vmware-appliance-marketplace-to-rescue.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/6031095914326367817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/6031095914326367817'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2008/08/vmware-appliance-marketplace-to-rescue.html' title='VMWare Appliance Marketplace to the Rescue'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-7205255108197767296</id><published>2008-08-08T08:51:00.003-06:00</published><updated>2008-08-08T09:02:07.238-06:00</updated><title type='text'>Michael Franti and Spearhead at the Fox in Boulder</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_pSHP7VYSIjE/SJxeAPX2j0I/AAAAAAAAAJA/iwDw6imj1Ys/s1600-h/spearhead.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_pSHP7VYSIjE/SJxeAPX2j0I/AAAAAAAAAJA/iwDw6imj1Ys/s200/spearhead.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5232160225317261122" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;On Wednesday night &lt;a href="http://raibledesigns.com/"&gt;Raible&lt;/a&gt;, Matt and me saw &lt;a href="http://spearheadvibrations.com/"&gt;Michael Franti and Spearhead&lt;/a&gt; at the Fox Theatre in Boulder, CO. I've seen them now seven or eight times in the last few years and they never disappoint! &lt;br /&gt;&lt;br /&gt;After dinner at the &lt;a href="http://www.centrolatinkitchen.com/"&gt;Centro Latin Kitchen&lt;/a&gt;, we headed to the hill to find parking around the Fox and get in to the see the show. On the way over, I heard a live performance on the radio by a band named &lt;a href="http://picturesandsound.com/"&gt;Pictures &amp; Sound&lt;/a&gt; that was very good. I recognized the band leader from his days in &lt;a href="http://www.bluemerle.com/"&gt;Blue Merle&lt;/a&gt;. Upon arriving at the Fox and navigating the sold out crowd to get a spot on the floor, I told the Matts about Pictures &amp; Sound. Then about 10 minutes later, that very band appeared on stage and played their set to open for Spearhead! Ha! I guess I should've paid better attention to the giant marquee out front with the band names on it - LOL! &lt;br /&gt;&lt;br /&gt;Needless to say, Michael Franti and Spearhead are a force! Every time I've seen them perform, they are in top form. While their recorded music is fantastic, seeing them live is soooooo much better. If you get a chance to hear them or see them, I highly, highly recommend it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-7205255108197767296?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/7205255108197767296/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2008/08/michael-franti-and-spearhead-at-fox-in.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/7205255108197767296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/7205255108197767296'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2008/08/michael-franti-and-spearhead-at-fox-in.html' title='Michael Franti and Spearhead at the Fox in Boulder'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_pSHP7VYSIjE/SJxeAPX2j0I/AAAAAAAAAJA/iwDw6imj1Ys/s72-c/spearhead.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-126763046600821606</id><published>2008-08-07T23:40:00.002-06:00</published><updated>2008-08-07T23:58:32.254-06:00</updated><title type='text'>VMWare Fusion 1.1.2 Shared Folders Issue</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.mnsu.edu/labman2008/images/VMwareLogo.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px;" src="http://www.mnsu.edu/labman2008/images/VMwareLogo.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I just spent the last hour screwing around with VMWare Fusion 1.1.2 on MacOS X trying to get Shared Folders working. As VMWare booted Linux I'd see the message 'Mounting HGFS shares: [FAILED]'. I ran the &lt;tt&gt;vmware-config-tools.pl&lt;/tt&gt; script and nothing changed. I rebooted the VM and nothing changed. So I began searching for other experiencing this issues. &lt;br /&gt;&lt;br /&gt;After Googling around quite a bit, I located &lt;a href="http://communities.vmware.com/thread/141730?tstart=0&amp;start=30"&gt;this forum discussion&lt;/a&gt; about how this is actually a bug that is fixed in 1.1.3. After uninstalling 1.1.2 and installing 1.1.3, the one catch was that I needed to install the newer version of the VMWare Tools. After doing this the I also had to install a newer version of the VMWare Tools (Virtual Machine-&gt;Install VMWare Tools). It simply offered a newer version so I installed it and ran the configure script again and finally saw the 'Mounting HGFS shares: [OK]' message - yay! &lt;br /&gt;&lt;br /&gt;Now after nearly an hour of screwing around with this, it's back to work :-(.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-126763046600821606?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/126763046600821606/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2008/08/vmware-fusion-112-shared-folders-issue.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/126763046600821606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/126763046600821606'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2008/08/vmware-fusion-112-shared-folders-issue.html' title='VMWare Fusion 1.1.2 Shared Folders Issue'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-2083991487695560284</id><published>2008-08-07T09:32:00.003-06:00</published><updated>2008-08-12T11:45:08.277-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='activemq manning'/><title type='text'>ActiveMQ In Action - Free Chapters Available</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://manning.com/snyder/snyder_cover150.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 220px;" src="http://manning.com/snyder/snyder_cover150.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you're a user of Apache ActiveMQ then &lt;a href="http://www.manning.com/snyder/"&gt;ActiveMQ In Action&lt;/a&gt; will be of interest to you. Not only because we're really focused on helping folks understand and use ActiveMQ, but also because Manning is offering early access to the chapter FOR FREE!&lt;br /&gt;&lt;br /&gt;Recently &lt;a href="http://rajdavies.blogspot.com/"&gt;Rob Davies&lt;/a&gt;, &lt;a href="http://www.oreillynet.com/pub/au/1763"&gt;Dejan Bosanac&lt;/a&gt; and myself have embarked on writing a book about Apache ActiveMQ. The first few chapters  are now available via the Manning Early Access Program in PDF form with more to come throughout the next few months. These chapters are raw and straight from the authoring/editing cycle so you're really getting an early look into them. There's even a forum for discussion of the book where you can ask questions and make suggestions if you have any. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;And Now a Rant on the Writing Process...&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;It has been fun writing this book so far because we're &lt;b&gt;not using a word processor&lt;/b&gt; - yay! When drawing up the proposal for the book, we agreed to utilize &lt;a href="http://www.docbook.org/"&gt;DocBook&lt;/a&gt; for writing the book. For this purpose, I believe all three of us have wound up using the &lt;a href="http://www.xmlmind.com/xmleditor/"&gt;XMLMind XML Editor&lt;/a&gt; because it supports DocBook so well. With the help of an article titled &lt;a href="http://www.xml.com/pub/a/2007/06/20/getting-productive-with-xmlmind.html"&gt;Getting Productive with XMLMind&lt;/a&gt;, so far it has been a pleasant experience.&lt;br /&gt;&lt;br /&gt;This is a big departure from the other books I've written which were for other publishers and the writing process was very focused on the editors instead of authors. With the first three books I wrote, I was required to use Microsoft Word because that's what tool all of the editors used. The experience of many back-and-forth editing sessions with many people only helped me loath using Word even more. The usability of Word is just not very productive, especially once the document is so incredibly littered with change tracking and comments that it's barely readable. And it's binary format is a real pain in the ass because it can't be diffed or versioned easily.&lt;br /&gt;&lt;br /&gt;The processes I've used with Word were really a dead end because once the document is in the Word format, it can't be easily transformed into other formats for the benefit of the technical authors. This is what caused a productivity nightmare for the authors because there was no real round-trip authoring/editing cycle because of this. There are only two solutions to this problem and neither of the publishers were willing to make any changes:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Transform the Word doc to another format at every cycle of the authoring/editing cycle - This is a real non-starter because too much information is lost in the transformation and wouldn't make it out of or back into the Word format. IMO, this is where all word processors fail because the editing information is so tightly tied to the content itself. This is exactly why I like using diff and patch so much and why I write most things in just plain text of some sort. Diffs are completely separate from the source but patch is smart enough to semantically match many things. (If you're not familiar with diff and patch and you're interested, see something like &lt;a href="http://www.network-theory.co.uk/docs/diff/"&gt;Comparing and Merging Files with GNU diff and patch&lt;/a&gt;).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Change the way the editors work, i.e., no more use of Word for editing - This is usually not workable because of the time, effort and cost involved with re-training editors in using different tools.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;However, much to my surprise, Manning has already taken the second path I mentioned above! Its editors are perfectly OK with us using DocBook as the content format for the book and they even use XMLMind themselves. Unfortunately the content management system we use for authoring leaves a lot to be desired, but that's a different rant ;-). &lt;br /&gt;&lt;br /&gt;As much as XMLMind is still a separate tool requiring point-and-click (I like my hands to stay on the keyboard which is why I'm a VIM nut), I've found it to be much more productive than Word already. I think in large part this is due to the fact that it doesn't have nearly as many bells and whistles as Word therefore there's just less crap in the document. XMLMind is very focused on the content and less focused on the eye candy which I really like - a tool that more or less stays out of your way. &lt;br /&gt;&lt;br /&gt;If you've read this far into my rant, I congratulate you. This topic is near to me because I've spent so much time writing and putting together presentations in the last few years mainly using processes and tools that just aggravated the shit out of me. I could go on and on about this topic but for now I'll spare you the details. I know that &lt;a href="http://blogs.sonatype.com/jvanzyl/"&gt;Jason&lt;/a&gt; and I have discussed this at length in the past because it has affected us so much. Maybe I'll continue this later in a separate entry another time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-2083991487695560284?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/2083991487695560284/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2008/06/activemq-in-action-free-chapters.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/2083991487695560284'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/2083991487695560284'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2008/06/activemq-in-action-free-chapters.html' title='ActiveMQ In Action - Free Chapters Available'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-7258736511049337366</id><published>2008-08-05T22:38:00.002-06:00</published><updated>2008-08-05T22:44:35.331-06:00</updated><title type='text'>A Simple Time Tracker for MacOS X</title><content type='html'>I didn't have to hunt very far for a simple time tracker for MacOS X before finding one named &lt;a href="http://code.google.com/p/time-tracker-mac/"&gt;Time Tracker for the Mac&lt;/a&gt;. It tracks the time you spend on tasks and projects. Simple and exact ;-).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-7258736511049337366?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/7258736511049337366/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2008/08/simple-time-tracker-for-macos-x.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/7258736511049337366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/7258736511049337366'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2008/08/simple-time-tracker-for-macos-x.html' title='A Simple Time Tracker for MacOS X'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-2786696789449126360</id><published>2008-07-25T23:05:00.003-06:00</published><updated>2008-07-26T00:30:38.841-06:00</updated><title type='text'>WTF?! Microsoft Becomes a Platinum ASF Sponsor?</title><content type='html'>When you were growing up I'm sure you knew some kid who always seemed to have the cruelest intentions. S/he always possessed ulterior motives, trying to better her/his social position using lies and deceit veiled by declarations of pure intentions. Yet, in the end, they'd just wind up screwing people yet again leaving them feeling like fools for actually wanting to believe that s/he may have actually changed her/his ways. Well this is kinda what I'm feeling right now, just waiting for the punchline. &lt;br /&gt;&lt;br /&gt;I found out about this announcement early this morning and yet I'm still perplexed to discover that &lt;a href="http://www.theregister.co.uk/2008/07/25/microsoft_gpl/"&gt;Microsoft has become a platinum sponsor of the Apache Software Foundation&lt;/a&gt;. I certainly trust the folks at the ASF who made this happen, but I can't let go of Microsoft's past FUD against open source and Linux so easily (remember the 'Get the Facts' campaign?). Has the poor behavior and shady tactics surrounding the ISO &amp;lt;quote&amp;gt;approval&amp;lt;/quote&amp;gt; of OOXML as an international standard already been forgotten? This move really smells of a distraction and a method of getting the open source community to assist Microsoft in leveling (and eventually tipping) the playing field in the Windows v. Linux battle. A brilliant move, really - &lt;i&gt;let's pay the folks we're trying to beat so that they will help us beat them&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;Of course, I don't discount the fact that someone can turn over a new leaf - and I really would like this to be the case. I just hope that the fox has not been let into the henhouse bearing a bucket of grain.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-2786696789449126360?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/2786696789449126360/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2008/07/wtf-microsoft-becomes-platinum-asf.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/2786696789449126360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/2786696789449126360'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2008/07/wtf-microsoft-becomes-platinum-asf.html' title='WTF?! Microsoft Becomes a Platinum ASF Sponsor?'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-4911332167686151066</id><published>2008-07-24T08:14:00.008-06:00</published><updated>2008-07-24T10:00:15.758-06:00</updated><title type='text'>A Brief Look at Everything2, Wikipedia, About.com, Freebase, Squidoo, GoogleBase and Google Knol</title><content type='html'>First there was &lt;a href="http://everything2.com/"&gt;Everything2&lt;/a&gt;, a Perl-MySQL Web Content-Management System to create a flexible system of entering, linking, and retrieving information. I remember first discovering this system when I still read Slashdot sooooooo long ago. Cool idea, less concerned with being an authoritative reference and more about being a sounding board for anyone who is interested in writing about a given topic. Everything2 was developed by the same guys who developed Slashdot which is why the Perl/MySQL solution was used. It offers a simple search mechanism for discovering nodes. &lt;br /&gt;&lt;br /&gt;Next came &lt;a href="http://wikipedia.org/"&gt;Wikipedia&lt;/a&gt;, a multilingual, Web-based, free content encyclopedia project whose articles provide links to guide the user to related pages with additional information. Wikipedia was born out of Nupedia which was an effort to create a new encyclopedia via an elaborate system of peer review that required highly qualified contributors. Wikipedia threw out most of the formalities of qualifications and peer review became a staple due to the high amount of collaboration. Still, Wikipedia is most interested in information that is &lt;a href="http://en.wikipedia.org/wiki/Wikipedia:Notability"&gt;worthy of notice&lt;/a&gt;. Wikipedia also offers a primitive search mechanism for locating information. Wikipedia also prides itself on the anonymity of its content creators. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://about.com/"&gt;About.com&lt;/a&gt; provides it's own information that is managed by its guides, people who have the credentials and experience to back up knowledge. Guides must also have professional writing experience in your area of expertise. It's a unique set of qualifications, but About.com actually pays its guides to author the content. About.com offers a lot of information but it is owned by the New York Times Company which gives it a really commercialized feel. Where Wikipedia definitely has an encyclopedic approach to its information, About.com has a very consumeristic bend to its content. &lt;br /&gt;&lt;br /&gt;Then &lt;a href="http://www.freebase.com/"&gt;Freebase&lt;/a&gt; came about an open database of the world’s information by drawing information from large open data sets like Wikipedia, MusicBrainz, and the SEC, it contains structured information on many popular topics, like movies, music, people and locations—all reconciled and freely available via &lt;a href="http://www.freebase.com/view/guid/9202a8c04000641f8000000008c0e536"&gt;it's own open API&lt;/a&gt; and &lt;a href="http://www.freebase.com/view/guid/9202a8c04000641f8000000004fc84f9"&gt;Metaweb Query Language&lt;/a&gt;. Freebase also offers a Javascript template language named the &lt;a href="9202a8c04000641f8000000008c21ecf"&gt;Metaweb Javascript Template Language (MJT)&lt;/a&gt; billed as an in-browser web framework. &lt;br /&gt;&lt;br /&gt;[Interestingly, a company named &lt;a href="http://powerset.com/"&gt;Powerset&lt;/a&gt; developed its own search technology focused on aggregating, summarizing and navigating information and it's first focus to showcase its technology was a combination of content from Wikipedia and Freebase. (Earlier this month, it was announced that &lt;a href=""&gt;Microsoft acquired Powerset&lt;/a&gt;.)]&lt;br /&gt;&lt;br /&gt;Another player in this space is &lt;a href="http://www.squidoo.com/"&gt;Squidoo&lt;/a&gt; offering its own set of information authored by anyone. Squidoo has mulitple goals listed on its website including it's goal as a platform is to bring the power of recommendation to search; it's goal as a co-op is to pay as much money as we can to our lensmasters and to charity, and it's goal as a community is to have fun along the way, and meet new ideas and the people behind them. So it pays its authors and charities and promotes having fun authoring content and recommending it. &lt;br /&gt;&lt;br /&gt;The first offering from Google was &lt;a href="http://base.google.com/base"&gt;GoogleBase&lt;/a&gt; as a way to describe your information to make it as easy as possible for people to find when they search. In other words, enter your information and make it part of the Google-verse. Oddly, this seems to overlap with Google Knol. &lt;br /&gt;&lt;br /&gt;Now comes &lt;a href="http://knol.google.com/"&gt;Google Knol&lt;/a&gt;, a system for creating authoritative articles about a specific topic. Knol seems to be somewhere in between Everything2 and Wikipedia but it removes anonymity from the picture by requiring information creators to have a Google account. Knol is yet another way for Google to exploit its business of content-targeted ads. &lt;br /&gt;&lt;br /&gt;So how do these information systems differ? IMO they really don't differ much in what they seek to provide, they only differ in their implementation. Each one seems to store and make it's information available in it's own, unique way. So to compare and contrast each one, I searched for the string 'Boulder, Colorado'. Below are links to the results. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://everything2.com/e2node/Boulder%252C%2520Colorado"&gt;Boulder, Colorado&lt;/a&gt; on Everything2 returned a spartan amount of information.  &lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Boulder%2C_Colorado"&gt;Boulder, Colorado on Wikipedia&lt;/a&gt; produced the most information out of any of these systems. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://search.about.com/fullsearch.htm?terms=boulder,%20colorado"&gt;Boulder, Colorado on About.com&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.freebase.com/view/guid/9202a8c04000641f80000000000a2e08"&gt;Boulder, Colorado on Freebase&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.squidoo.com/search/results/boulder%2C%20colorado"&gt;Boulder, Colorado on Squidoo&lt;/a&gt; produced no content. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://base.google.com/base/s2?q=boulder%2C+colorado+&amp;hl=en&amp;gl=US"&gt;Boulder, Colorado on GoogleBase&lt;/a&gt; produced the results in the same format used by Google Shopping and other Google properties. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://knol.google.com/k/knol/system/knol/pages/Search?q=boulder%2C+colorado&amp;restrict=general&amp;back=knol.knol.Help#"&gt;Boulder, Colorado on Google Knol&lt;/a&gt; rendered nothing.  &lt;br /&gt;&lt;br /&gt;The bottom line is that all of the sites I mention here are focused on organizing and providing information. The quality of the information must be good, but that's only a contributing factor, IMO. If the quality of the information is good, the real differentiating factor is the value-add around the edges. And right now the biggest value-add seems to be how the information is offered to be discovered by users. They all have their own way of attacking the problem. &lt;br /&gt;&lt;br /&gt;Wikipedia offers the best content quality hands down. This is surely due to the high amount of collaboration at Wikipedia and the Wikipedia community's ability to police it's content so incredibly well. Each entry is typically fairly well-rounded and has been contributed to by multiple people - the wisdom of the crowd at its finest. &lt;br /&gt;&lt;br /&gt;Freebase is more interesting to me because it offers an API for accessing the data (and because I'm a software engineer, I'm biased on that front) but Freebase can't shake a stick at the content offered by Wikipedia. Freebase is also not the best at presentation. &lt;br /&gt;&lt;br /&gt;Even though Powerset is not a content creator, it's ability to aggregate data and present it to users in a more meaningful manner is probably the most compelling just because it's the most usable by far. But not that many people have even heard of Powerset and how that it's been swallowed by Microsoft, it may never be heard from again (unless Microsoft leaves it untouched to continue to do what it does). &lt;br /&gt;&lt;br /&gt;Google certainly has the most marketing power and its dominance in so many other web properties gives it a leg up. But it's content breadth and depth is sorely lacking currently. Maybe it will catch up over time. &lt;br /&gt;&lt;br /&gt;Which one will prevail? Your guess is as good as mine. Competition is a good thing ;-).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-4911332167686151066?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/4911332167686151066/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2008/07/brief-look-at-everything2-wikipedia.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/4911332167686151066'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/4911332167686151066'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2008/07/brief-look-at-everything2-wikipedia.html' title='A Brief Look at Everything2, Wikipedia, About.com, Freebase, Squidoo, GoogleBase and Google Knol'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-6732443095757291374</id><published>2008-07-16T13:01:00.005-06:00</published><updated>2008-07-16T13:15:42.178-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='music'/><title type='text'>Live From Daryl's House</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.livefromdarylshouse.com/templates/members/images/vidpage_top.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 400px;" src="http://www.livefromdarylshouse.com/templates/members/images/vidpage_top.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Last night I flipped on the TV to catch the last 20 minutes of the Conan O'Brien show (IMO, Conan is a comedic genius). As it turned out, Daryl Hall (of Hall and Oates fame in the 1980s) played with KT Tunstall and the performance was really good. As Conan ended, he announced that Daryl has a website where he posts live performances called &lt;a href="http://www.livefromdarylshouse.com/"&gt;Live From Daryl's House&lt;/a&gt;. So I checked it out immediately and was blown away at the quality of the music. &lt;br /&gt;&lt;br /&gt;I really dig live music. I enjoy it because it's an opportunity to see true musicians play raw music without the assistance of studio affects and mixing to perfection  before it's heard. I refer to this as an opportunity because I've been disappointed by some musician's who turned out to be really shitty in a live setting. At any rate, Daryl's voice is as good as it's ever been, maybe better, and his band is great. The quality of the music and videos on his website is stellar (despite the damn Flash player being somewhat choppy). &lt;br /&gt;&lt;br /&gt;Anyone who enjoyed Hall and Oates back in the early 80s will enjoy Daryl playing some familiar songs from that era as well as some new stuff. What's more, you can download the music for US$.99 per track!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-6732443095757291374?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/6732443095757291374/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2008/07/live-from-daryls-house.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/6732443095757291374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/6732443095757291374'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2008/07/live-from-daryls-house.html' title='Live From Daryl&apos;s House'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-6112610259789918227</id><published>2008-07-16T11:01:00.005-06:00</published><updated>2008-07-16T13:12:54.724-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java maven eclipse'/><title type='text'>Eclipse Maven Integration Using m2eclipse</title><content type='html'>&lt;span style="font-family: Verdana, sans-serif; font-weight: bolder; color: #000000;text-decoration: none; font-style: italic;letter-spacing: 0.1ex;"&gt;&lt;span style="font-size: 114%;"&gt;m&lt;/span&gt;&lt;span style="color: #FF6633;"&gt;a&lt;/span&gt;ven&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Recently I authored a chapter in &lt;a href="http://www.sonatype.com/book/"&gt;Maven: the Definitive Guide&lt;/a&gt;. The chapter I wrote is about &lt;a href="http://www.sonatype.com/book/reference/eclipse.html#"&gt;Maven integration with Eclipse using m2eclipse&lt;/a&gt;, an Eclipse plugin for Maven. I really enjoyed writing this chapter because it allowed me to dig into m2e and understand more about what is really there today. In short, I was blown away! &lt;br /&gt;&lt;br /&gt;m2e has come a long way since I last tried it out a couple years ago. Since that time, it has become so feature rich that there's little need for me to use Maven on the command line anymore. Being that I'm a command line freak because of the power and control it offers, I wasn't thrilled about staying in the IDE to build everything. But I commend Eugene and company on the features and polish in m2e today. In fact, I'm already finding it difficult to live without. If you haven't tried out m2eclipse, read through the article and try it out now. Believe me, you'll be very satisfied! &lt;br /&gt;&lt;br /&gt;Additonally, we also just published an article based on the m2e chapter titled &lt;a href="http://www.theserverside.com/tt/articles/article.tss?l=Introductiontom2eclipse"&gt;Introduction to m2eclipse&lt;/a&gt;. This chapter is focused on getting m2e installed and showcasing its major features and should help folks get started with it quickly. Unfortnately, in the time it took for the TheServerSide to publish the article, m2e has gotten more new features and the Maven book chapter has been updated significantly. &lt;br /&gt;&lt;br /&gt;BTW, you can also &lt;a href="http://oreilly.com/catalog/9780596517335/"&gt;buy a published copy of the Maven book from O'Reilly Media&lt;/a&gt;, though I'm not quite sure I'd recommend it for one reason. The updates to the book chapters are coming at such a rapid pace that a printed book will be out of date the day you buy it. Besides, I'm not a huge fan of paper books that simply grow out of date really fast. But if you like a printed book in hand, buy away ;-).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-6112610259789918227?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/6112610259789918227/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2008/07/eclipse-maven-integration-using.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/6112610259789918227'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/6112610259789918227'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2008/07/eclipse-maven-integration-using.html' title='Eclipse Maven Integration Using m2eclipse'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-7275487530899388151</id><published>2008-07-12T08:03:00.005-06:00</published><updated>2008-07-12T09:30:00.663-06:00</updated><title type='text'>Integration as a Service</title><content type='html'>Back at LogicBlaze, we had a product idea for a SOA and messaging appliance with management and monitoring software that could be installed at a customer site. We called this idea LogicBlades because we were talking about using blade servers. I still think this would be a compelling solution for small to medium sized businesses (SMBs) for a lot of reasons. But it would probably require an operations team for offering a service on top of the appliance for monitoring, software updates, etc. &lt;br /&gt;&lt;br /&gt;Well, call it a missed opportunity because there are already a bunch of companies in this space including &lt;a href="http://forumsys.com/products_sentry.htm"&gt;Forum Systems' Forum Sentry&lt;/a&gt;, &lt;a href="http://www.dajeil.com/"&gt;Dajeil XML Acceleration Hardware&lt;/a&gt;, &lt;a href="http://www.vordel.com/products/vxp/"&gt;Vordel XML and SOA Appliances&lt;/a&gt;, &lt;a href="http://www-306.ibm.com/software/integration/datapower/"&gt;IBM WebSphere DataPower SOA Appliances&lt;/a&gt; (is every product at IBM somehow linked to WebSphere?!) and &lt;a href="http://www.cisco.com/en/US/netsol/ns629/networking_solutions_market_segment_solutions_home.html"&gt;Cisco's SONA product line&lt;/a&gt; just to name a few. &lt;br /&gt;&lt;br /&gt;The even hotter portion of this space involves the inclusion of virtualization with the SOA offering. &lt;a href="http://www.vordel.com/products/vxp/"&gt;Vordel&lt;/a&gt; is in this space as well, &lt;a href="http://www.layer7tech.com/"&gt;Layer 7 Technologies&lt;/a&gt;, &lt;a href="http://www.tibco.com/software/soa/activematrix_service_grid/default.jsp"&gt;TIBCO&lt;/a&gt; and IBM is also here with virtualized partitions on servers. Suffice it to say that this market is being attacked. &lt;br /&gt;&lt;br /&gt;(I don't have the time to comprehensively research all companies in this space so I'm sure I've missed a few.)&lt;br /&gt;&lt;br /&gt;Now, British Telecom is throwing its hat into the ring with a slightly different offering. BT is providing integration as a service with its &lt;a href="http://www.cbronline.com/article_news.asp?guid=E0D2D590-D244-421A-A942-C4B022A911C0"&gt;new managed application and data-integration service in the UK&lt;/a&gt; for a 'pay-as-you-grow' service. The solution consists of a hardware appliance running a hardened Linux with the Sonic ESB and iWay connectors. But the BT product not installed at the customer site. Instead it's installed in a BT ops facility where BT handles all the management and monitoring. So this solution is really a hosted service instead of something that customers install on-site. From the BT point of view, this is certainly an easier product to manage. Trying to manage remote appliances at customer sites can be an utter nightmare. Still, an on-site solution seems like a larger opportunity if you offer the customer the management and monitoring software for their own use along with training and professional services. &lt;br /&gt;&lt;br /&gt;It still seems like there is lots of opportunity in this space, especially for customers who are not willing to bet the farm on big dollar products from big companies and for companies who can innovate further.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-7275487530899388151?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/7275487530899388151/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2008/07/integration-as-service.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/7275487530899388151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/7275487530899388151'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2008/07/integration-as-service.html' title='Integration as a Service'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-3264400839575006269</id><published>2008-07-11T10:59:00.003-06:00</published><updated>2008-07-12T07:38:21.091-06:00</updated><title type='text'>Pandora For the iPhone</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.wired.com/music/images/2008/07/10/iphone2_3.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 220px;" src="http://blog.wired.com/music/images/2008/07/10/iphone2_3.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I already love &lt;a href="http://pandora.com/"&gt;Pandora&lt;/a&gt; and it's concept of radio stations based on artists you already like, but &lt;a href="http://blog.wired.com/music/2008/07/sweet-pandora-o.html"&gt;Pandora's Streaming Radio App for iPhone&lt;/a&gt; sounds even better and yet another reason to get an iPhone. &lt;br /&gt;&lt;br /&gt;According to the Wired article, you can bookmark songs to your profile, purchase songs from iTunes or even ask Pandora why it chose a particular song. For those that don't know, Pandora was instrumental in creating the &lt;a href="http://en.wikipedia.org/wiki/Music_Genome_Project"&gt;Music Genome Project&lt;/a&gt;: &lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;A given song is represented by a vector containing approximately 150 genes. Each gene corresponds to a characteristic of the music, for example, gender of lead vocalist, level of distortion on the electric guitar, type of background vocals, etc. Rock and pop songs have 150 genes, rap songs have 350, and jazz songs have approximately 400. Other genres of music, such as world and classical, have 300-500 genes. The system depends on a sufficient number of genes to render useful results. Each gene is assigned a number between 1 and 5, and fractional values are allowed but are limited to half integers.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;When I first read about the Music Genome Project, I was immediately intrigued because it's all about the science behind music. This drove me to try out Pandora right away and I've been very happily using it ever since. That was back in 2003, IIRC. &lt;br /&gt;&lt;br /&gt;This all culminates with the the fact that I don't have an iPhone... yet. So far I've put off purchasing an iPhone because I've heard horror stories about at&amp;t coverage and customer service. Besides, I've been with T-Mobile for years and despite experiencing bad coverage where I live, I get great service almost everywhere else and especially in the EU without changing anything on my phone. So I still like the service. And there's always the possibility of still using the iPhone with a provider other than at&amp;t ;-). &lt;br /&gt;&lt;br /&gt;I've also been waiting for the 3G iPhone to be released, which is &lt;a href="http://news.google.com/news?q=iphone+3g&amp;ie=UTF-8&amp;oe=utf-8&amp;rls=org.mozilla:en-US:official&amp;client=firefox-a&amp;um=1&amp;hl=en&amp;sa=X&amp;oi=news_group&amp;resnum=1&amp;ct=title"&gt;happening today all over the world with major fanfare.&lt;/a&gt; It looks like Apple has yet another major hit on its hands.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update:&lt;/b&gt; It looks like the 3G iPhone release has been &lt;a href="http://news.google.com/news?hl=en&amp;ie=UTF-8&amp;ncl=1227117626"&gt;plagued with issues&lt;/a&gt; on the iTunes server-side, though there doesn't seem to be much detail about the issue yet, especially regarding a solution. :-(&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-3264400839575006269?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/3264400839575006269/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2008/07/pandora-for-iphone.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/3264400839575006269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/3264400839575006269'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2008/07/pandora-for-iphone.html' title='Pandora For the iPhone'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-7878810680544511759</id><published>2008-07-11T09:19:00.003-06:00</published><updated>2008-07-11T09:31:03.040-06:00</updated><title type='text'>Dead Simple JMS</title><content type='html'>What if working with JMS were as easy as working with a filesystem? This would allow using JMS to become as familiar as files on the filesystem, using all the tools you're already comfortable using. Well it appears that &lt;a href="http://blogs.sun.com/adamt/entry/jms_made_really_really_easy"&gt;Adam Turnbull has made this a reality&lt;/a&gt;.  &lt;br /&gt;&lt;br /&gt;Adam made use of the &lt;a href="http://fuse.sourceforge.net/"&gt;FUSE (Filesystem in Userspace)&lt;/a&gt; and it's cousin &lt;a href="http://sourceforge.net/projects/fuse-j"&gt;FUSE-J&lt;/a&gt; to map JMS queues to the filesystem. He's asking if anyone would be interested in him open sourcing it. I'd definitely like to get my hands on it for experimentation and use with &lt;a href="http://activemq.apache.org/"&gt;Apache ActiveMQ&lt;/a&gt; and to try it out with &lt;a href="http://code.google.com/p/macfuse/"&gt;macfuse&lt;/a&gt;. Whatta ya say, Adam? &lt;br /&gt;&lt;br /&gt;As for the name, my suggestion is the title of this blog entry.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-7878810680544511759?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/7878810680544511759/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2008/07/dead-simple-jms.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/7878810680544511759'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/7878810680544511759'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2008/07/dead-simple-jms.html' title='Dead Simple JMS'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-4925458158695729387</id><published>2008-07-09T08:41:00.003-06:00</published><updated>2008-12-09T21:37:12.432-07:00</updated><title type='text'>Unable to Access GMail This Morning</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_pSHP7VYSIjE/SHTOtNepP5I/AAAAAAAAAIg/pWwyvrs05gY/s1600-h/gmail-error.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_pSHP7VYSIjE/SHTOtNepP5I/AAAAAAAAAIg/pWwyvrs05gY/s320/gmail-error.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5221025144136875922" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This morning when attempting to log into GMail I was met with the screenshot you see here telling me that and upstream system is having issues via the old &lt;a href="http://www.checkupdown.com/status/E502.html"&gt;HTTP 502 status code&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Interestingly I seem to be experiencing more and more issues with the Ajaxy stuff in GMail recently such as inability to access the inbox or a message, inability to refresh, inability to log into chat, etc. These issues always seem to manifest themselves via lots of loooooooooooooong pauses and the yellow status messages at the top of the pages stating 'Loading...' More recently I've taken to logging out of GMail and signing back in and the problems almost always are immediately gone then. This tells me that there must be a lot of caching in the GMail web app or long timeouts or both. &lt;br /&gt;&lt;br /&gt;Is anyone else seeing this error or experiencing problems such as these?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-4925458158695729387?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/4925458158695729387/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2008/07/unable-to-access-gmail-this-morning.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/4925458158695729387'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/4925458158695729387'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2008/07/unable-to-access-gmail-this-morning.html' title='Unable to Access GMail This Morning'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_pSHP7VYSIjE/SHTOtNepP5I/AAAAAAAAAIg/pWwyvrs05gY/s72-c/gmail-error.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-7335172142428555946</id><published>2008-06-30T11:53:00.003-06:00</published><updated>2008-06-30T12:12:05.852-06:00</updated><title type='text'>Denver Mayor Proclaims Widespread Panic Day in Denver</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.eternitysky.com/images/music_bands/widespread_panic/stickers/sky568_stickers_widespread_panic.gif"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px;" src="http://www.eternitysky.com/images/music_bands/widespread_panic/stickers/sky568_stickers_widespread_panic.gif" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Matt Good and I saw Widespread Panic at RedRocks on Friday night - what a blast! That's the first time I've seen them and although I was tired from the week, I was impressed. &lt;br /&gt;&lt;br /&gt;We showed up about an hour early and entered the amphitheater about 45 minutes before the show started and boy were we surprised. There were tarps *everywhere* and they were taped down with duct tape! We'd never seen this before, how strange. As we weaved all around and worked our way upward through all the tarps and the people looking for seats, we happened upon a section of bench about 10 or 15 feet long where there were no tarps. We asked a dude sitting there if the seats were available and he responded by pointing his finger at us, 'Do you have a tarp?!' We both said no and he said, 'Then sit down - this is the non-tarpers' zone.' We were stoked, as were the people sitting next to us for having found some more non-tarpers. &lt;br /&gt;&lt;br /&gt;The band played two sets and the second was even better than the first! And Friday was only the first night, as Widespread Panic played for three consecutive nights (Fri/Sat/Sun), all of which were sold out. &lt;br /&gt;&lt;br /&gt;Evidently Denver Mayor John Hickenlooper even declared Friday 27 June to be &lt;a href="http://www.rockymountainnews.com/news/2008/jun/26/the-kings-of-red-rocks-widespread-panic/"&gt;Widespread Panic day in the city and county of Denver&lt;/a&gt; for having played 32 consecutively sold out shows at RedRocks Amphiteater. Awesome!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-7335172142428555946?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/7335172142428555946/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2008/06/denver-mayor-proclaims-widespread-panic.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/7335172142428555946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/7335172142428555946'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2008/06/denver-mayor-proclaims-widespread-panic.html' title='Denver Mayor Proclaims Widespread Panic Day in Denver'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9088482399688345277.post-4646753617311146515</id><published>2008-06-27T09:24:00.005-06:00</published><updated>2008-07-04T08:08:46.067-06:00</updated><title type='text'>Service Oriented Integration Talk from Javapolis 2007 Posted</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.javalobby.org/av/javapolis/images/javapolis_250.gif"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 175px;" src="http://www.javalobby.org/av/javapolis/images/javapolis_250.gif" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It looks like my talk from &lt;a href="http://www.javapolis.com/confluence/display/JP07/Home"&gt;Javapolis 2007&lt;/a&gt; titled &lt;a href="http://parleys.com/display/PARLEYS/Home#slide=1;talk=14123079;title=ServiceMix"&gt;Service Oriented Integration With Apache ServiceMix&lt;/a&gt; was posted on the Parleys website for anyone who's interested. This presentation talks about the definition of an Enterprise Service Bus, Java Business Integration, Apache ServiceMix 3, a little bit of Apache Camel and some info about Apache ServiceMix 4. It also shows a somewhwat basic app that wires together various JBI components to demonstrate how apps are built with ServiceMix. So if you are interested in a simple app this might help you. &lt;br /&gt;&lt;br /&gt;Notice that Javapolis has changed it's name and it's logo and is now &lt;a href="http://www.javoxx.com/display/JV08/Home"&gt;Javoxx&lt;/a&gt;. According to Stefan, the concept is the same and the great conference and events surrounding it will continue at the Metropolis in Antwerp (what a great city!).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9088482399688345277-4646753617311146515?l=bsnyderblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bsnyderblog.blogspot.com/feeds/4646753617311146515/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bsnyderblog.blogspot.com/2008/06/service-oriented-integration-talk-from.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/4646753617311146515'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9088482399688345277/posts/default/4646753617311146515'/><link rel='alternate' type='text/html' href='http://bsnyderblog.blogspot.com/2008/06/service-oriented-integration-talk-from.html' title='Service Oriented Integration Talk from Javapolis 2007 Posted'/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:total>0</thr:total></entry></feed>
