<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DUYFSXs-fCp7ImA9WxJUFEU.&quot;"><id>tag:blogger.com,1999:blog-10753561</id><updated>2009-07-13T08:11:58.554-04:00</updated><title>In the Trenches</title><subtitle type="html">Covering software engineering, ColdFusion, Java, Design Patterns, OOP from deep in the trenches.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://cf-bill.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://cf-bill.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Bill</name><uri>http://www.blogger.com/profile/07161835401958202911</uri><email>noreply@blogger.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>278</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><link rel="self" href="http://feeds.feedburner.com/InTheTrenches" type="application/atom+xml" /><entry gd:etag="W/&quot;DE4HSXo-eSp7ImA9WxJRE0g.&quot;"><id>tag:blogger.com,1999:blog-10753561.post-493674169981569401</id><published>2009-05-08T17:03:00.004-04:00</published><updated>2009-05-14T23:08:58.451-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-14T23:08:58.451-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="yahoo" /><category scheme="http://www.blogger.com/atom/ns#" term="yahoo-pipes" /><category scheme="http://www.blogger.com/atom/ns#" term="friendfeed" /><category scheme="http://www.blogger.com/atom/ns#" term="twitter" /><category scheme="http://www.blogger.com/atom/ns#" term="rss" /><title>How to use Twitter's STAR to auto-retweet</title><content type="html">If you've ever thought there should be an easier way to re-tweet a message in twitter well now there is.  No longer do you have to copy+paste and prefix "RT: @" to the mesage and then have to worry about cropping it down to under 140 characters.&lt;br /&gt;&lt;br /&gt;Thanks to the power of Yahoo Pipes and FriendFeed you can automatically retweet any message you mark with a star (favorite).  It's fairly easy.&lt;br /&gt;&lt;br /&gt;1. Get a friend feed account if you don't have one.  Fortunately it's super easy now-a-days because you can use your twitter login to create a FriendFeed account.  So go, &lt;a href="http://friendfeed.com"&gt;get an account&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;2. Once you have a FF account make sure you add your twitter service.  This is easier than it might seem (and it may have done it automatically if you signed up with twitter.  If not just add your twitter account by going to Settings, Add Service, click the twitter icon, enter your twitter username, and bam all done.  Honestly, at some point you'll probably want to use friendfeed more than twitter so feel free to add other accounts you want to bring in as well if you're feeling up to it.&lt;br /&gt;&lt;br /&gt;3. Now go to this &lt;a href="http://pipes.yahoo.com/pipes/pipe.info?_id=SksD_RE83hGY0gAmPxJ3AQ"&gt;yahoo pipe&lt;/a&gt; and put your username in the form then hit the button "Run Pipe" - after that is done right click the "Get as RSS" link and copy that link address.  &lt;br /&gt;&lt;br /&gt;4. Go back to friend feed and add a "Custom RSS/ATOM feed" service to your account using the RSS address you copied from Yahoo Pipes.&lt;br /&gt;&lt;br /&gt;5. &lt;del&gt;Now go to &lt;a href="http://friendfeed.com/settings/posting"&gt;http://friendfeed.com/settings/posting&lt;/a&gt; - You might have to authenticate your account so you can post to twitter from here.. Do that.  Then click the option "Post my friend feed entries to twitter by default" then pick the option "the services I've selected below" and then pick the one that looks like this: "Custom RSS/Atom (http://pi...)" then hit save settings.&lt;/del&gt;&lt;br /&gt;&lt;br /&gt;5. Go to twitterfeed.com and setup a feed based on the RSS url you got from pipes.  I setup my twitterfeed to poll every 30 minutes and to post up to 5 items per.. I don't retweet that often so it's probably overkill; but you can do whatever suites you.&lt;br /&gt;&lt;br /&gt;That's it.  Now, whenever you star an item it will be pulled into yahoo pipes, modified a touch to have the RT: @ and then sent to FF which will make sure it is the right length, add a small url to it so people can chat about it at FF, and then send it to twitter as a tweet by you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10753561-493674169981569401?l=cf-bill.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/InTheTrenches/~4/aLOS1uO_Cig" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://cf-bill.blogspot.com/feeds/493674169981569401/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=10753561&amp;postID=493674169981569401" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/493674169981569401?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/493674169981569401?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InTheTrenches/~3/aLOS1uO_Cig/how-to-use-twitters-star-to-auto.html" title="How to use Twitter's STAR to auto-retweet" /><author><name>Bill</name><uri>http://www.blogger.com/profile/07161835401958202911</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03423254071587092766" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://cf-bill.blogspot.com/2009/05/how-to-use-twitters-star-to-auto.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEENQ3o7eyp7ImA9WxJSFkk.&quot;"><id>tag:blogger.com,1999:blog-10753561.post-1929748935952758155</id><published>2009-05-06T17:44:00.002-04:00</published><updated>2009-05-06T17:51:32.403-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-06T17:51:32.403-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="continuous-integration" /><category scheme="http://www.blogger.com/atom/ns#" term="cruisecontrol" /><title>CruiseControl and 500 Server Errors</title><content type="html">Today, for the first time in a few months, I had to interact with my cruise control server again.  To be honest, I'm not sure what happened but it stopped working and I had to jump through some hoops to get it all working again.&lt;br /&gt;&lt;br /&gt;First I had to uninstall it and install it in a directory that didn't have any spaces in the name.  Before it was installed at c:\program files\cruisecontrol - that space was causing a weird JSP error that prevented compilation.&lt;br /&gt;&lt;br /&gt;Thus I installed it at c:\cruisecontrol.  Of course, I hadn't touched it in so long I had forgotten about my special ant tasks and I had to go find those again (uninstall actually deleted my entire old directory.&lt;br /&gt;&lt;br /&gt;However, during the reinstall there was a problem because the old service wasn't removed (maybe because I had it running as me?)  So I had to remove the service &lt;br /&gt;&lt;br /&gt;&lt;div class="xml" name="code"&gt;&lt;br /&gt;sc delete &amp;lt;SERVICE name&amp;gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Then I reinstalled again and it worked out OK.  Once that was resolved I had to get my projects all checked back out of SVN.  I had forgotten that CC comes with a connectfour project by default and so, after I replaced the config.xml with my customized one, I couldn't load the CC dashboard anymore - I had to delete the connectfour project directory and restart the CC service.&lt;br /&gt;&lt;br /&gt;Eventually I got it all up and running again and my projects built OK.  Now I just have to train 2 other teams on setting up their ColdFusion projects to run tests from an ANT script so that they can take full advantage of CC and MxUnit.  I'll be doing that tomorrow.&lt;br /&gt;&lt;br /&gt;Then I have to figure out how to get CC to build a .net app; if I can't hopefully I can install CC.net on the same server as CC without any issues.  I had hoped to use cc.rb but there are some issues with it on a windows server so that is out of the picture at the moment (due to our needs for building .net apps).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10753561-1929748935952758155?l=cf-bill.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/InTheTrenches/~4/sLxL-1un8KQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://cf-bill.blogspot.com/feeds/1929748935952758155/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=10753561&amp;postID=1929748935952758155" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/1929748935952758155?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/1929748935952758155?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InTheTrenches/~3/sLxL-1un8KQ/cruisecontrol-and-500-server-errors.html" title="CruiseControl and 500 Server Errors" /><author><name>Bill</name><uri>http://www.blogger.com/profile/07161835401958202911</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03423254071587092766" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://cf-bill.blogspot.com/2009/05/cruisecontrol-and-500-server-errors.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEMNSX8yeip7ImA9WxJSEE8.&quot;"><id>tag:blogger.com,1999:blog-10753561.post-648241989833993856</id><published>2009-04-29T13:30:00.003-04:00</published><updated>2009-04-29T13:34:58.192-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-29T13:34:58.192-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="passport" /><category scheme="http://www.blogger.com/atom/ns#" term="windows-xp" /><category scheme="http://www.blogger.com/atom/ns#" term="access-denied" /><category scheme="http://www.blogger.com/atom/ns#" term="windows-vista" /><title>Western Digital Passport: Access Denied on Second Computer</title><content type="html">My friend Mike recently bought a nice black Western Digital Passport.  It's a slick little portable harddrive the problem was it wasn't very portable. Sure he could carry it around, but if he plugged it into a computer other than his it was inaccessible; if you tried to open or explore it gave an "Access Denied" error.&lt;br /&gt;&lt;br /&gt;WTF?&lt;br /&gt;&lt;br /&gt;Well, it ended up being a fairly simple fix.  He updated the permissions on the drive to include the "Everyone" group.  For some reason when he first formatted it (NTFS) the only groups that had permission to the drive were his account, "SYSTEM", and "CREATOR OWNER" - but by adding "Everyone" it now works on other windows machines.&lt;br /&gt;&lt;br /&gt;So if you're having a problem getting your Passport to work on multiple computers, put it back on the original machine and make sure "Everyone" has "Full Control" access to the drive.&lt;br /&gt;&lt;br /&gt;Open "My Computer", right click and pick "Properties" in the context menu.  Then select the "Security" tab.  Once that is up, click the "Add" button, enter "Everyone" in the field provided, hit "Apply"  then "OK".. and voila' you'll be good to go.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10753561-648241989833993856?l=cf-bill.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/InTheTrenches/~4/CeIrqqqQeNY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://cf-bill.blogspot.com/feeds/648241989833993856/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=10753561&amp;postID=648241989833993856" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/648241989833993856?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/648241989833993856?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InTheTrenches/~3/CeIrqqqQeNY/western-digital-passport-access-denied.html" title="Western Digital Passport: Access Denied on Second Computer" /><author><name>Bill</name><uri>http://www.blogger.com/profile/07161835401958202911</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03423254071587092766" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://cf-bill.blogspot.com/2009/04/western-digital-passport-access-denied.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cHSX09cCp7ImA9WxJTFUQ.&quot;"><id>tag:blogger.com,1999:blog-10753561.post-742755830064771730</id><published>2009-04-24T12:23:00.005-04:00</published><updated>2009-04-24T12:37:18.368-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-24T12:37:18.368-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="coldfusion" /><category scheme="http://www.blogger.com/atom/ns#" term="duck-typing" /><category scheme="http://www.blogger.com/atom/ns#" term="scientific-notation" /><category scheme="http://www.blogger.com/atom/ns#" term="cf" /><title>When does "0E1234" EQ "00E050"  EQ "0"?</title><content type="html">You might be thinking never but, as it turns out, you'd be wrong.  In CF7 at least this equivalence and many other odd ones can (and will) occur.  It is, undoubtedly, kind of crazy and it definitely doesn't make a ton of sense but I'll give you some sample code so you can test it out for yourself.  Please try it on CF8 as well and let me know what happens.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="coldfusion"&gt;&lt;br /&gt;&amp;lt;cfparam name="url.idval" default="0" type="numeric" /&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;cfset q1 = QueryNew("id,name") /&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;cfset QueryAddRow(q1) /&amp;gt;&lt;br /&gt;&amp;lt;cfset QuerySetCell(q1,"id","0") /&amp;gt;&lt;br /&gt;&amp;lt;cfset QuerySetCell(q1,"name","") /&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;cfset QueryAddRow(q1) /&amp;gt;&lt;br /&gt;&amp;lt;cfset QuerySetCell(q1,"id","0E1234") /&amp;gt;&lt;br /&gt;&amp;lt;cfset QuerySetCell(q1,"name","0E1234") /&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;cfset QueryAddRow(q1) /&amp;gt;&lt;br /&gt;&amp;lt;cfset QuerySetCell(q1,"id","020302") /&amp;gt;&lt;br /&gt;&amp;lt;cfset QuerySetCell(q1,"name","Some Other Row") /&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;cfset QueryAddRow(q1) /&amp;gt;&lt;br /&gt;&amp;lt;cfset QuerySetCell(q1,"id","00E050") /&amp;gt;&lt;br /&gt;&amp;lt;cfset QuerySetCell(q1,"name","00E050") /&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;form name="" method="post" action="oe.cfm"&amp;gt;&lt;br /&gt;&amp;lt;select name="idval"&amp;gt; &lt;br /&gt; &amp;lt;cfoutput query="q1"&amp;gt;&lt;br /&gt;  &amp;lt;option value="#q1.id#" &amp;lt;cfif q1.id EQ url.idval&amp;gt;SELECTED&amp;lt;/cfif&amp;gt;&amp;gt;#q1.name#&amp;lt;/option&amp;gt;&lt;br /&gt; &amp;lt;/cfoutput&amp;gt;&lt;br /&gt;&amp;lt;/select&amp;gt;&lt;br /&gt;&amp;lt;input type="submit" name="btnGo" value="go" /&amp;gt;&lt;br /&gt;&amp;lt;/form&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;If you stick that in a cfml file called oe.cfm and load it you'll notice that all three options with the id "0", "0E1234", and "00E050" are marked as selected.  You might be thinking, WTF?&lt;br /&gt;&lt;br /&gt;Well, my theory is CF in its' typless glory is treating all of these strings as numbers and, because 0E (or 00E) is scientific notation it is basically treating them all as equivalent to zero (0).&lt;br /&gt;&lt;br /&gt;How do you get around this?  My simple solution:&lt;br /&gt;&lt;pre name="code" class="coldfusion"&gt;&lt;br /&gt;  &amp;lt;option value="#q1.id#" &amp;lt;cfif "_#q1.id#_" EQ "_#url.idval#_"&amp;gt;SELECTED&amp;lt;/cfif&amp;gt;&amp;gt;#q1.name#&amp;lt;/option&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;I wrapped them both in underscores for the purpose of measuring equivalence which forces CF to treat them as strings and voila the expected behavior now occurs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10753561-742755830064771730?l=cf-bill.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/InTheTrenches/~4/ZL4zwl4JBb4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://cf-bill.blogspot.com/feeds/742755830064771730/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=10753561&amp;postID=742755830064771730" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/742755830064771730?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/742755830064771730?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InTheTrenches/~3/ZL4zwl4JBb4/when-does-0e1234-eq-00e050-eq-0.html" title="When does &quot;0E1234&quot; EQ &quot;00E050&quot;  EQ &quot;0&quot;?" /><author><name>Bill</name><uri>http://www.blogger.com/profile/07161835401958202911</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03423254071587092766" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total><feedburner:origLink>http://cf-bill.blogspot.com/2009/04/when-does-0e1234-eq-00e050-eq-0.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4EQHs8cSp7ImA9WxVaEE4.&quot;"><id>tag:blogger.com,1999:blog-10753561.post-4648121097778088152</id><published>2009-04-06T13:13:00.004-04:00</published><updated>2009-04-06T13:28:21.579-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-06T13:28:21.579-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="herald-dispatch" /><category scheme="http://www.blogger.com/atom/ns#" term="calendar-aggregation" /><category scheme="http://www.blogger.com/atom/ns#" term="ics" /><category scheme="http://www.blogger.com/atom/ns#" term="newspaper" /><title>If You Can't Beat Em...</title><content type="html">No, I am not going to say join 'em.  I live in Huntington, WV - it's a small city on the western most edge of WV with a population of around 40,000 people.  It's a great little place with an abundance of things to do the trouble is it has always been hard to discover what all those things are.&lt;br /&gt;&lt;br /&gt;Fortunately, things are changing for the better in that regard.  The net is making things much easier and, thankfully, our local newspaper, The Herald Dispatch, is helping everyone by offering up an online event calendar.  They have a full time person on staff whose job is almost entirely consumed with keeping the calendar up-to-date.  It's fantastic.  Sadly, however, it isn't published as an ICS feed; instead the only interface to the system is via their web widget.  The staff at the paper are happy to share the widget with websites that want to display the calendar but honestly I just didn't think it was enough.&lt;br /&gt;&lt;br /&gt;I really want an ICS feed to be available for that calendar.  It has 6000+ events stored in it for the upcoming months and they are each categorized and sub-categorized.  By providing a feed for all of these events that can be broken down by category the citizens of Huntington and the surrounding area can keep track of events in whatever fashion they want.  If they want to subscribe with Outlook or Google calendar they could and it wouldn't hurt traffic flow via events to the newspapers website at all - instead I think it would have the net effect of increasing traffic.&lt;br /&gt;&lt;br /&gt;Fortunately, the folks at the paper agree.  In fact they have been great about the idea and instantly bought into it!  However, they didn't have anyone available to create the script that would generate the ICS feed from their ad-hoc database of events so I volunteered to do it for them.  Amazingly, even though this is an old company, they nimbly accepted my offer and put me in touch with the right guy.  That day (last Thursday) I had the schema description, a dump of two months worth of events, and a basic overview of their current calendar's architecture so I could get my work to fold in seamlessly.  Last Friday I delivered the first iteration of the script!&lt;br /&gt;&lt;br /&gt;Honestly, the script was a piece of cake to write thanks to having a pretty &lt;a href="http://www.ietf.org/rfc/rfc2445.txt"&gt;clearly defined standard&lt;/a&gt; to write against and the invaluable tool that is the online &lt;a href="http://severinghaus.org/projects/icv/"&gt;ICS validator&lt;/a&gt; plus a few nudges in the right direction from Wikipedia.  Wikipedia has &lt;a href="http://en.wikipedia.org/wiki/File:ICalendarSpecification.png"&gt;a chart that shows various elements and how they apply to different types of data in the ICS&lt;/a&gt;.  I used that chart to help navigate the standard which is very lengthy.&lt;br /&gt;&lt;br /&gt;I'm not sure when it will go live but I'm super happy the paper was so forward thinking and open to my suggestion and my offer to help.  &lt;a href="http://www.herald-dispatch.com/"&gt;The Herald Dispatch&lt;/a&gt; does a great job of being focused on the local community, its news, and needs and I think this is another example that highlights their commitment to the community.  I'm thankful that the small team I've been working with has been so helpful and open to my suggestions!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10753561-4648121097778088152?l=cf-bill.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/InTheTrenches/~4/iiLOfXuRmZs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://cf-bill.blogspot.com/feeds/4648121097778088152/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=10753561&amp;postID=4648121097778088152" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/4648121097778088152?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/4648121097778088152?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InTheTrenches/~3/iiLOfXuRmZs/if-you-cant-beat-em.html" title="If You Can't Beat Em..." /><author><name>Bill</name><uri>http://www.blogger.com/profile/07161835401958202911</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03423254071587092766" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://cf-bill.blogspot.com/2009/04/if-you-cant-beat-em.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUMSX46fCp7ImA9WxVbEEU.&quot;"><id>tag:blogger.com,1999:blog-10753561.post-5625915503591601145</id><published>2009-03-26T11:19:00.005-04:00</published><updated>2009-03-26T11:44:48.014-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-26T11:44:48.014-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="classifieds" /><title>Job Description Specificity</title><content type="html">Today on twitter I was directed to a &lt;a href="http://www.careerbuilder.com/JobSeeker/Jobs/JobDetails.aspx?SiteID=twitter_NY_it&amp;Job_DID=J3F1XR60GR0TGWZ75NB&amp;cbRecursionCnt=3&amp;cbsid=abe43820c48d417781c72e0c8c9c8334-291381275-VC-4"&gt;Job Description&lt;/a&gt; while being asked if there was anyone could possibly meet all the "requirements" that were listed:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;At least 3 years of experience in MBS Expert and MBS processing. BA in C.S. or related disciplines. Proven leadership skills in technology, project management, and communication. Proven track record in design, development, debug/trouble shooting of complex software systems and logic. At least 5 years in the relevant technologies: C, Motif, SQL, Sybase, Oracle, Java, J2EE, browser-based GUI technologies such as JSF and AJAX, Solaris, Linux, GCC. CVS, Make, Ant. Shell scripting. Must be a team player, have excellent organization, planning and communication skills, excellent in time and issues prioritization and management. Must se self-managed and results oriented.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Now, the way my company does business a few of us here actually come pretty close to meeting these requirements with the exception of the "MBS Expert" and the "Motif" items.  I've never used either of those.  Plus I am opting for the AJAX option over the JSF for "browser-based GUI technologies."  This seems like a pretty ambitious list of traits they are looking for someone to have 3 or 5 years of experience in.&lt;br /&gt;&lt;br /&gt;I also see that this job is in the financial services and securities industries.  As someone who has had the opportunity to work with the financial services industry I have to imagine they are also looking for someone who already understands the business language; and trust me it is an entirely different language than is used in pretty much any other industry.  This additional unspoken requirement really limits the pool of candidates even more.&lt;br /&gt;&lt;br /&gt;It seems to me that the people this company wants to hire are already working for someone and they aren't out actively looking for employment.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I wonder, do ads like this really work? Do they help companies actually find someone or do they make them so specific that they don't even get a good pool of candidates applying.  I mean, is it really necessary to have 5 years of Motif experience or can you just pick it up as you go since you are strong in everything else.  Or what if you've just been a backend developer - would you really need 5 years of AJAX experience to be a strong, positive contributor to the projects they are hiring for?  I doubt it.&lt;br /&gt;&lt;br /&gt;Finally, it seems to me that most jobs people want aren't advertised this way and most candidates that companies want aren't found this way.  Instead word of mouth seems to be the trick which brings back the old adage; "It's not what you know but who you know."   Sure, you need to your stuff but I doubt, for many jobs, that you need such a specific skill set to be a good candidate.  &lt;br /&gt;&lt;br /&gt;If we can find someone with 5 years of proven development experience where they are creating good tests and code in any language then they will probably be a good candidate for a project.  Even when that project is in a language the candidate hasn't used.  Just like everyone else we look for smart people who can get things done.  If they have those traits they will learn what they need to learn in order to get the job done right, on time, and on budget.&lt;br /&gt;&lt;br /&gt;I think the company that put out this ad would be better served having a more generic set of skills they are looking for and then narrowing down the field via interviews and then finally paying a few candidates to work with them for a week or so to see what they are really capable of.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10753561-5625915503591601145?l=cf-bill.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/InTheTrenches/~4/hb4zNWUQWFM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://cf-bill.blogspot.com/feeds/5625915503591601145/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=10753561&amp;postID=5625915503591601145" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/5625915503591601145?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/5625915503591601145?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InTheTrenches/~3/hb4zNWUQWFM/job-description-specificity.html" title="Job Description Specificity" /><author><name>Bill</name><uri>http://www.blogger.com/profile/07161835401958202911</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03423254071587092766" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total><feedburner:origLink>http://cf-bill.blogspot.com/2009/03/job-description-specificity.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0EMRXs9eyp7ImA9WxVUGU0.&quot;"><id>tag:blogger.com,1999:blog-10753561.post-8509761844589544285</id><published>2009-03-24T09:19:00.003-04:00</published><updated>2009-03-24T09:34:44.563-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-24T09:34:44.563-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="email" /><category scheme="http://www.blogger.com/atom/ns#" term="gmail" /><title>Top Reason to Not Outsource your Corporate Email to Gmail</title><content type="html">I just read this article &lt;a href="http://www.informationweek.com/blog/main/archives/2009/03/bad_rap_against.html;jsessionid=EZFRGIRLF2BUIQSNDLRSKHSCJUNN2JVN?print=true"&gt;The Top Ten Reasons to Outsource Your Enterprise Email to Gmail Now&lt;/a&gt; and I thought it merited a response.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Lack of Support&lt;br /&gt;The company I work for considered migrating to Gmail but when we contacted their support team in advance to clear up some concerns we had we never (ever) received a response.  Thus we were struck with a new concern; what if something went wrong - would we be able to get a support response?&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;I don't feel like there is any other reason to counter the eleven great reasons cited in the linked article.  They are fairly compelling but without a sense that the support staff will be responsive when a problem arises none of the other things matter.  Email is far too important to every company to just hope that support will turn up when you need it.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;----&lt;br /&gt;Disclaimer: I love Gmail and I use it for all of my personal needs.  My personal email (and the email for my non-profit groups just isn't as critical as our business email) and thus I don't mind trusting Gmail to handle all of my personal email.  The company I work for, however, has other priorities and the lack of support is a critical failure of the Gmail platform.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10753561-8509761844589544285?l=cf-bill.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/InTheTrenches/~4/r6W1UqhpIn8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://cf-bill.blogspot.com/feeds/8509761844589544285/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=10753561&amp;postID=8509761844589544285" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/8509761844589544285?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/8509761844589544285?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InTheTrenches/~3/r6W1UqhpIn8/top-reason-to-not-outsource-your.html" title="Top Reason to Not Outsource your Corporate Email to Gmail" /><author><name>Bill</name><uri>http://www.blogger.com/profile/07161835401958202911</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03423254071587092766" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">5</thr:total><feedburner:origLink>http://cf-bill.blogspot.com/2009/03/top-reason-to-not-outsource-your.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE4AQHc4fCp7ImA9WxVUEkw.&quot;"><id>tag:blogger.com,1999:blog-10753561.post-1145795769566868685</id><published>2009-03-16T10:12:00.003-04:00</published><updated>2009-03-16T10:15:41.934-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-16T10:15:41.934-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="google-voice" /><category scheme="http://www.blogger.com/atom/ns#" term="whine" /><category scheme="http://www.blogger.com/atom/ns#" term="grandcentral" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><title>OT: I want my voice</title><content type="html">I have been an active user of Grand Central for the past couple of years (not super active, but active) and I've loved it.  Last Tuesday Google said they were going to let Grand Central users upgrade to Google Voice.  Later they said they were gradually rolling it out and when your account was ready you'd see a message on your accounts inbox letting you know.&lt;br /&gt;&lt;br /&gt;Instead I've been faced with this message since last Tuesday afternoon:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Your account is not yet ready to be upgraded. Please check back shortly.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Well, dammit, it's almost been a week; exactly how do you define "shortly?"  I know, I'm just whining; sorry, but every once in a while I need to vent and I've chosen this forum for it this time around.&lt;br /&gt;&lt;br /&gt;I want my Google Voice so, come on Google, give it to me!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10753561-1145795769566868685?l=cf-bill.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/InTheTrenches/~4/cl0O2xv1c5Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://cf-bill.blogspot.com/feeds/1145795769566868685/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=10753561&amp;postID=1145795769566868685" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/1145795769566868685?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/1145795769566868685?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InTheTrenches/~3/cl0O2xv1c5Q/ot-i-want-my-voice.html" title="OT: I want my voice" /><author><name>Bill</name><uri>http://www.blogger.com/profile/07161835401958202911</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03423254071587092766" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://cf-bill.blogspot.com/2009/03/ot-i-want-my-voice.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0MNQn4zfSp7ImA9WxVVGEo.&quot;"><id>tag:blogger.com,1999:blog-10753561.post-9041910433511874135</id><published>2009-03-12T11:11:00.002-04:00</published><updated>2009-03-12T11:24:53.085-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-12T11:24:53.085-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="calendar-aggregation" /><category scheme="http://www.blogger.com/atom/ns#" term="standards" /><category scheme="http://www.blogger.com/atom/ns#" term="ics" /><category scheme="http://www.blogger.com/atom/ns#" term="calendar" /><category scheme="http://www.blogger.com/atom/ns#" term="curation" /><title>Calendar Curation is Hard</title><content type="html">I'm trying hard to find calendars pertaining to my hometown that are actually syndicated as ICS feeds.  It just isn't happening very well.  I have 3 so far and I am responsible for them.  I realize I live in a small town that isn't all that high-tech but, man, it's frustrating.&lt;br /&gt;&lt;br /&gt;Everyone seems to have an event calendar but almost none of them has one that is currently producing a ICS feed; instead they are just html tables, pdf files, or word documents.  None of those, obviously, are very conducive to being consumed.&lt;br /&gt;&lt;br /&gt;I want to provide an outreach to these people to get them up and running with a more standardized way of publishing even information but, truth be told, I'm not entirely sure how to do sell the idea.&lt;br /&gt;&lt;br /&gt;I think, what I need, is a way to identify an easy method for these people to create their event data in the first place, and then provide them with a simple way have that information automatically appear on their website.  Google Calendar does it ok but, honestly, their widgets don't necessarily fit into every website very well; though, perhaps the agenda view would work nicely.&lt;br /&gt;&lt;br /&gt;Does anyone know if the Microsoft office online option has an agenda view type widget as well?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10753561-9041910433511874135?l=cf-bill.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/InTheTrenches/~4/r_I1FVyX6Bs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://cf-bill.blogspot.com/feeds/9041910433511874135/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=10753561&amp;postID=9041910433511874135" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/9041910433511874135?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/9041910433511874135?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InTheTrenches/~3/r_I1FVyX6Bs/calendar-curation-is-hard.html" title="Calendar Curation is Hard" /><author><name>Bill</name><uri>http://www.blogger.com/profile/07161835401958202911</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03423254071587092766" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://cf-bill.blogspot.com/2009/03/calendar-curation-is-hard.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0IMQn47eyp7ImA9WxVVE0k.&quot;"><id>tag:blogger.com,1999:blog-10753561.post-6970514294186925771</id><published>2009-03-06T09:13:00.001-05:00</published><updated>2009-03-06T09:26:23.003-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-06T09:26:23.003-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="sql" /><category scheme="http://www.blogger.com/atom/ns#" term="plsql" /><category scheme="http://www.blogger.com/atom/ns#" term="eclipse" /><category scheme="http://www.blogger.com/atom/ns#" term="extended-ascii" /><category scheme="http://www.blogger.com/atom/ns#" term="ascii" /><category scheme="http://www.blogger.com/atom/ns#" term="html" /><category scheme="http://www.blogger.com/atom/ns#" term="oracle" /><title>Oracle and Extended ASCII</title><content type="html">Yesterday I ran across a problem where I needed to compare the resultant string from a query on a Sybase database and an Oracle database.  The Oracle result involved pulling back a single row that was delimted with an unusual character, &lt;a href="http://www.cdrummond.qc.ca/cegep/informat/Professeurs/Alain/files/ascii.htm"&gt;Extended Ascii Char 0001&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Due to the code page of my viewing tool the character appeared as Extended ASCII character 0218 but, when I tried to paste the character into a confluence page for documenatation purposes it didn't appear (since it is actually the non-printable character 0001)  likewise it wouldn't appear in Eclipse where a co-worker needed it.&lt;br /&gt;&lt;br /&gt;Why would we need the character? Well because in the Sybase database to get the equivalent string we need to concatenate about 8 columns. Initially we were just going to concatenate them with this odd character as the delimiter (we didn't realize it was ASCII 0001 yet).  However, once things started to resolve into being more complicated we decided, instead that we would use the Oracle &lt;a href="http://www.techonthenet.com/oracle/functions/translate.php"&gt;TRANSLATE&lt;/a&gt; function to replace the special character with another, safer, printable delimiter - the pipe | .&lt;br /&gt;&lt;br /&gt;This reduced the number of times I needed to be able to print the weird character in either eclipse or confluence to once however the problem still persisted that the odd character wouldn't show up (obviously).  Thus I had to use the &lt;a href="http://www.techonthenet.com/oracle/functions/ascii.php"&gt;ASCII&lt;/a&gt; function in Oracle to figure out the character value of each character in a specific record returned.  At this point I had isolated the character as 0001.  However I wasn't entirely sure how to tell the TRANSLATE function to look for unicode 0001.  Fortunately there is &lt;a href="http://www.orafaq.com/forum/t/76872/0/"&gt;a function for that&lt;/a&gt; as well - &lt;a href="http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/functions204.htm"&gt;UNISTR&lt;/a&gt;('\0001\)&lt;br /&gt;&lt;br /&gt;Thus, my final query had a line it it like so:&lt;br /&gt;&lt;pre name="code" class="sql"&gt;&lt;br /&gt;SELECT  TRANSLATE(accountInfo,UNISTR('\0001\'),'|')&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10753561-6970514294186925771?l=cf-bill.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/InTheTrenches/~4/g07LHmjALH8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://cf-bill.blogspot.com/feeds/6970514294186925771/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=10753561&amp;postID=6970514294186925771" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/6970514294186925771?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/6970514294186925771?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InTheTrenches/~3/g07LHmjALH8/oracle-and-extended-ascii.html" title="Oracle and Extended ASCII" /><author><name>Bill</name><uri>http://www.blogger.com/profile/07161835401958202911</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03423254071587092766" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://cf-bill.blogspot.com/2009/03/oracle-and-extended-ascii.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEEFSH46fyp7ImA9WxVVEk0.&quot;"><id>tag:blogger.com,1999:blog-10753561.post-5379821423559401628</id><published>2009-03-04T16:44:00.004-05:00</published><updated>2009-03-04T17:43:39.017-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-04T17:43:39.017-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="calendar-aggregation" /><category scheme="http://www.blogger.com/atom/ns#" term="open-standards" /><category scheme="http://www.blogger.com/atom/ns#" term="aggregation" /><category scheme="http://www.blogger.com/atom/ns#" term="ical" /><category scheme="http://www.blogger.com/atom/ns#" term="ics" /><category scheme="http://www.blogger.com/atom/ns#" term="calendar" /><title>Calendar Aggregation Woes</title><content type="html">I am working on a few different personal projects and one is a community enrichment site.  One of the features I really want to add to the site is a robust event calendar.  I'm currently using one that is FULL of great information but it isn't very open.  For example, there aren't any obvious ical feeds or ics attachments to any of the events in order to add them to an end users calendar easily.  Really, it's a shame.&lt;br /&gt;&lt;br /&gt;I follow along with Jon Udell's blog (&lt;a href="http://blog.jonudell.net/2009/02/27/a-demonstration-calendar-for-ann-arbor-michigan/"&gt;Jon is very interested in and, active with, developing calendar aggregation services&lt;/a&gt;).  Jon has done some cool stuff but, more importantly to me, he has opened my eyes to the importance of the open data format in calendars.  &lt;br /&gt;&lt;br /&gt;The event calendar I am using on my projects site has upwards of 6000 events in it at a time so obviously I would need a smart "limited time frame" feed of the events.  Heck, they already categorize the events into 6 main categories so really, it seems to me, it should be six separate calendar feeds that can be aggregated however the consumer wishes to pull them in.&lt;br /&gt;&lt;br /&gt;I understand that the newspaper that provides the calendar service uses the calendar as a means to bring traffic to their site and I think that's great - however once you are there to see the specific details of an event it is imperative that an end user be able to add that event, easily, to their own personal calendar of choice this way they can manage their notifications and reminders about the event.&lt;br /&gt;&lt;br /&gt;What I don't know how to do is to convince the creators of my communities calendars, specifically the newspapers which is the most data rich, to support open standards.  I live in a small, fairly non-technical city, so the newspapers calendar is the de facto source for event information.  Each organization in town doesn't maintain their own calendar, they just fax or email event schedules in plain text format to the paper for inclusion into the "community calendar" - granted, it is aggregation of its own it just isn't open enough for my tastes.&lt;br /&gt;&lt;br /&gt;If you know of any other folks who are actively working on the subject of calendar aggregation I'd love to know about them too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10753561-5379821423559401628?l=cf-bill.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/InTheTrenches/~4/b3SQmb9Oo_4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://cf-bill.blogspot.com/feeds/5379821423559401628/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=10753561&amp;postID=5379821423559401628" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/5379821423559401628?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/5379821423559401628?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InTheTrenches/~3/b3SQmb9Oo_4/calendar-aggregation-woes.html" title="Calendar Aggregation Woes" /><author><name>Bill</name><uri>http://www.blogger.com/profile/07161835401958202911</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03423254071587092766" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://cf-bill.blogspot.com/2009/03/calendar-aggregation-woes.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C08BRXg9fSp7ImA9WxVWFEQ.&quot;"><id>tag:blogger.com,1999:blog-10753561.post-655826853727585569</id><published>2009-02-24T10:13:00.003-05:00</published><updated>2009-02-24T11:10:54.665-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-24T11:10:54.665-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="blackberry" /><category scheme="http://www.blogger.com/atom/ns#" term="iphone" /><title>IPhone or Bold - My Decision</title><content type="html">As some of you may know I have &lt;a href="http://cf-bill.blogspot.com/2009/01/iphone-or-blackberry-3g-help-me-decide.html"&gt;been debating&lt;/a&gt; on whether to get an IPhone 3G or a Blackberry Bold.  Since I already had experience with a BlackBerry (a very positive one in general) I decided to give the &lt;a href="http://cf-bill.blogspot.com/2009/02/one-month-iphone-trial.html"&gt;IPhone a trial run&lt;/a&gt; for a month to see if I liked it better than my BlackBerry.&lt;br /&gt;&lt;br /&gt;Honestly, I think I'd be happy with either phone.  The BlackBerry experience was always great except for the fragility of the trackball; but the email, gmail, and google talk stuff all kicked ass on the BlackBerry and managed to meet most of my needs.  I didn't like the music player on the BlackBerry so I always had to carry an IPod as well if I wanted to listen to music. I also never cared for any browser on the BlackBerry as they were too limited in what I could do while interacting with various webpages including this one (I couldn't moderate comments for example).&lt;br /&gt;&lt;br /&gt;My employer uses Lotus Notes for email and we have a BB Enterprise server so, obviously, the BlackBerry was better for work email and calendering.  However, not a lot better for email.  I don't really need instantaneous email notifications, a few minutes delay here or there is OK.  The inability to use an IPhone with the companies calendering system is a bit of a pain but, really, I don't have many meetings or events I need to schedule so not having them on my phone isn't too big of a deal.  It's a knock against the iPhone but a pretty small one.&lt;br /&gt;&lt;br /&gt;The BlackBerry supports copy-and-paste which, quite frankly, is great.  I don't use it often but when I do it's very handy.  I'm not sure why the IPhone doesn't have this feature even if I can't imagine a good way to implement it with the multi-touch interface elements that already exist.  However, since I use copy and paste rarely it is still a rather small knock on the IPhone based on my usage.&lt;br /&gt;&lt;br /&gt;The BlackBerry has a fantastic implementation of voice dialing.  My wife can't live without it because she is in the car all day travelling between clients. I, on the other hand, don't even own a hands free set so voice dialing has no bearing on my life.  Luckilly for the IPhone I never grew an attachment to that feature but if you like voice dialing you may want to avoid the IPhone.&lt;br /&gt;&lt;br /&gt;Gmail on the BlackBerry is great - I love the native app which lets me see things in a conversation threaded view just like on the website.  I also like that it integrates with the notification system on the phone so when a new mail shows up the light flashes and a little chime goes off.  The Google Chat app is just as slick and also integrates nicely with the message system on the BlackBerry.&lt;br /&gt;&lt;br /&gt;On the IPhone the Gmail integration just isn't as nice.  Using the normal mail reader is OK but I really do like conversation view and I wish the IPhone supported it.  Sure I could just use the web interface but then I wouldn't get notifications on my phone.  Email is a major part of my phone experience so I pretty much have to use the IPhone interface.  At least the formatting of messages in that interface is great and the large screen lets me read more of the message without scrolling - I just wish there was a native Gmail app.&lt;br /&gt;&lt;br /&gt;There is no Google Talk integration - you have to go to the web interface.  That pretty much sucks because now I can't get an IM unless I have the browser tab opened to that page.  That's basically worthless.  Fortunately the SMS app on the IPhone is pretty slick and "IM" like so it's not a totally lost cause.  If nothing else someone can email or SMS me and tell me to get on chat.  I have unlimited texting so its not bad for me but I guess it sucks for anyone who wants to contact me that way who doesn't have unlimited texting.&lt;br /&gt;&lt;br /&gt;The IPhone is basically an IPod touch with a phone thus the Music interface on the phone is pretty good.  I don't like it as much as the IPod classic interface but it is still better than any other music player interface I've experienced on a phone.  Plus, with my home button set to double click launch the music player I can pause/play music without unlocking the phone so the integration works out pretty nicely based on my usage patterns.  I had to screw around with ITunes for a bit on my computer to get it to stop trying to touch the phone but once I did that I was able to use Media Monkey to manage music on the phone. Now my phone is loaded with great songs I can listen to wherever I am and I have a good interface for playing them which rocks.&lt;br /&gt;&lt;br /&gt;The last.fm program for the IPhone won't scrobble but if you jailbreak you can install a scrobbling app that works pretty well.  I can't say that is reason enough to jailbreak but if scrobbling is important to you that's the only way.&lt;br /&gt;&lt;br /&gt;The library of applications you can install on the IPhone is pretty extensive but, most of them seems useless to me.  However I did find a few I really like.  I really only use three with any regularity: twitteriffic, mint.com, and flickit.  In fact, before flickit I hardly used my flickr account but now I have a camera and a good interface for uploading to it so I've begun to take advantage of my account.  The free twitteriffic client is decent and makes tweeting on the go pretty easy.  I use it more for keeping up with others tweets than posting my own.  Finally, the mint.com app gives me a pretty nice look into my finances.  I really like the mint website anyway and this app ties in nicely; I love the ability to see my current financial health instantly.  None of these apps exist for the blackberry.  Granted there are twitter apps for the Blackberry but I never used them.  If there is a flickr app I haven't encountered it either.&lt;br /&gt;&lt;br /&gt;Google Calendar and contact sync on the IPhone, for me, works better than it did on the BlackBerry.  In this case it is because my phone won't sync with my work calendar oddly enough this is taking a weakness and turning it into a strength.  The Google Sync feature automatically deletes events that are over two weeks old.  When this happened on my blackberry it sent a deletion message to the BB Enterprise Server which resulted in the organizer of the event getting a "decline" message for past events.  It was pretty annoying to them and thus I couldn't use the sync tool.  Now I can and it is great having my full contacts and my wifes work calendar on my phone.  Now I can email anyone and I can meet up with my wife for lunch when I see she is in town.&lt;br /&gt;&lt;br /&gt;The absolute best part of the IPhone is the browser.  I can interact with almost any webpage without a problem.  I can now post to my blog on the run, I can manage my google groups on the go, I can do so much more on the web than I could before. It's really great.  I didn't think the browser would make such a difference but it really has changed how I interact with my phone.  I don't use it all the time but when I do it's great to have such a feature rich browser.&lt;br /&gt;&lt;br /&gt;The final consideration is battery life.  The IPhone does have a shorter battery life than my blackberry did (when it was new) but, of course, the IPhone is doing a lot more.  The BlackBerry had a nice feature where you could schedule it to turn off completely each night and turn back on in the morning; you can't do that on the IPhone so I have to manually turn off the radios and wi-fi at night; it's not a big deal but it is an inconvenience.  I get about 2 full days of normal use with the phone.  My normal use is maybe 2-3 calls in a day (all shorter than 5 minutes), checking email regularly (cylces every 15 minutes), responding to about 10 emails a day on it (the rest I respond to on my computer or I just delete without response).  I also browse the web, use the Google Reader interface quite a bit (over 30 minutes a day probably), and I get a few SMS messages a day.  I also take a random photo, upload it to flickr, and check my finances on the mint app.  &lt;br /&gt;&lt;br /&gt;While I would prefer a longer battery life (wouldn't we all) the IPhone's battery is sufficient for my needs.  There was one weird day where my battery went crazy and it just started depleting really, really fast.  In fact that night I went to bed with 68% battery life, turned off all the radios, woke up 7 hours later, and the battery was completely dead.  It was a fluke day but it does raise some concern.  I hope it doesn't happen again.&lt;br /&gt;&lt;br /&gt;With all this said and done I'm going to keep the IPhone.  I don't really feel any pain in switching and I get a much, much better browser in the deal.  Overall I'm very happy with the IPhone and am glad I decided to give it a try.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10753561-655826853727585569?l=cf-bill.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/InTheTrenches/~4/UTubsoKMaIE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://cf-bill.blogspot.com/feeds/655826853727585569/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=10753561&amp;postID=655826853727585569" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/655826853727585569?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/655826853727585569?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InTheTrenches/~3/UTubsoKMaIE/iphone-or-bold-my-decision.html" title="IPhone or Bold - My Decision" /><author><name>Bill</name><uri>http://www.blogger.com/profile/07161835401958202911</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03423254071587092766" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://cf-bill.blogspot.com/2009/02/iphone-or-bold-my-decision.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUFR306fSp7ImA9WxVWEEg.&quot;"><id>tag:blogger.com,1999:blog-10753561.post-7429696468106481703</id><published>2009-02-19T10:40:00.001-05:00</published><updated>2009-02-19T10:43:36.315-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-19T10:43:36.315-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="tip" /><category scheme="http://www.blogger.com/atom/ns#" term="windows" /><category scheme="http://www.blogger.com/atom/ns#" term="calculator" /><title>Commas in Windows Calculator</title><content type="html">So, color me ignorant, but one thing I've always disliked about windows calculator is when you have a large number, say 3 trillion, there are no commas to help you group the digits and easily identify the value for what it is.&lt;br /&gt;&lt;br /&gt;Well, you can have it display commas.  Go to the "View" menu and select "Digit Grouping" and BAM! you have commas.&lt;br /&gt;&lt;br /&gt;Simple and easy.  I don't know for how many years that has existed but I just found out about it today.  I don't think I've ever looked at any of the menu's on the calculator so now I'll have to explore a bit more.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10753561-7429696468106481703?l=cf-bill.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/InTheTrenches/~4/BKEQ7Aw81eA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://cf-bill.blogspot.com/feeds/7429696468106481703/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=10753561&amp;postID=7429696468106481703" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/7429696468106481703?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/7429696468106481703?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InTheTrenches/~3/BKEQ7Aw81eA/commas-in-windows-calculator.html" title="Commas in Windows Calculator" /><author><name>Bill</name><uri>http://www.blogger.com/profile/07161835401958202911</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03423254071587092766" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://cf-bill.blogspot.com/2009/02/commas-in-windows-calculator.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0UDRHY9fyp7ImA9WxVXE0U.&quot;"><id>tag:blogger.com,1999:blog-10753561.post-2724696607940452827</id><published>2009-02-11T14:35:00.002-05:00</published><updated>2009-02-11T15:47:55.867-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-11T15:47:55.867-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="tortoisesvn" /><category scheme="http://www.blogger.com/atom/ns#" term="bug" /><category scheme="http://www.blogger.com/atom/ns#" term="windows" /><category scheme="http://www.blogger.com/atom/ns#" term="svn" /><category scheme="http://www.blogger.com/atom/ns#" term="issues" /><category scheme="http://www.blogger.com/atom/ns#" term="bug-tracking" /><title>TortoiseSVN : Require an Issue Number</title><content type="html">We are a windows shop and we use SVN as our version control system, so, most of us use TortoiseSVN as our primary interface to the SVN Server.  Being agile and all we try to create issues for everything and to help enforce attributing code to an issue we, sometimes, use a nice built in feature in SVN that provides a limited Bug Tracking System integration.&lt;br /&gt;&lt;br /&gt;We actually rolled our own bug tracking solution years ago that serves our needs fairly well so the references you might see to it in my examples that will follow should be replaced with whatever your systems conventions are.&lt;br /&gt;&lt;br /&gt;Enabling Issue System Integration:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Go to the root directory of your checked out project.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Right click on the directory and select "properties" from the context menu&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Select the Subversion tab in the dialog window that appears&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Click on the "properties" button&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Add the following properties to your project:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;bugtraq:append - true&lt;/li&gt;&lt;br /&gt;&lt;li&gt;bugtraq:label - "Bug" or "Issue" or "Jira" or whatever..&lt;/li&gt;&lt;br /&gt;&lt;li&gt;bugtraq:message - "Bug: %BUGID%"  replace bug with whatever you used for the label&lt;/li&gt;&lt;br /&gt;&lt;li&gt;bugtraq:number - true : obviously only select true if you insist your issue numbers are numeric.. for instance a JIRA is alphanumeric so this should be false if you use Jira&lt;/li&gt;&lt;br /&gt;&lt;li&gt;bugtraq:url - http://my.issue.server/showIssue/%BUGID%  - this is whatever url you need to load a specific bug, where %BUGID% will be replaced with the value entered by the submitter&lt;/li&gt;&lt;br /&gt;&lt;li&gt;bugtraq:warnifnoissue - true : this will alert the user if they try to commit changes without providing an issue number.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;li&gt;Click "OK" svn properties dialog&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Click "OK" on the folder properties dialog&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;There, you're set up.  Now you just need to commit the change to your directory to subversion.  Then, everyone who updates from SVN will have these same settings and everyone on the project will have the same level of integration.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10753561-2724696607940452827?l=cf-bill.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/InTheTrenches/~4/51I-MiUzk3k" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://cf-bill.blogspot.com/feeds/2724696607940452827/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=10753561&amp;postID=2724696607940452827" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/2724696607940452827?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/2724696607940452827?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InTheTrenches/~3/51I-MiUzk3k/tortoisesvn-require-issue-number.html" title="TortoiseSVN : Require an Issue Number" /><author><name>Bill</name><uri>http://www.blogger.com/profile/07161835401958202911</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03423254071587092766" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://cf-bill.blogspot.com/2009/02/tortoisesvn-require-issue-number.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A08HQnk-fCp7ImA9WxVXEk0.&quot;"><id>tag:blogger.com,1999:blog-10753561.post-7348454015122156908</id><published>2009-02-09T15:01:00.002-05:00</published><updated>2009-02-09T15:03:53.754-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-09T15:03:53.754-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="distance" /><category scheme="http://www.blogger.com/atom/ns#" term="longitude" /><category scheme="http://www.blogger.com/atom/ns#" term="latitude" /><category scheme="http://www.blogger.com/atom/ns#" term="computation" /><category scheme="http://www.blogger.com/atom/ns#" term="cardinal-points" /><category scheme="http://www.blogger.com/atom/ns#" term="math" /><title>Distance Between Two Latitude + LongitudePoints - PHP</title><content type="html">I once had a project where the client wanted customers to be able to search for the nearest vendor to the customers zip code - this project was in PHP but the algorithim contained here can be translated to other languages pretty easily (Note, this returns the value in miles):&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="php"&gt;&lt;br /&gt;function computeDistance($lat1,$lon1,$lat2,$lon2){&lt;br /&gt;&lt;br /&gt; $lat1 =  deg2rad($lat1);&lt;br /&gt; $lon1 =  deg2rad($lon1);&lt;br /&gt; $lat2 =  deg2rad($lat2);&lt;br /&gt; $lon2 =  deg2rad($lon2);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// Find the deltas&lt;br /&gt;      $delta_lat = $lat2 - $lat1;&lt;br /&gt;      $delta_lon = $lon2 - $lon1;&lt;br /&gt;&lt;br /&gt;// radius of earth in miles&lt;br /&gt; $r = 3963.1; &lt;br /&gt;&lt;br /&gt;      // Find the Great Circle distance&lt;br /&gt;      $distance = pow(sin($delta_lat/2.0),2) + cos($lat1) * cos($lat2) * pow(sin($delta_lon/2.0),2);&lt;br /&gt;      $distance = $r * 2 * atan2(sqrt($distance),sqrt(1-$distance)); &lt;br /&gt;&lt;br /&gt; return $distance;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10753561-7348454015122156908?l=cf-bill.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/InTheTrenches/~4/MVN8kmO4BCw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://cf-bill.blogspot.com/feeds/7348454015122156908/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=10753561&amp;postID=7348454015122156908" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/7348454015122156908?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/7348454015122156908?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InTheTrenches/~3/MVN8kmO4BCw/distance-between-two-latitude.html" title="Distance Between Two Latitude + LongitudePoints - PHP" /><author><name>Bill</name><uri>http://www.blogger.com/profile/07161835401958202911</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03423254071587092766" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://cf-bill.blogspot.com/2009/02/distance-between-two-latitude.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkEAR3Y8cCp7ImA9WxVXEk0.&quot;"><id>tag:blogger.com,1999:blog-10753561.post-2698034956899872916</id><published>2009-02-09T14:02:00.004-05:00</published><updated>2009-02-09T14:44:06.878-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-09T14:44:06.878-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="webhooks" /><category scheme="http://www.blogger.com/atom/ns#" term="webservices" /><title>Webhooks Have Me Hooked</title><content type="html">Today, of all days, I have been inundated by discussions concerning webhooks.  First I saw &lt;a href="http://blog.jonudell.net/2009/02/09/a-conversation-with-andy-singleton-about-distributed-software-development/#"&gt;this post over at Jon Udell's blog&lt;/a&gt; where Andy Singleton mentions how great webhooks are.  Then, a little later, I saw a &lt;a href="http://timothyfitz.wordpress.com/2009/02/09/what-webhooks-are-and-why-you-should-care/"&gt;post by Timothy Fitz&lt;/a&gt; about webhooks linked on reddit.com&lt;br /&gt;&lt;br /&gt;It seemed clear that I should investigate and I'm glad I did.  Webhooks are, really, a no-brainer.  As one person described them they are "triggers for the web" - an analogy that only makes sense if you're familiar with databases but apt nonetheless.&lt;br /&gt;&lt;br /&gt;So, you've made it this far but don't feel like reading the linked articles? No problem, I'll tell you what webhooks are.&lt;br /&gt;&lt;br /&gt;Let's say you have an application, oh - i dunno, like this blog.  On the blog you do a few different things but the most common action is to post a new blog entry.  Blogs have actually long supported the idea of a webhook but you may not have realized a "ping" was a webhook.  Basically, what happens is that when you publish a new post a separate http call is made to the aggregator site.   A ping is super simple - it just calls the url with a special parameter and the receiving server then knows your blog, specifically, was updated.&lt;br /&gt;&lt;br /&gt;However, any RESTful service could be the target so that when you do an action on your application an http call to the REST service, along with some properly formatted XML, could be made and bam some entirely new process might be set off.&lt;br /&gt;&lt;br /&gt;Let's say you run a small theater and you use something like MS Outlook to keep track of your calendar of events.  A webhook could be present that sends that same event off to your online calendar at the same moment for instant synchronization and publication to your theater's website.&lt;br /&gt;&lt;br /&gt;Tim has a more mundane but probably more useful example:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;I imagine a future where twitter feed updates instantly call a webhook. I’ve pointed that webhook at a service that does bayesian filtering. The filtering has been set up to determine if the tweet looks time-sensitive “Anyone interested in getting dinner tonight?” vs time-insensitive “Webhooks are cool.” Time sensitive posts call another webhook, this time set to sms my phone. Note that nowhere in this future am I writing any code. I don’t have to.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Webhooks have been around for a while but it seems likely that they will become far more ubiquitous in the future.&lt;br /&gt;&lt;br /&gt;Here are some links for further reading:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://webhooks.pbwiki.com/"&gt;Webhooks.pbwiki.com&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://blog.webhooks.org/"&gt;Webhooks.org&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://groups.google.com/group/webhooks"&gt;Webhooks Google Group&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://notes.4suite.org/Bright_Content:Design:Web_Triggers"&gt;Uche Ogbuji on Web Triggers&lt;/a&gt; written in 2006 but basically the same idea.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10753561-2698034956899872916?l=cf-bill.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/InTheTrenches/~4/w1k3oirNT68" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://cf-bill.blogspot.com/feeds/2698034956899872916/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=10753561&amp;postID=2698034956899872916" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/2698034956899872916?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/2698034956899872916?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InTheTrenches/~3/w1k3oirNT68/webhooks-have-me-hooked.html" title="Webhooks Have Me Hooked" /><author><name>Bill</name><uri>http://www.blogger.com/profile/07161835401958202911</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03423254071587092766" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://cf-bill.blogspot.com/2009/02/webhooks-have-me-hooked.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkACQ3o_cSp7ImA9WxVQFUU.&quot;"><id>tag:blogger.com,1999:blog-10753561.post-3071099314046253937</id><published>2009-02-02T09:02:00.003-05:00</published><updated>2009-02-02T09:26:02.449-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-02T09:26:02.449-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="bold" /><category scheme="http://www.blogger.com/atom/ns#" term="iphone" /><category scheme="http://www.blogger.com/atom/ns#" term="blackberry bold" /><category scheme="http://www.blogger.com/atom/ns#" term="pearl" /><title>One Month IPhone Trial</title><content type="html">After much deliberation and debate I have decided to give the IPhone a one month trial.  I really want a phone that does all of the following very well:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Plays Music&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Email with Lotus Notes&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Those are really my only major requirements.  The Bold does Email very well with Lotus Notes because we have a Blackberry Enterprise Server (BES).  The IPhone does music very well.  Because I am paying for the phone I wanted one that will do both equally well.  I've had a Pearl and have loved how it handled email; both Notes email via the BES and Gmail via the Blackberry Gmail App.  However, I hated the music interface and ended up never using it for music so I had to carry both the phone and an IPod which is really more than I wanted in one pocket.&lt;br /&gt;&lt;br /&gt;Thus I am giving the IPhone a trial.  If my email experience is substantially degraded I will revert to a Blackberry and get the Bold.  However, if the email experience is vastly better on the IPhone than the music experience is on the Pearl I will stick with the IPhone.&lt;br /&gt;&lt;br /&gt;I picked up the IPhone last friday and so far I am fairly happy with it.  I had my Notes account setup for IMAP access and am fetching both Notes and Gmail via the normal IPhone interface.  So far it is OK but I haven't really been getting much work email yet.  Honestly it isn't as seamless as the Blackberry was (for either email) but it hasn't been bad at all either.  &lt;br /&gt;&lt;br /&gt;Obviously I like the music interface on the IPhone plus I can use MediaMonkey to sync my music so I am not forced to use ITunes (though I do have to have it installed).&lt;br /&gt;&lt;br /&gt;So far I do have a couple of small quibbles with the IPhone and one surprising place where it dominates the Blackberry experience for me.  First my quibbles.  Once in a while the keyboard is sort of unresponsive and my keypresses don't register on the screen right away; then, a second or two later, the keyboard catches up and everything I typed is rendered.  It happens fairly rarely but it's still annoying.  Likewise I'm still not as accurate with the keyboard as I would like to be and I tend to accidentally hit the button to the right of my target.  That's probably my problem more so than the keyboards - but it is an adjustment I have to make in my perception due to the lack of key depth.&lt;br /&gt;&lt;br /&gt;Another minor gripe I have is that I can't just tell the phone to use one of my songs as a ringtone - I could on my pearl and I loved my ringtone on it.  I also miss my Gmail interface -  I love the threaded conversation view in Gmail but, in order to get that on the IPhone I need to keep safari open and that isn't really cool.  The BB Gmail app is fairly "push" like and runs all the time in the background (so long as you don't leave an email open).  I also miss the Google Talk application (again, something you have to do in Safari)&lt;br /&gt;&lt;br /&gt;However, there are a couple things I really prefer in the IPhone.  The first is the size of the screen.  When I read an email now I can see a lot more of the body at one time.  That is pretty handy.  I also found a &lt;a href="http://nuevasync.com"&gt;free service&lt;/a&gt; for syncing my google calendar and contacts with the IPhone's calendar and contacts called NuevaSync.  Google had created a calendar sync program for the BB but it had a really annoying problem of sending out "rejection" emails 2 weeks after any event passed and Google automatically removed them from the Calendar.  Plus, the calendar on the IPhone is much easier to view and navigate (again thanks to the large screen).  Next is Safari.  I have bumped into a couple of websites that didn't work in it but I am able to do much more in this browser than I could ever imagine being able to do in the Blackberry Browser (or even Opera for the Pearl).  Finally are the free Apps in the Apple App Store.  I have grabbed a few already; tumble, wordpress, twitterific, and mint.  If the last.fm app scrobbled I would get it too but, alas, it doesn't.  While I don't have Google Talk handy the way SMS texts are handled/displayed on the Iphone is pretty nifty - though you can tell it is done that way to increase your use of SMS and thus (if you don't have unlimited texting) could cause problems (I have unlimited texting thanks to my brothers addiction to it).&lt;br /&gt;&lt;br /&gt;As you can see it isn't easy to find a device that is perfect for me but I am hoping to at least find which one of these two is the closest to what I want.  Oddly enough the one thing I don't really care about is call quality.  I hardly use the phone for talking.  At the end of the month I'll let you know what I decide to do.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10753561-3071099314046253937?l=cf-bill.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/InTheTrenches/~4/KTf-bf44A5U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://cf-bill.blogspot.com/feeds/3071099314046253937/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=10753561&amp;postID=3071099314046253937" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/3071099314046253937?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/3071099314046253937?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InTheTrenches/~3/KTf-bf44A5U/one-month-iphone-trial.html" title="One Month IPhone Trial" /><author><name>Bill</name><uri>http://www.blogger.com/profile/07161835401958202911</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03423254071587092766" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://cf-bill.blogspot.com/2009/02/one-month-iphone-trial.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0YNQHs8eCp7ImA9WxVQEkk.&quot;"><id>tag:blogger.com,1999:blog-10753561.post-1837244967115980671</id><published>2009-01-29T10:55:00.004-05:00</published><updated>2009-01-29T11:06:31.570-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-29T11:06:31.570-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="bold" /><category scheme="http://www.blogger.com/atom/ns#" term="iphone" /><category scheme="http://www.blogger.com/atom/ns#" term="blackberry bold" /><title>Iphone 3G or Blackberry Bold - Help Me Decide</title><content type="html">Ok Interwebs I need your help.  I need a new cell phone and have it narrowed down to the IPhone 3G and the Blackberry Bold.  But I don't know which one to get.  Here are my needs/thoughts please share your opinion with me!  Thanks.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I am buying this phone, my employer isn't so I want a phone that will not only do well for my work but also will be good for more casual use.  My company uses Lotus Notes (ugh) for email and we have a Blackberry Enterprise Server for pushing email to our phones.  I love to listen to music but rarely carry my iPod becuase my cellphone is already in my one keyless pocket.  I have a Blackberry Pearl right now and it's music interface sucks.  &lt;br /&gt;&lt;br /&gt;Honestly, I'm torn because I think the IPhone will be better for my personal desires while, obviously, the Bold will be better for my work needs.  It's a 50/50 proposition.  I'm honestly leaning toward the IPhone due to the expandability of the Apps and the built in IPod.  I'm hesitant to use the IPhone because I dislike ITunes and I'm afraid the battery won't last considering all the email checking and replying I do on my phone currently.&lt;br /&gt;&lt;br /&gt;So folks - help me decide.  Which phone should I get and why?  Thanks!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10753561-1837244967115980671?l=cf-bill.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/InTheTrenches/~4/QCGK3IzuS7M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://cf-bill.blogspot.com/feeds/1837244967115980671/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=10753561&amp;postID=1837244967115980671" title="20 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/1837244967115980671?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/1837244967115980671?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InTheTrenches/~3/QCGK3IzuS7M/iphone-or-blackberry-3g-help-me-decide.html" title="Iphone 3G or Blackberry Bold - Help Me Decide" /><author><name>Bill</name><uri>http://www.blogger.com/profile/07161835401958202911</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03423254071587092766" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">20</thr:total><feedburner:origLink>http://cf-bill.blogspot.com/2009/01/iphone-or-blackberry-3g-help-me-decide.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEEMQng9eyp7ImA9WxVRF08.&quot;"><id>tag:blogger.com,1999:blog-10753561.post-3687351995066444247</id><published>2009-01-23T10:48:00.002-05:00</published><updated>2009-01-23T11:04:43.663-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-23T11:04:43.663-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="virtual-machine" /><category scheme="http://www.blogger.com/atom/ns#" term="cruisecontrol.rb" /><category scheme="http://www.blogger.com/atom/ns#" term="vm" /><category scheme="http://www.blogger.com/atom/ns#" term="virtualization" /><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu" /><title>My Virtual Machine Hell</title><content type="html">Normally when I first hear about a new technology I jump right on it.  I am always installing new software to try things.  Yet, for some reason I have never installed a virtual server technology.  I've never done anything with any virtual machines.  Heck, in &lt;a href="http://ma.gnolia.com/people/finalcut/tags/virtualization%20vmware%20development%20server"&gt;ma.gnolia.com&lt;/a&gt; I have had the link to the free version of VMWare server bookmarked for almost 3 years but until this week I had never even tried to install it.  What's up with that?&lt;br /&gt;&lt;br /&gt;As I mentioned in my prior blog posting however I have decided to dive into the land of virtual machines.  My first effort was to download and install &lt;a href="http://www.vmware.com/download/server/"&gt;VMWare Server 2.0&lt;/a&gt;.  It is a pretty sizable download and it runs via a web-interface and is built upon tomcat.  It is kind of a beast.  I installed it and got it running but it was painfully slow for me.  Then, when I tried to connect to my virtual machine from within Chrome I was told to download and install a plugin but the whole server seemed to crash.  Also, the normal instructions for a VMWare image didn't work (clicking on the .vmx file) Instead I had to copy the image files into a directory under the "virtual machines" directory created by VMWare Server.&lt;br /&gt;&lt;br /&gt;After the crash I decided to uninstall VMWare Server 2.0 and try something else.  I had thought about checking out VirtualBox when I had installed Ubuntu on it's own partition so I decided to see if a version existed for windows and sure enough one did.  So I installed it and then installed Ubuntu inside a new VM.  Well, I tried to.  It took me about 3 or 4 efforts to get the install to actually work.  And when I say installs that means re-installing VirtualBox as well.  Heck, VirtualBox itself just seemd to hang on installing a few times.  Finally I managed to get Ubuntu 8.1 installed but any interaction with it was painfully slow and laggy.  I also couldn't work with it in anything greater than 800x600 resolution (though I didn't get to try the guest user tools).  I tried to update the ubuntu install but it took over 13 hours to not even complete the update download (on a strong connection) so I finally aborted and decided to try something different.&lt;br /&gt;&lt;br /&gt;A co-worker had a copy of &lt;a href="http://www.vmware.com/download/server/"&gt;VMWare Server 1.8&lt;/a&gt; handy that I decided to install.  It isn't webbased and a few other co-workers have had some good luck with it.  It installed without a problem and the &lt;a href="http://chrysaor.info/?page=ubuntu"&gt;ubuntu image&lt;/a&gt; I already had worked just fine.  Now I'm finally able to start working with Ubuntu inside my VM so I can begin to dig into CruiseControl.rb - I will detail how I get that all setup in a later post.  Stay Tuned.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10753561-3687351995066444247?l=cf-bill.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/InTheTrenches/~4/Hy-0rUvxp-Y" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://cf-bill.blogspot.com/feeds/3687351995066444247/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=10753561&amp;postID=3687351995066444247" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/3687351995066444247?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/3687351995066444247?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InTheTrenches/~3/Hy-0rUvxp-Y/my-virtual-machine-hell.html" title="My Virtual Machine Hell" /><author><name>Bill</name><uri>http://www.blogger.com/profile/07161835401958202911</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03423254071587092766" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://cf-bill.blogspot.com/2009/01/my-virtual-machine-hell.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUACR34zeyp7ImA9WxVRFEs.&quot;"><id>tag:blogger.com,1999:blog-10753561.post-9168144583382063936</id><published>2009-01-20T11:02:00.003-05:00</published><updated>2009-01-20T11:09:26.083-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-20T11:09:26.083-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="continuous-integration" /><category scheme="http://www.blogger.com/atom/ns#" term="virtual-machine" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="cruisecontrol.rb" /><category scheme="http://www.blogger.com/atom/ns#" term="cruisecontrol" /><category scheme="http://www.blogger.com/atom/ns#" term="pivotal-tracker" /><title>CruiseControl.rb</title><content type="html">I mentioned in the past that I was going to try to setup CruiseControl.rb on my CI server.  However, there seems to be some kind of conflict in system settings between CC.rb and vanilla CC (the java version).  Thus, I wasn't really able to proceed since I needed the java version to keep running because some active projects are being built with it.&lt;br /&gt;&lt;br /&gt;I also tried it on my laptop but that ended up causing me some problems because of my current ruby needs; thus I was kind of stuck.  However, I think I am going to do a couple things to change things up and make it more practical for me to run CC.rb.&lt;br /&gt;&lt;br /&gt;First I'm going to get rid of my ubuntu install.  I never boot into it really and I need the harddrive space back for step 2.  The second step is installing ubuntu in a virtual machine.  I'm not sure why I didn't do it that way in the first place.  This will let me continue to work in windows (where all of my project work is) while also working on getting CC.rb setup.  I think this will give me a great opportunity to experiment and will also give me more time in linux mucking around.&lt;br /&gt;&lt;br /&gt;I will probably take the easy way out of installing CC.rb and that is by using a handy tool/script pack called &lt;a href="http://github.com/thewoolleyman/cinabox/tree/master"&gt;cinabox&lt;/a&gt; that was created by one of the authors of a cool tool I like to use called &lt;a href="http://www.pivotaltracker.com/"&gt;Pivotal Tracker&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I'll probably post about my VM setup experience as well as how well cinabox works out for me.  So stay tuned.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10753561-9168144583382063936?l=cf-bill.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/InTheTrenches/~4/CgDCzX4vbYA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://cf-bill.blogspot.com/feeds/9168144583382063936/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=10753561&amp;postID=9168144583382063936" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/9168144583382063936?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/9168144583382063936?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InTheTrenches/~3/CgDCzX4vbYA/cruisecontrolrb.html" title="CruiseControl.rb" /><author><name>Bill</name><uri>http://www.blogger.com/profile/07161835401958202911</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03423254071587092766" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://cf-bill.blogspot.com/2009/01/cruisecontrolrb.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUQASH88cSp7ImA9WxVRFEs.&quot;"><id>tag:blogger.com,1999:blog-10753561.post-2828050070152230547</id><published>2009-01-20T11:01:00.001-05:00</published><updated>2009-01-20T11:02:29.179-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-20T11:02:29.179-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="meta" /><title>Site Feed</title><content type="html">I just updated the sites feed to be published by feedburner instead of the normal blogspot feed.  This shouldn't have any impact on my few (if any) subscribers but I thought I should give a heads up.&lt;br /&gt;&lt;br /&gt;I'm also including, at least as a temporary trial, google adsense in the new feed.  If it seems like a pain in the ass or is too distracting, or if my few (if any) readers complain about it then I'll remove it.&lt;br /&gt;&lt;br /&gt;Sorry for this totally meta post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10753561-2828050070152230547?l=cf-bill.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/InTheTrenches/~4/JjKvsUGqpn8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://cf-bill.blogspot.com/feeds/2828050070152230547/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=10753561&amp;postID=2828050070152230547" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/2828050070152230547?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/2828050070152230547?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InTheTrenches/~3/JjKvsUGqpn8/site-feed.html" title="Site Feed" /><author><name>Bill</name><uri>http://www.blogger.com/profile/07161835401958202911</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03423254071587092766" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://cf-bill.blogspot.com/2009/01/site-feed.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak8ERHY7eyp7ImA9WxVSEks.&quot;"><id>tag:blogger.com,1999:blog-10753561.post-7081377580621555976</id><published>2009-01-06T13:56:00.004-05:00</published><updated>2009-01-06T14:06:45.803-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-06T14:06:45.803-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="coldfusion" /><category scheme="http://www.blogger.com/atom/ns#" term="cfc" /><category scheme="http://www.blogger.com/atom/ns#" term="unit testing" /><category scheme="http://www.blogger.com/atom/ns#" term="mxunit" /><title>Unit Testing Coldfusion (CFC) Private Methods</title><content type="html">To be honest I've not really seen much written detailing good (or even standard) ways of unit testing private methods without making their scope less restrictive than private.  Thus I'll detail the way a co-worker a technique a co-worker and I came up with that seems like it will work pretty well.  If you see any potential problems with this approach please just let me know in the comments.&lt;br /&gt;&lt;br /&gt;The approach is fairly simple.  We create a helper class that extends and "wraps" our class to be tested.  This helper class then has simple methods in it that expose the private methods via a wrapper.  So let's say we had a class, MoneyLender, with the private method of computeInterest().  Let's ignore whether that method should be private or not for arguments sake.  We would create a MoneyLenderTestHelper class with a method in it called computerInterestWrapper() which actually just returns the private computeInterest method.&lt;br /&gt;&lt;br /&gt;Right off the bat I have one potential concern and that is will the other private things (methods, member variables, etc) still be exposed to the private method that is being returned? I haven't tested this out yet so I don't know.&lt;br /&gt;&lt;br /&gt;Anyway, my test would then instantiate the MoneyLenderTestHelper class, and call the computeInterestWrapper() method to get a reference to the private method to be tested.  Then I could execute the method and perform the test.  If the test needed to analyze the state of any private member variables I could create a helper method in MoneyLenderTestHelper that would inspect the private variable.&lt;br /&gt;&lt;br /&gt;The main reason for returning a reference to the method in the helper class, instead of calling the helper method there, was so that I don't have to maintain the method signature in both the class being tested and in the helper class.  My test obviously has to know the signature but overall this seems more maintainable.&lt;br /&gt;&lt;br /&gt;What do you think?  I'll post more as I muck around with the approach and let you know how well it all works.  We've already implemented the idea on a few test cases but the private methods don't actually touch any private member variables; however, in the cases we have tried it with the technique has worked out well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10753561-7081377580621555976?l=cf-bill.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/InTheTrenches/~4/1Zr38f_Zq5w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://cf-bill.blogspot.com/feeds/7081377580621555976/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=10753561&amp;postID=7081377580621555976" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/7081377580621555976?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/7081377580621555976?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InTheTrenches/~3/1Zr38f_Zq5w/unit-testing-coldfusion-cfc-private.html" title="Unit Testing Coldfusion (CFC) Private Methods" /><author><name>Bill</name><uri>http://www.blogger.com/profile/07161835401958202911</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03423254071587092766" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">6</thr:total><feedburner:origLink>http://cf-bill.blogspot.com/2009/01/unit-testing-coldfusion-cfc-private.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UBRn05eip7ImA9WxRaFU8.&quot;"><id>tag:blogger.com,1999:blog-10753561.post-54342233228271554</id><published>2008-12-17T10:34:00.002-05:00</published><updated>2008-12-17T10:54:17.322-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-12-17T10:54:17.322-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="continuous-integration" /><category scheme="http://www.blogger.com/atom/ns#" term="cruisecontrol" /><category scheme="http://www.blogger.com/atom/ns#" term="ant" /><category scheme="http://www.blogger.com/atom/ns#" term="selenium" /><category scheme="http://www.blogger.com/atom/ns#" term="mxunit" /><title>CruiseControl and Selenium with Coldfusion</title><content type="html">If you've been paying attention you'll know I've been getting a decent continuous build process in place for a CF project.  So far I've been using mxunit, cruise control, ant, and subversion to get things going.  The project uses ModelGlue and ColdSpring 1.2.  &lt;br /&gt;&lt;br /&gt;My small team (2 of us) have been doing a good job of getting quality unit testing code coverage but we didn't have any automated user interface testing in place until a couple of weeks ago when I finally found some time to look into &lt;a href="http://seleniumhq.org/"&gt;Selenium&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The first thing we did was install the Firefox plugin for Selenium.  This seemed like the quickest and easiest way for us to start defining some tests and it works like a charm.  We haven't had to manually write any tests yet as the plugin is working pretty well.  However, the plugin's utility ends as soon as writing tests is done.  In order to run the tests automatically as part of our build process we had to do a few things.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Selenium Core&lt;/h3&gt;&lt;br /&gt;We had to install Selenium Core on the testing webserver.  This was pretty straight forward and shouldn't require any special instructions from me.  Once you have it installed just remember the path to the "tests" directory because that will be required when we try to run the tests remotely.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Selenium Remote Control&lt;/h3&gt;&lt;br /&gt;Selenium Remote control comes with an Ant task.  The most recent version won't work with FF 3.  Once you have the newest Selenium RC you'll need to put it's jar file in your ant lib directory on your build server (makes life easier).  Then you'll just need to add a few new lines to your build.xml to make it available to you.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="xml"&gt;&lt;br /&gt; &amp;lt;taskdef resource="selenium-ant.properties"&amp;gt;&lt;br /&gt;  &amp;lt;classpath&amp;gt;&lt;br /&gt;   &amp;lt;pathelement location="selenium-server.jar"/&amp;gt;&lt;br /&gt;  &amp;lt;/classpath&amp;gt;&lt;br /&gt; &amp;lt;/taskdef&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Tying it Together&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;All of my UI tests are defined in a subdirectory of my project.  I've broken that subdirectory down into additional directories to help organize them based on the portion of the site the tests relate to.  However, when the tests are run they have to end up in the Selenium Core "tests" directory.  Thus I have defined an ant task to clean out the test directory and then in each of my ant tasks for running a directory of UI tests I first copy the tests over to the tests directory.  Here is an example:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="xml"&gt;&lt;br /&gt; &amp;lt;target name="uspsAuditUITests" depends="deleteUITests, createUITestLogginDirectory"&amp;gt;&lt;br /&gt;  &amp;lt;copy todir="${uitests.testdir}"&amp;gt;&lt;br /&gt;    &amp;lt;fileset dir="${uitests.srcdir}usps/auditTests/" /&amp;gt;&lt;br /&gt;  &amp;lt;/copy&amp;gt;&lt;br /&gt;  &lt;br /&gt;  &amp;lt;mxunittask server="${host}" verbose="true" outputdir="${output.dir}" errorproperty="mxunit.error" failureproperty="mxunit.fail"&amp;gt;&lt;br /&gt;   &amp;lt;testcase name="lb2.uitests.usps.auditTests.setup" packageName="lb2.uitests.usps.auditTests.setup" /&amp;gt;&lt;br /&gt;  &amp;lt;/mxunittask&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;selenese &lt;br /&gt;   suite="${uitests.srcdir}usps/auditTests/uspsTestSuite.html"&lt;br /&gt;   browser="*firefox"&lt;br /&gt;   results="${uitests.resultsdir}uiTestResults.html"&lt;br /&gt;   multiWindow="false"&lt;br /&gt;   timeoutInSeconds="900"&lt;br /&gt;   startURL="http://${uitests.server}" /&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;mxunittask server="${host}" verbose="true" outputdir="${output.dir}" errorproperty="mxunit.error" failureproperty="mxunit.fail"&amp;gt;&lt;br /&gt;   &amp;lt;testcase name="lb2.uitests.usps.auditTests.tearDown" packageName="lb2.uitests.usps.auditTests.setup.tearDown" /&amp;gt;&lt;br /&gt;  &amp;lt;/mxunittask&amp;gt;&lt;br /&gt;  &lt;br /&gt;  &amp;lt;antcall target="deleteUITests" /&amp;gt;&lt;br /&gt;  &amp;lt;antcall target="displayUITestResults" /&amp;gt;&lt;br /&gt; &amp;lt;/target&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;You might notice a bit of an mxunit kludge in there.  Basically, what I'm doing is creating a simple mxunit test to be run simply to clean up behind the UI test.  Some of the UI tests actually create data in the site and the mxunit teardown seemed like a good way to undo those changes when all was done.  A nice bonus is if something goes wrong with the cleanup my test will fail and I'll be notified.&lt;br /&gt;&lt;br /&gt;That's it.  Overall it was pretty darn simple.  There are some caveats to how I'm doing things though and the foremost is that I'm only testing against FF 2.x automatically.  I should be testing against many browsers but for the time being this is what I have and it is better than nothing.&lt;br /&gt;&lt;br /&gt;My tests only work in Firefox 2 due to the fact that we are using the Selenium IDE I guess.  Some of them might work in other browsers but so far we have definitely run into some problems executing the tests in IE.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Acknowledgements&lt;/h3&gt;&lt;br /&gt;Thanks to &lt;a href="http://www.henke.ws/post.cfm/Coldfusion-with-Selenium-ant-script"&gt;this post&lt;/a&gt; by Mike Henke I was able to get this all running fairly quickly with only a few small changes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10753561-54342233228271554?l=cf-bill.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/InTheTrenches/~4/PatV_4OVCd0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://cf-bill.blogspot.com/feeds/54342233228271554/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=10753561&amp;postID=54342233228271554" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/54342233228271554?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/54342233228271554?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InTheTrenches/~3/PatV_4OVCd0/cruisecontrol-and-selenium-with.html" title="CruiseControl and Selenium with Coldfusion" /><author><name>Bill</name><uri>http://www.blogger.com/profile/07161835401958202911</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03423254071587092766" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://cf-bill.blogspot.com/2008/12/cruisecontrol-and-selenium-with.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUUBQXkyfSp7ImA9WxRaE0U.&quot;"><id>tag:blogger.com,1999:blog-10753561.post-6819481697895206574</id><published>2008-12-04T15:09:00.005-05:00</published><updated>2008-12-15T18:20:50.795-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-12-15T18:20:50.795-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="coldfusion" /><category scheme="http://www.blogger.com/atom/ns#" term="model-glue" /><category scheme="http://www.blogger.com/atom/ns#" term="mxunit" /><title>MxUnit + Model Glue : Make Sure ModelGlue.xml Doesn't have Duplicate Events</title><content type="html">This is a simple test I threw together to make sure our fairly complex ModelGlue.xml config file doesn't end up getting two events named with the same name.  While this shouldn't happen it did and so I needed a test to make sure it didn't happen again.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="html"&gt;&lt;br /&gt; &amp;lt;cffunction name="testConfigFileForDuplicateEventNodeNames" access="public" returntype="void"&amp;gt;&lt;br /&gt;  &amp;lt;cfset var local = structNew() /&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;cfset local.filepath = ExpandPath('\lb2\config\ModelGlue.xml') /&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;cfset local.xml = XmlParse(local.filePath) /&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;cfset local.events = local.xml.modelglue["event-handlers"].XmlChildren /&amp;gt;&lt;br /&gt;  &amp;lt;cfset local.usedKeys = structnew() /&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;cfloop from="1" to="#ArrayLen(local.events)#" index="local.i"&amp;gt;&lt;br /&gt;   &amp;lt;cfset local.node = local.events[local.i].XmlAttributes.name /&amp;gt;&lt;br /&gt;   &amp;lt;cfif StructKeyExists(local.usedKeys, local.node)&amp;gt;&lt;br /&gt;    &amp;lt;cfset fail("the node " &amp; local.node &amp; " is defined more than once in ModelGlue.xml") /&amp;gt;&lt;br /&gt;   &amp;lt;/cfif&amp;gt;&lt;br /&gt;   &amp;lt;cfset local.usedKeys["#local.node#"] = "" /&amp;gt;&lt;br /&gt;  &amp;lt;/cfloop&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;/cffunction&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This is obviously an incredibly simple test and it doesn't collate problems, it just fails on the first one. Nor will it tell you where in your ModelGlue.xml file to find the problem; but it works for a simple peace of mind test.  Hope it helps someone else!&lt;br /&gt;&lt;br /&gt;Finally I mention mxUnit but obviously you can easily update this to work with the unit test framework of your choice.  I just happen to choose mxUnit.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10753561-6819481697895206574?l=cf-bill.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/InTheTrenches/~4/kCaO-kdxPcA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://cf-bill.blogspot.com/feeds/6819481697895206574/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=10753561&amp;postID=6819481697895206574" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/6819481697895206574?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/6819481697895206574?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InTheTrenches/~3/kCaO-kdxPcA/mxunit-model-glue-make-sure.html" title="MxUnit + Model Glue : Make Sure ModelGlue.xml Doesn't have Duplicate Events" /><author><name>Bill</name><uri>http://www.blogger.com/profile/07161835401958202911</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03423254071587092766" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://cf-bill.blogspot.com/2008/12/mxunit-model-glue-make-sure.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QNRXs9eip7ImA9WxRUFkk.&quot;"><id>tag:blogger.com,1999:blog-10753561.post-7811243988595907024</id><published>2008-11-25T14:46:00.005-05:00</published><updated>2008-11-25T16:43:14.562-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-25T16:43:14.562-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="sql" /><category scheme="http://www.blogger.com/atom/ns#" term="null" /><category scheme="http://www.blogger.com/atom/ns#" term="gotcha" /><title>SQL Gotcha:  Beware the NULL</title><content type="html">Today I ran into a little bit of SQL that, on first glance, didn't make a bunch of sense.  Before I show you the SQL I'll give you a basic idea of the two tables being queried:&lt;br /&gt;&lt;div style="border: 1px solid black; width:250px;"&gt;&lt;br /&gt;&lt;h3 style="border-bottom: 1px solid black;"&gt;AREA&lt;/h3&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;areaid | int NOT NULL&lt;br /&gt;areaname | varchar2(100) NOT NULL&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="border: 1px solid black; width:350px;"&gt;&lt;br /&gt;&lt;h3 style="border-bottom: 1px solid black;"&gt;FACILITY&lt;/h3&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;facilityid | int NOT NULL&lt;br /&gt;facilityname | varchar2(100)  NOT NULL&lt;br /&gt;areaid | int NULL&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;There is actually a bit more to it but these columns are the important ones.  The query that had been written was trying to find all areas that had no facilities within them:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="sql"&gt;&lt;br /&gt;SELECT ar.* FROM area ar WHERE ar.areaid NOT IN (SELECT f.areaid FROM facility f)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;That query returned no rows at all.  Meanwhile the following query returned one row:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="sql"&gt;&lt;br /&gt;SELECT ar.* FROM area ar WHERE NOT EXISTS (SELECT f.areaid FROM facility f.areaid = ar.areaid)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Honestly, I've given you a big hint to figuring this one out already since I titled this thing Beware the Null and I showed you which columns could be NULL and which couldn't.  But here is the problem.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Any SQL comparision that involves a NULL will evaluate to FALSE&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;That means all of the following examples would return no rows:&lt;br /&gt;&lt;pre name="code" class="sql"&gt;&lt;br /&gt;  SELECT * FROM area WHERE areaid NOT IN (1,2,NULL);&lt;br /&gt;&lt;br /&gt;  SELECT * FROM area WHERE areaid IN (1,2,NULL);&lt;br /&gt;&lt;br /&gt;  SELECT 1 as myRow FROM dual WHERE 1=null;&lt;br /&gt;&lt;br /&gt;  SELECT 1 as myRow FROM dual WHERE 1 != null;&lt;br /&gt;&lt;br /&gt;  SELECT 1 as myRow FROM dual WHERE null = null;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;All of those return no rows because any comparison operator used with a null evaluates to false (IN, NOT IN, =, !=, etc).  &lt;br /&gt;&lt;br /&gt;So, how do I fix the NOT IN query to work the way I expected it to?&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="sql"&gt;&lt;br /&gt;SELECT ar.* FROM area ar WHERE ar.areaid NOT IN (SELECT f.areaid FROM facility f WHERE f.areaid IS NOT NULL)&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10753561-7811243988595907024?l=cf-bill.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/InTheTrenches/~4/E4_T1JppgPE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://cf-bill.blogspot.com/feeds/7811243988595907024/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=10753561&amp;postID=7811243988595907024" title="7 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/7811243988595907024?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/7811243988595907024?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InTheTrenches/~3/E4_T1JppgPE/sql-gotcha-beware-null.html" title="SQL Gotcha:  Beware the NULL" /><author><name>Bill</name><uri>http://www.blogger.com/profile/07161835401958202911</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03423254071587092766" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">7</thr:total><feedburner:origLink>http://cf-bill.blogspot.com/2008/11/sql-gotcha-beware-null.html</feedburner:origLink></entry></feed>
