<?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;DEcDRX09eCp7ImA9WxNbEEg.&quot;"><id>tag:blogger.com,1999:blog-10753561</id><updated>2009-11-12T15:01:14.360-05: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="hub" href="http://pubsubhubbub.appspot.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>286</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" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry gd:etag="W/&quot;D04ESHo7fip7ImA9WxNbEEg.&quot;"><id>tag:blogger.com,1999:blog-10753561.post-5437498286241770102</id><published>2009-11-11T15:50:00.006-05:00</published><updated>2009-11-12T14:58:29.406-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-12T14:58:29.406-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="logging" /><category scheme="http://www.blogger.com/atom/ns#" term="debugging" /><category scheme="http://www.blogger.com/atom/ns#" term="console" /><title>Javascript Console - Missing in IE?</title><content type="html">Ok so lets say your hacking away at your favorite web app using Firefox or Chrome and your dropping some "conole.log()" calls around to help you debug.  Then you try the site in IE and it doesn't work.  You look at the javascript error and you see that "console" is undefined.&lt;br /&gt;&lt;br /&gt;You don't really want to have to remember to change your console.log() calls to alerts or something else when you test in IE so what do you?  Well, it's easy to fix actually.  Just plop this bit of Javascript in your file and worry no more.&lt;br /&gt;&lt;pre name="code" class="javascript"&gt;&lt;br /&gt;if(console === undefined){&lt;br /&gt;  function _console(){&lt;br /&gt;   return {&lt;br /&gt;    log : function(v){&lt;br /&gt;     alert(v);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;  var console = new _console();&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Admittedly that is a pretty weak implementation of the console.log() but it is a good starting place for you.  If you want you can extend that do do things a little better (like append the log messages to the bottom of your webpage) but you get the basic idea.  Enjoy!&lt;br /&gt;&lt;br /&gt;Here is a slightly better version to give you an idea how you might extend it (requires the $ function such as that found in JQuery):&lt;br /&gt;&lt;pre name="code" class="javascript"&gt;&lt;br /&gt;if(console === undefined){&lt;br /&gt;  function _console(){&lt;br /&gt;   return {&lt;br /&gt;    log : function(v){&lt;br /&gt;     this.prepLog();&lt;br /&gt;     var l = '&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;'+v+'&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;';&lt;br /&gt;     $('#divConsoleLog').append(l);&lt;br /&gt;    },&lt;br /&gt;    prepLog : function(){&lt;br /&gt;     if(!$('#divConsoleLog')[0]){&lt;br /&gt;      var d = '&amp;lt;table id="divConsoleLog"&amp;gt;&amp;lt;caption&amp;gt;Console&amp;lt;/caption&amp;gt;&amp;lt;/table&amp;gt;';&lt;br /&gt;      $('body').append(d);&lt;br /&gt;     }&lt;br /&gt;    }&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;  var console = new _console();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Unsurprisingly, someone had this idea before me and they have a more feature rich implementation - check out "&lt;a href="http://icant.co.uk/sandbox/fauxconsole/"&gt;faux console&lt;/a&gt;" - but for whatever reason his didn't work for me and I don't feel like debugging it.  However, his style sheet is pretty much just what I want:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="css"&gt;&lt;br /&gt;#divConsoleLog{&lt;br /&gt; position:absolute;&lt;br /&gt; top:0;&lt;br /&gt; right:0;&lt;br /&gt; width:300px;&lt;br /&gt; border:1px solid #999;&lt;br /&gt; font-family:courier,monospace;&lt;br /&gt; background:#eee;&lt;br /&gt; font-size:10px;&lt;br /&gt; padding:10px;&lt;br /&gt;}&lt;br /&gt;html&gt;body #divConsoleLog{&lt;br /&gt; position:fixed;&lt;br /&gt;}&lt;br /&gt;#divConsoleLog a{&lt;br /&gt; float:right;&lt;br /&gt; padding-left:1em;&lt;br /&gt; padding-bottom:.5em;&lt;br /&gt; text-align:right;&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-5437498286241770102?l=cf-bill.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/50p5l2q2czG3Cu6o7tWZz1Xo23Q/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/50p5l2q2czG3Cu6o7tWZz1Xo23Q/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/50p5l2q2czG3Cu6o7tWZz1Xo23Q/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/50p5l2q2czG3Cu6o7tWZz1Xo23Q/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/InTheTrenches/~4/6dpvDiKVxiA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://cf-bill.blogspot.com/feeds/5437498286241770102/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=10753561&amp;postID=5437498286241770102" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/5437498286241770102?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/5437498286241770102?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InTheTrenches/~3/6dpvDiKVxiA/javascript-console-missing-in-ie.html" title="Javascript Console - Missing in IE?" /><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/11/javascript-console-missing-in-ie.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEAEQHgyfip7ImA9WxNUFE4.&quot;"><id>tag:blogger.com,1999:blog-10753561.post-5229470163303538942</id><published>2009-11-05T10:57:00.001-05:00</published><updated>2009-11-05T10:58:21.696-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-05T10:58:21.696-05:00</app:edited><title>Updated Blog Template</title><content type="html">I just updated my blogs template to a much wider layout so that source code would be easier to read.  Hopefully this drastic change doesn't throw off any of my "regular" visitors.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10753561-5229470163303538942?l=cf-bill.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/pXMsmpDPCvde9DsZEzP2DUhMYQI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pXMsmpDPCvde9DsZEzP2DUhMYQI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/pXMsmpDPCvde9DsZEzP2DUhMYQI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pXMsmpDPCvde9DsZEzP2DUhMYQI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/InTheTrenches/~4/9rTTlSQ4xxY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://cf-bill.blogspot.com/feeds/5229470163303538942/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=10753561&amp;postID=5229470163303538942" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/5229470163303538942?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/5229470163303538942?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InTheTrenches/~3/9rTTlSQ4xxY/updated-blog-template.html" title="Updated Blog Template" /><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/11/updated-blog-template.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEQHRH88eCp7ImA9WxNUFE4.&quot;"><id>tag:blogger.com,1999:blog-10753561.post-5447123101336341243</id><published>2009-11-05T10:43:00.002-05:00</published><updated>2009-11-05T10:52:15.170-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-05T10:52:15.170-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="coldfusion" /><category scheme="http://www.blogger.com/atom/ns#" term="query" /><category scheme="http://www.blogger.com/atom/ns#" term="user-defined-function" /><category scheme="http://www.blogger.com/atom/ns#" term="unit-testing" /><category scheme="http://www.blogger.com/atom/ns#" term="udf" /><title>CF: QueryIntersect UDF</title><content type="html">Today I needed a function that would return the intersection of two query objects (think Matrices and Sets).  If you aren't that familiar with intersections basically what this function does is it returns a query object that contains each cell where the two queries were equal.  Thus if you send in two queries with 10 different columns (excpet one of which in both is "firstname") and in both queries, in the 3rd row, the firstname was "richard" but nothing else about the two queries was equal then the return query would have a bunch of empty rows with one column (firstname) - and the firstname value of the third row would be richard.&lt;br /&gt;&lt;br /&gt;One of these probably already exists out on the web somewhere but I wanted to write it myself and so I did.&lt;br /&gt;&lt;br /&gt;A couple of caveats - 1. I know the variable naming sucks; I am lazy; so deal with it.  I don't like having to "var" everything and I don't like typing "local" all the time; so I used very short and not very clear names.  That's ok though becuase I also give you a unit test to show you that the function works the way I expect it to.  Anyway, it's a pretty short function that you can easily update if you want it to be more readable.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="coldfusion"&gt;&lt;br /&gt; &amp;lt;cffunction name="QueryIntersect" access="public" output="false" returntype="query"&amp;gt;&lt;br /&gt;  &amp;lt;cfargument name="q1" type="query"&amp;gt;&lt;br /&gt;  &amp;lt;cfargument name="q2" type="query"&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;cfset var l = structNew() /&amp;gt;&lt;br /&gt;  &amp;lt;!--- &lt;br /&gt;   grab all the column names that are the same between the two incoming queries&lt;br /&gt;  ---&amp;gt;&lt;br /&gt;  &amp;lt;cfset l.colNames = "" /&amp;gt;&lt;br /&gt;  &amp;lt;cfloop list="#q2.columnList#" index="l.c"&amp;gt;&lt;br /&gt;   &amp;lt;cfif ListFindNoCase(q1.columnList,l.c)&amp;gt;&lt;br /&gt;    &amp;lt;cfset l.colNames = listAppend(l.colNames, l.c) /&amp;gt;&lt;br /&gt;   &amp;lt;/cfif&amp;gt;&lt;br /&gt;  &amp;lt;/cfloop&amp;gt;&lt;br /&gt;  &lt;br /&gt;  &amp;lt;cfset l.q = QueryNew("#l.colNames#") /&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;cfset l.max = q1.recordCount /&amp;gt;&lt;br /&gt;  &amp;lt;cfif q2.recordCount LT q1.recordCount&amp;gt;&lt;br /&gt;   &amp;lt;cfset l.max = q2.recordCount&amp;gt;&lt;br /&gt;  &amp;lt;/cfif&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;cfloop from="1" to="#l.max#" step="1" index="l.s"&amp;gt;&lt;br /&gt;   &amp;lt;cfset QueryAddRow(l.q) /&amp;gt;&lt;br /&gt;   &amp;lt;cfloop list="#l.colNames#" index="l.i"&amp;gt;&lt;br /&gt;    &amp;lt;cfif q1["#l.i#"]["#l.s#"] EQ q2["#l.i#"]["#l.s#"]&amp;gt;&lt;br /&gt;     &amp;lt;cfset querySetCell(l.q,l.i,q1["#l.i#"]["#l.s#"]) /&amp;gt;&lt;br /&gt;    &amp;lt;/cfif&amp;gt;&lt;br /&gt;   &amp;lt;/cfloop&amp;gt;&lt;br /&gt;  &amp;lt;/cfloop&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;cfreturn l.q /&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;Here is the unit test&lt;br /&gt;&lt;pre name="code" class="coldfusion"&gt;&lt;br /&gt; &amp;lt;cffunction name="QueryIntersectTest" access="public" output="false"&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;cfset var q1 = QueryNew("id,name,title") /&amp;gt;&lt;br /&gt;  &amp;lt;cfset var q2 = QueryNew("name,email,id") /&amp;gt;&lt;br /&gt;  &amp;lt;cfset var q3 = "" /&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;cfscript&amp;gt;&lt;br /&gt;   QueryAddRow(q1);&lt;br /&gt;   QuerySetCell(q1,"id","1");&lt;br /&gt;   QuerySetCell(q1,"name","bill");&lt;br /&gt;   QuerySetCell(q1,"title","chief");&lt;br /&gt;&lt;br /&gt;   QueryAddRow(q1);&lt;br /&gt;   QuerySetCell(q1,"id","2");&lt;br /&gt;   QuerySetCell(q1,"name","carl");&lt;br /&gt;   QuerySetCell(q1,"title","bozo");&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   QueryAddRow(q2);&lt;br /&gt;   QuerySetCell(q2,"id","1");&lt;br /&gt;   QuerySetCell(q2,"name","tom");&lt;br /&gt;   QuerySetCell(q2,"email","tom@bob.com");&lt;br /&gt;&lt;br /&gt;   QueryAddRow(q2);&lt;br /&gt;   QuerySetCell(q2,"id","2");&lt;br /&gt;   QuerySetCell(q2,"name","carl");&lt;br /&gt;   QuerySetCell(q2,"email","carl@r.org");&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;   QueryAddRow(q2);&lt;br /&gt;   QuerySetCell(q2,"id","3");&lt;br /&gt;   QuerySetCell(q2,"name","ted");&lt;br /&gt;   QuerySetCell(q2,"email","cop@pork.com");&lt;br /&gt;&lt;br /&gt;   q3 = QueryIntersect(q1,q2);&lt;br /&gt;&lt;br /&gt;   AssertTrue(q3.recordCount EQ q1.recordCount,"the wrong number of rows were in the intersection");&lt;br /&gt;   AssertTrue(ListFindNoCase(q3.columnList,"id"), "id should be a column");&lt;br /&gt;   AssertTrue(ListFindNoCase(q3.columnList,"name"), "name should be a column");&lt;br /&gt;   AssertTrue(q3.id EQ 1, "id should have intersected");&lt;br /&gt;   AssertTrue(q3.name EQ "", "name should not have intersected");&lt;br /&gt;   AssertTrue(q3["id"][2] EQ 2, "second id should have intersected");&lt;br /&gt;   AssertTrue(q3["name"][2] EQ "carl", "second name should have intersected");&lt;br /&gt;&lt;br /&gt;   &lt;br /&gt;  &amp;lt;/cfscript&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;I'll probably post another one later that does an intersection of all the rows in a single query as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10753561-5447123101336341243?l=cf-bill.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8ihpW7k_Q9GDnr21RU2cj_n0esE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8ihpW7k_Q9GDnr21RU2cj_n0esE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/8ihpW7k_Q9GDnr21RU2cj_n0esE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8ihpW7k_Q9GDnr21RU2cj_n0esE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/InTheTrenches/~4/sQudXYd4mjE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://cf-bill.blogspot.com/feeds/5447123101336341243/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=10753561&amp;postID=5447123101336341243" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/5447123101336341243?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/5447123101336341243?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InTheTrenches/~3/sQudXYd4mjE/cf-queryintersect-udf.html" title="CF: QueryIntersect UDF" /><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/11/cf-queryintersect-udf.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE8EQH85cCp7ImA9WxNVF0g.&quot;"><id>tag:blogger.com,1999:blog-10753561.post-6416736030595596293</id><published>2009-10-28T14:29:00.005-04:00</published><updated>2009-10-28T15:06:41.128-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-28T15:06:41.128-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="coldfusion" /><category scheme="http://www.blogger.com/atom/ns#" term="udf" /><title>ListToQuery UDF</title><content type="html">Today I happened to find myself at CFlib.org - I don't go there often - and I was browsing the newer function submissions just for the heck of it and I came across the function &lt;a href="http://cflib.org/udf/listToQuery"&gt;ListToQuery&lt;/a&gt; by Russ Spivey.  It's a straight forward enough function but I thought it could be a little cleaner, and potentially a little faster when dealing with large lists.&lt;br /&gt;&lt;br /&gt;Here is my version:&lt;br /&gt;&lt;pre class="coldfusion" name="code"&gt;&lt;br /&gt;&amp;lt;cffunction name="listToQuery" access="public" returntype="query" output="false"&lt;br /&gt;    hint="Converts a list to a single-column query."&amp;gt;&lt;br /&gt;&lt;br /&gt;        &amp;lt;cfargument name="list" type="string" required="yes" hint="List to convert."&amp;gt;&lt;br /&gt;        &amp;lt;cfargument name="delimiters" type="string" required="no" default="," hint="Things that separate list elements."&amp;gt;&lt;br /&gt;        &amp;lt;cfargument name="columnName" type="string" required="no" default="column" hint="Name to give query column."&amp;gt;&lt;br /&gt;        &amp;lt;cfargument name="includeBlanks" type="boolean" required="no" default="false" hint="include empty elements in the list as empty values in the query"&amp;gt;&lt;br /&gt;&lt;br /&gt;        &amp;lt;cfset var query = queryNew("")&amp;gt;&lt;br /&gt;        &amp;lt;cfset QueryAddColumn(query,arguments. columnName,ListToArray(arguments.list,arguments.delimiters,arguments.includeBlanks))&amp;gt;&lt;br /&gt;&lt;br /&gt;        &amp;lt;cfreturn query&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;Sadly, I couldn't contact Russ directly to share my contribution so hopefully he doesn't mind me sticking this here.  If it weren't for his initial cut at the function I wouldn't have thought to even try and write it.&lt;br /&gt;&lt;br /&gt;&lt;del&gt;If anyone wants to benchmark the two it would probably be interesting to see if my intuition is correct.&lt;/del&gt;&lt;br /&gt;UPDATE:&lt;br /&gt;Ok, well, I benchmarked it with 5000, 10000 and 30000 element lists (I didn't have the patience for a 100,000 element list sorry (i suppose I could optimize my list building). Here were the results:&lt;br /&gt;&lt;br /&gt;   &lt;table border="1"&gt;&lt;thead&gt; &lt;br /&gt;   &lt;caption&gt;5000 element list&lt;/caption&gt;&lt;/thead&gt;&lt;tbody&gt; &lt;br /&gt;   &lt;tr&gt;&lt;th&gt;Function&lt;/th&gt;&lt;th&gt;Time in ms&lt;/th&gt;&lt;/tr&gt; &lt;br /&gt;   &lt;tr&gt;&lt;td&gt;Using QueryAddColumn&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;/tr&gt; &lt;br /&gt;   &lt;tr&gt;&lt;td&gt;Origional Version&lt;/td&gt;&lt;td&gt;31&lt;/td&gt;&lt;/tr&gt; &lt;br /&gt;   &lt;/tbody&gt;&lt;/table&gt; &lt;br /&gt;   &lt;table border="1"&gt;&lt;thead&gt; &lt;br /&gt;   &lt;caption&gt;10000 element list&lt;/caption&gt;&lt;/thead&gt;&lt;tbody&gt; &lt;br /&gt;   &lt;tr&gt;&lt;th&gt;Function&lt;/th&gt;&lt;th&gt;Time in ms&lt;/th&gt;&lt;/tr&gt; &lt;br /&gt;   &lt;tr&gt;&lt;td&gt;Using QueryAddColumn&lt;/td&gt;&lt;td&gt;47&lt;/td&gt;&lt;/tr&gt; &lt;br /&gt;   &lt;tr&gt;&lt;td&gt;Origional Version&lt;/td&gt;&lt;td&gt;235&lt;/td&gt;&lt;/tr&gt; &lt;br /&gt;   &lt;/tbody&gt;&lt;/table&gt; &lt;br /&gt;   &lt;table border="1"&gt;&lt;thead&gt; &lt;br /&gt;   &lt;caption&gt;30000 element list&lt;/caption&gt;&lt;/thead&gt;&lt;tbody&gt; &lt;br /&gt;   &lt;tr&gt;&lt;th&gt;Function&lt;/th&gt;&lt;th&gt;Time in ms&lt;/th&gt;&lt;/tr&gt; &lt;br /&gt;   &lt;tr&gt;&lt;td&gt;Using QueryAddColumn&lt;/td&gt;&lt;td&gt;110&lt;/td&gt;&lt;/tr&gt; &lt;br /&gt;   &lt;tr&gt;&lt;td&gt;Origional Version&lt;/td&gt;&lt;td&gt;453&lt;/td&gt;&lt;/tr&gt; &lt;br /&gt;   &lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10753561-6416736030595596293?l=cf-bill.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/CZSw72xhNqzHvQEEUvlf_OWm2NY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CZSw72xhNqzHvQEEUvlf_OWm2NY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/CZSw72xhNqzHvQEEUvlf_OWm2NY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CZSw72xhNqzHvQEEUvlf_OWm2NY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/InTheTrenches/~4/z6OuyDZEyLI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://cf-bill.blogspot.com/feeds/6416736030595596293/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=10753561&amp;postID=6416736030595596293" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/6416736030595596293?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/6416736030595596293?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InTheTrenches/~3/z6OuyDZEyLI/listtoquery-udf.html" title="ListToQuery UDF" /><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/10/listtoquery-udf.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkEDQn46eyp7ImA9WxNWFEs.&quot;"><id>tag:blogger.com,1999:blog-10753561.post-618176760844251116</id><published>2009-10-13T14:50:00.004-04:00</published><updated>2009-10-13T15:04:33.013-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-13T15:04:33.013-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="plsql_split" /><category scheme="http://www.blogger.com/atom/ns#" term="string.spllit" /><title>PLSQL : Parsing Distinct Date Parts (STRING.SPLIT)</title><content type="html">This may not be very useful - I know that after I wrote it I actually ended up not needing it but it was a fun exercise anyway.  Basically what it does is it parses the current date (or any date really) and results in three variables being populated with the month number, day number, and year number from the date given.  You could use this for other types of string.split type activities if you needed.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="sql"&gt;&lt;br /&gt;  &lt;br /&gt;  vDay          NUMBER;&lt;br /&gt;  vMonth        NUMBER;&lt;br /&gt;  vYear         NUMBER;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  SELECT&lt;br /&gt;     TO_NUMBER(regexp_substr(t.now, '[^,]+', 1)) INTO vDay,&lt;br /&gt;     TO_NUMBER(regexp_substr(t.now, '[^,]+', 4)) INTO vMonth,&lt;br /&gt;     TO_NUMBER(regexp_substr(t.now, '[^,]+', 7)) INTO vYear&lt;br /&gt;    FROM &lt;br /&gt;        (&lt;br /&gt;                SELECT to_char(sysdate,'dd,mm,yyyy') as now &lt;br /&gt;                  FROM sys.dual)   &lt;br /&gt;        &lt;br /&gt;        t;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Overall this is a pretty simple little query but, if you aren't very familiar with PLSQL it might seem a little daunting.  Here's what's happening in a nutshell.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;The regexp_substr is getting the string deliniated by the comma; the numeric argument passed to it tells where to start getting the substring from.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;the t; on the last line of the code is an alias that represents the result set returned by the &lt;span style="font-style:italic;"&gt;SELECT to_char&lt;/span&gt; subquery.  The semi-colon just means the code is complete.  You may have to remove it depending on where you're using the code; personally,  I had it in a stored procedure.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;NOTE:&lt;/span&gt;I inserted the comma's into the datestring by specially formatting the date with the to_char method.  Typically people use slashes but I like comma's better for this purpose.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;I've put this up here mostly as a reminder for myself but I hope it helps someone else at some time.&lt;br /&gt;&lt;br /&gt;If you want to just run it in a SQL query real fast (without variables) try this:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="sql"&gt;&lt;br /&gt; SELECT  &lt;br /&gt;    TO_NUMBER(regexp_substr(t.now, '[^,]+', 1)) as vDay,  &lt;br /&gt;    TO_NUMBER(regexp_substr(t.now, '[^,]+', 4)) as vMonth,  &lt;br /&gt;    TO_NUMBER(regexp_substr(t.now, '[^,]+', 7)) as vYear  &lt;br /&gt;   FROM   &lt;br /&gt;       (  &lt;br /&gt;               SELECT to_char(sysdate,'dd,mm,yyyy') as now   &lt;br /&gt;                 FROM sys.dual)     &lt;br /&gt;         &lt;br /&gt;       t&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-618176760844251116?l=cf-bill.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/2qmw8nlnRc0fN_d_qFV6ixHrKs0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2qmw8nlnRc0fN_d_qFV6ixHrKs0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/2qmw8nlnRc0fN_d_qFV6ixHrKs0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2qmw8nlnRc0fN_d_qFV6ixHrKs0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/InTheTrenches/~4/dG_oxF-6ipE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://cf-bill.blogspot.com/feeds/618176760844251116/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=10753561&amp;postID=618176760844251116" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/618176760844251116?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/618176760844251116?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InTheTrenches/~3/dG_oxF-6ipE/plsql-parsing-distinct-date-parts.html" title="PLSQL : Parsing Distinct Date Parts (STRING.SPLIT)" /><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/10/plsql-parsing-distinct-date-parts.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UMQn47fyp7ImA9WxNWE0s.&quot;"><id>tag:blogger.com,1999:blog-10753561.post-221540649169407266</id><published>2009-10-02T14:40:00.004-04:00</published><updated>2009-10-12T11:28:03.007-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-12T11:28:03.007-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="coldfusion" /><category scheme="http://www.blogger.com/atom/ns#" term="smtp" /><title>CFMX CFUSION_VERIFYMAIL</title><content type="html">This isn't really a feature I've needed much but I thought it might be useful to share if anyone else ever needs it.&lt;br /&gt;&lt;br /&gt;Basically, a long time ago, Coldfusion had &lt;a href="http://www.houseoffusion.com/cfdocs1/cf45/Administering_ColdFusion_Server/10_Configuring_Advanced_Security/admin1018.htm"&gt;a little secret function&lt;/a&gt; called CFUSION_VERIFYMAIL which was used to verify the smtp server was available to CF.  Once ColdFusion became ColdFusion MX that function went away and I never thought about it again.&lt;br /&gt;&lt;br /&gt;Well, today I wanted to do something very similar but I wasn't sure what to do so I searched for my old hidden function and &lt;a href="http://www.mail-archive.com/cf-talk@houseoffusion.com/msg98345.html"&gt;found a forum thread&lt;/a&gt; that offered the basics of a solution.  Well technically it is the solution but it just wasn't as complete as I wanted it so I fluffed it just a touch and now I offer to you as a resource should you need it.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="coldfusion"&gt;&lt;br /&gt;&amp;lt;cffunction name="mailServerIsUp" returntype="boolean" access="public"&amp;gt;&lt;br /&gt; &amp;lt;cfargument name="smtp_server" type="string" default="" /&amp;gt;&lt;br /&gt; &amp;lt;cfargument name="smtp_port" type="numeric" default="0" /&amp;gt;&lt;br /&gt; &amp;lt;cfargument name="timeout"  type="numeric" default="10" /&amp;gt;&lt;br /&gt; &amp;lt;cfargument name="service"  type="any" default='#createObject("java", "coldfusion.server.ServiceFactory")#' /&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;cfset arguments.service = arguments.service.getMailSpoolService() /&amp;gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt; &amp;lt;cfif LEN(arguments.smtp_server)&amp;gt;&lt;br /&gt;  &amp;lt;cfset arguments.service.setServer(arguments.smtp_server) /&amp;gt;&lt;br /&gt; &amp;lt;/cfif&amp;gt;&lt;br /&gt; &amp;lt;cfif VAL(arguments.smtp_port)&amp;gt;&lt;br /&gt;  &amp;lt;cfset arguments.service.setPort(VAL(arguments.smtp_port)) /&amp;gt;&lt;br /&gt; &amp;lt;/cfif&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;cfset arguments.service.setTimeout(VAL(arguments.timeout)) /&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;cfreturn arguments.service.verifyServer() /&amp;gt;&lt;br /&gt;&amp;lt;/cffunction&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;I've tried to make the function fairly flexible (in case you already keep a copy of the service factory in your application scope or something plus I wanted to make sure you could point at your own applications mailserver/port if you need to OR it will just use the default server settings.&lt;br /&gt;&lt;br /&gt;Finally, I had to change the name of the function becuase CF was throwing an error if I tried to call that old hidden functions name.  Plus, I think verifymailserver is more clear than just verifymail.  I just left the cfusion_ on the front as a hat tip to the original.&lt;br /&gt;&lt;br /&gt;Obviously this can be improved by adding some exception handling - especially in regards to determining if the arguments.service passed in is the correct object type; but I'll leave that to others.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10753561-221540649169407266?l=cf-bill.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/g5zPGg4pf1q9-KUsMW6HJ3LMR_8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/g5zPGg4pf1q9-KUsMW6HJ3LMR_8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/g5zPGg4pf1q9-KUsMW6HJ3LMR_8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/g5zPGg4pf1q9-KUsMW6HJ3LMR_8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/InTheTrenches/~4/ajEwyWdy0qo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://cf-bill.blogspot.com/feeds/221540649169407266/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=10753561&amp;postID=221540649169407266" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/221540649169407266?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/221540649169407266?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InTheTrenches/~3/ajEwyWdy0qo/cfmx-cfusionverifymail.html" title="CFMX CFUSION_VERIFYMAIL" /><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/10/cfmx-cfusionverifymail.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkAHSX4ycSp7ImA9WxNSGUU.&quot;"><id>tag:blogger.com,1999:blog-10753561.post-3541482121275151855</id><published>2009-09-03T09:27:00.002-04:00</published><updated>2009-09-03T09:32:18.099-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-03T09:32:18.099-04:00</app:edited><title>When a Storm is a Saver</title><content type="html">Today I found a great tool for testing webservices called Storm.  It's a free, open source tool that basically just kicks ass.  You can call any webservice and pass along some pretty complicated arguments to it if you want and quickly get a feel for what's going wrong (or right!)&lt;br /&gt;&lt;br /&gt;While, sadly the exception information returned from my CF webservice wasn't very useful Storm made it easy for me to confirm the problem existed in both DEV and Production and it made it super easy for me to test the patch on the PROD server to make sure the problem was resolved.&lt;br /&gt;&lt;br /&gt;It's free, has no installation at all, and works like a charm.  You can get it at &lt;a href="http://storm.codeplex.com/"&gt;The Storm Homepage&lt;/a&gt;. I just installed r1.1 Adarna standalone.&lt;br /&gt;&lt;br /&gt;I highly recommend you try it out&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10753561-3541482121275151855?l=cf-bill.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/P6Fd-cPoax8FpsdxBZmmBNNtfqA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/P6Fd-cPoax8FpsdxBZmmBNNtfqA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/P6Fd-cPoax8FpsdxBZmmBNNtfqA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/P6Fd-cPoax8FpsdxBZmmBNNtfqA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/InTheTrenches/~4/bnV8PXYScaI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://cf-bill.blogspot.com/feeds/3541482121275151855/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=10753561&amp;postID=3541482121275151855" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/3541482121275151855?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/3541482121275151855?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InTheTrenches/~3/bnV8PXYScaI/when-storm-is-saver.html" title="When a Storm is a Saver" /><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/09/when-storm-is-saver.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkEHR34-fyp7ImA9WxJbF08.&quot;"><id>tag:blogger.com,1999:blog-10753561.post-4900593926151838018</id><published>2009-07-27T16:32:00.003-04:00</published><updated>2009-07-27T17:03:56.057-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-27T17:03:56.057-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="phone number" /><category scheme="http://www.blogger.com/atom/ns#" term="google-voice" /><category scheme="http://www.blogger.com/atom/ns#" term="grandcentral" /><category scheme="http://www.blogger.com/atom/ns#" term="phone" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><title>2 Years of Grand Central/Google Voice Usage</title><content type="html">I was lucky enough to get a GrandCentral account about 2 years ago and, initially, I thought - "wow, this is really cool."  Now that two years have gone by, and everyone is getting a Google Voice account, I thought I should share my more refined opinion.&lt;br /&gt;&lt;br /&gt;It's still really cool.&lt;br /&gt;&lt;br /&gt;I'm not going to say it's all roses and there is nothing that could be improved; but for my usage it pretty much rocks.  &lt;br /&gt;&lt;br /&gt;Right off the bat it's ability to record voicemail came in very handy for me.  I was heading to Hong Kong for five weeks and, as it turns out, when someone was going to leave voicemail on my normal phone it was going to cost me international minutes (or at least it would cost me international minutes to listen to it).  I honestly didn't understand the logic behind that but it seemed pretty damn unacceptable.  Thus, GrandCentral's voicemail feature was a real boon.&lt;br /&gt;&lt;br /&gt;I basically just setup the system to "Do Not Disturb" me for the next five weeks and to route all my calls straight to voicemail.  I also told everyone I knew that my cellphone number had changed to my GrandCentral number.  Thus there was little chance that someone would accidentally call me and force me to use an international calling plan.  Since I was in Hong Kong for work, and at a computer for about 16 hours a day(working) I could quickly pull up the voicemail via the web dashboard, listen to it, and respond right away if it was really important.&lt;br /&gt;&lt;br /&gt;Another great advantage to the service, for me, is that I give everyone this one number and they don't have to know if it is my desk number, my cell number, or my home number - they just get a hold of me.  Granted, this is a pretty small feature from my perspective, but it's still pretty handy - I only have to remember one number to tell people; and my business card is a little less cluttered.&lt;br /&gt;&lt;br /&gt;One of the cooler features is the ability to assign a different greeting to different people or groups in your contacts.  I have a group setup for my co-workers, another set up for customers, another for my family, etc.  This way when my family calls but I can't answer they don't have to wade through my boring business greeting - and I can still have some fun with my family greeting.&lt;br /&gt;&lt;br /&gt;One area where I think the groups could come in handy is if, for some strange reason, I ever had to leave my current employment, the companies customers wouldn't have to change their records to reach my company.  I would just route them all to my old work number and our secretary could route them to the right person.  Hopefully, I'll never have to test that feature out but I can see the value.&lt;br /&gt;&lt;br /&gt;One cool usage scenario for the separate greetings I had happened the fall after I first signed up.  I started a small side business selling buffalo themed hats in honor of our local university (Marshall).  My business was "HerdHats.com" (domain now dead) and I was giving out small business cards at the games for people who were on the fence about buying one.  I set my default greeting on the service to be a "HerdHats" one but my co-workers, customers, and family never had to hear it - just anyone who I didn't really know.  It worked out really well.&lt;br /&gt;&lt;br /&gt;I also like the online SMS log.  I've read a few people talking about &lt;a href="http://www.hung-truong.com/blog/2009/07/16/to-google-voice-or-not-to-google-voice/"&gt;how SMS doesn't work that well&lt;/a&gt;, but so far, for me, it has been great.  My friends on other networks have SMS'd my Google Voice number and I've responded, and it's worked fine from right within the native IPhone SMS app - plus my SMS conversation is logged in the Google Voice dashboard.&lt;br /&gt;&lt;br /&gt;The transcription of voice-mails is a cool idea that just doesn't work all that well yet.  However, I imagine it will get better as time goes by.  Currently I'd say it gets about 10% of the message right so, obviously, it isn't very useful yet - but eventually I figure it will provide me with a good indication of what is in the message before I even load it up for listening.&lt;br /&gt;&lt;br /&gt;One other area I have run into problems is with some mobile services.  I can't think of the names of them right now but in order to use them you have to provide your cell number and they will SMS you a signup code.  For some reason my signup code doesn't make it to me via the Google SMS so I end up having to give my real cell number.  That is kind of a pain since I haven't even told anyone my cell number in two years so it is kind of easy to forget; plus, can you really call it a global number if it doesn't work globally?&lt;br /&gt;&lt;br /&gt;I'm also not thrilled with thee the mobile web interface.  It's OK but I think I'd prefer a native app.  Earlier over 3G the site was really slow and I couldn't load any of the voicemail to listen to it.  However, right now I'm on our WiFi (barely) and the site and the voicemail both loaded just fine.  I'm not sure what's going on with that.&lt;br /&gt;&lt;br /&gt;My final beef is caller id.  A bunch of my co-workers recently got Google Voice and so I put their numbers in my contacts list (and removed their mobile numbers initially).  However, when they called my Google Voice number from their cell phone they then showed up as unknown contacts.  I was hoping Google Voice would intelligently map the cell number to the Google Voice number that is registered with the cell.  Thus I've re-added their mobile numbers as "other" numbers in Google Contacts (which syncs fine with my IPhone 3G).&lt;br /&gt;&lt;br /&gt;One thing to remember is that the international calling discount is only available from the US to a foreign country.  Thus, when I was in Hong Kong (or London) I couldn't save any money by dialing up GrandCentral to make my international call - in fact if it worked at all it probably would have just cost me the normal international rate + the GrandCentral rate.&lt;br /&gt;&lt;br /&gt;Overall I'm very happy with the service that is provided by Google Voice; particularly considering it is free.  I really can't imagine going back to my old way of managing my phone numbers.  It's also been very useful since we have cut back our home landline to a minimum usage plan so now all the people who used to call me there were switched to my GrandCentral number years ago and we've just stopped routing calls to that phone.&lt;br /&gt;&lt;br /&gt;If there was one feature I wish they would add is a scheduled "Do Not Disturb" where I could tell the service to not ring through to my phone at all between a certain time window  (say 10pm to 6am).  But beyond that the service does everything I could want.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10753561-4900593926151838018?l=cf-bill.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ooYS7X-UUJr_lDAcjPgSLd8MWHk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ooYS7X-UUJr_lDAcjPgSLd8MWHk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ooYS7X-UUJr_lDAcjPgSLd8MWHk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ooYS7X-UUJr_lDAcjPgSLd8MWHk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/InTheTrenches/~4/bxDdEiEzfa4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://cf-bill.blogspot.com/feeds/4900593926151838018/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=10753561&amp;postID=4900593926151838018" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/4900593926151838018?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10753561/posts/default/4900593926151838018?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InTheTrenches/~3/bxDdEiEzfa4/2-years-of-grand-centralgoogle-voice.html" title="2 Years of Grand Central/Google Voice Usage" /><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/07/2-years-of-grand-centralgoogle-voice.html</feedburner:origLink></entry><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;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/U77G0AqwT85UnViLSk7bXZIuOWI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/U77G0AqwT85UnViLSk7bXZIuOWI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/U77G0AqwT85UnViLSk7bXZIuOWI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/U77G0AqwT85UnViLSk7bXZIuOWI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&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="5 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">5</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;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/MM3mvT75i6CMRE819pHwANVakQY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MM3mvT75i6CMRE819pHwANVakQY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/MM3mvT75i6CMRE819pHwANVakQY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MM3mvT75i6CMRE819pHwANVakQY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&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;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/OuIze1oWwf4kySHXQnFPTHIxUG4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OuIze1oWwf4kySHXQnFPTHIxUG4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/OuIze1oWwf4kySHXQnFPTHIxUG4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OuIze1oWwf4kySHXQnFPTHIxUG4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&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;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/SztATAZk02aCsdcW2w20D77dwW8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SztATAZk02aCsdcW2w20D77dwW8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/SztATAZk02aCsdcW2w20D77dwW8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SztATAZk02aCsdcW2w20D77dwW8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&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;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/A4bjBJZ55pRr1MxkCRedRLhmtdc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/A4bjBJZ55pRr1MxkCRedRLhmtdc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/A4bjBJZ55pRr1MxkCRedRLhmtdc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/A4bjBJZ55pRr1MxkCRedRLhmtdc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&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;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8ABl7bfxS8MxBfDywji6M7QIt4w/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8ABl7bfxS8MxBfDywji6M7QIt4w/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/8ABl7bfxS8MxBfDywji6M7QIt4w/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8ABl7bfxS8MxBfDywji6M7QIt4w/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&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;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/cFKAgllWDtBTECeGluEwfRSbH1A/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cFKAgllWDtBTECeGluEwfRSbH1A/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/cFKAgllWDtBTECeGluEwfRSbH1A/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cFKAgllWDtBTECeGluEwfRSbH1A/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&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;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/j5dpF4yUVt7r6-VnXOsDKQbNYfA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/j5dpF4yUVt7r6-VnXOsDKQbNYfA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/j5dpF4yUVt7r6-VnXOsDKQbNYfA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/j5dpF4yUVt7r6-VnXOsDKQbNYfA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&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;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Wqnbe3if6lo8PCG6GkHOS2LsagY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Wqnbe3if6lo8PCG6GkHOS2LsagY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Wqnbe3if6lo8PCG6GkHOS2LsagY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Wqnbe3if6lo8PCG6GkHOS2LsagY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&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;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/x3nfb-j_gOQqVdWDoG6JqMuiDpE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/x3nfb-j_gOQqVdWDoG6JqMuiDpE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/x3nfb-j_gOQqVdWDoG6JqMuiDpE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/x3nfb-j_gOQqVdWDoG6JqMuiDpE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&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;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/zXq78GHEYJiun1veDxMLuR8jI6g/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zXq78GHEYJiun1veDxMLuR8jI6g/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/zXq78GHEYJiun1veDxMLuR8jI6g/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zXq78GHEYJiun1veDxMLuR8jI6g/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&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;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/n-5Z3b73SHBhcSkbgZfMKUHXdac/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/n-5Z3b73SHBhcSkbgZfMKUHXdac/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/n-5Z3b73SHBhcSkbgZfMKUHXdac/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/n-5Z3b73SHBhcSkbgZfMKUHXdac/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&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;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/bg_Wbp7IarWIpMGkBRaEYNPuQa4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bg_Wbp7IarWIpMGkBRaEYNPuQa4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/bg_Wbp7IarWIpMGkBRaEYNPuQa4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bg_Wbp7IarWIpMGkBRaEYNPuQa4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&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="1 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">1</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;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/j4VTuLH83StlyXjgT8552xDyIMM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/j4VTuLH83StlyXjgT8552xDyIMM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/j4VTuLH83StlyXjgT8552xDyIMM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/j4VTuLH83StlyXjgT8552xDyIMM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&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;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/jmCm829oMcW6LXTpDilWNi3h98Y/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jmCm829oMcW6LXTpDilWNi3h98Y/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/jmCm829oMcW6LXTpDilWNi3h98Y/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jmCm829oMcW6LXTpDilWNi3h98Y/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&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;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ALah5d0bkEu6h_mbxae-ouSXiUQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ALah5d0bkEu6h_mbxae-ouSXiUQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ALah5d0bkEu6h_mbxae-ouSXiUQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ALah5d0bkEu6h_mbxae-ouSXiUQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&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;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/VTV-kfkbl3w7zQ3KfAvUv-n9G1o/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VTV-kfkbl3w7zQ3KfAvUv-n9G1o/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/VTV-kfkbl3w7zQ3KfAvUv-n9G1o/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VTV-kfkbl3w7zQ3KfAvUv-n9G1o/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&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></feed>
