<?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:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DEIBQXc7cSp7ImA9WhRUGU4.&quot;"><id>tag:blogger.com,1999:blog-6511306120971083204</id><updated>2012-01-30T10:15:50.909-05:00</updated><category term="virtualization" /><category term="calendar bugs" /><category term="kata" /><category term="display" /><category term="html5" /><category term="debugging" /><category term="notepad2" /><category term="stumbleupon" /><category term="books" /><category term="development" /><category term="junit" /><category term="maven" /><category term="vertical mouse" /><category term="practice" /><category term="tortoisesvn" /><category term="nejug" /><category term="gradle" /><category term="ergonomics" /><category term="UI prototyping" /><category term="LOTY" /><category term="windows" /><category term="tdd" /><category term="bookreview" /><category term="vim" /><category term="staging" /><category term="eclipse" /><category term="openID" /><category term="code" /><category term="review" /><category term="hotfix" /><category term="learning" /><category term="mockito" /><category term="usability" /><category term="javascript benchmark" /><category term="x64" /><category term="rant" /><category term="apache" /><category term="java7" /><category term="useful-tips" /><category term="reading" /><category term="x25-m" /><category term="user experience" /><category term="ant" /><category term="browser benchmark" /><category term="hyper-v" /><category term="murphy's law" /><category term="ssd" /><category term="64-bit" /><category term="dcvs" /><category term="java" /><category term="patterns" /><category term="jdk" /><category term="tutorial" /><category term="goals" /><category term="editors" /><category term="hudson" /><category term="memory" /><category term="jvm" /><category term="concurrency" /><category term="gui" /><category term="oracle" /><category term="nanowrimo" /><category term="kindle" /><category term="carpal tunnel" /><category term="iPhone" /><category term="build" /><category term="software" /><category term="browser uxfail" /><category term="testability" /><category term="windows7" /><category term="testing" /><category term="iPad" /><category term="ereader" /><category term="rambling" /><category term="lcd" /><category term="writing" /><category term="musings" /><category term="utilities" /><category term="svn" /><category term="filtering" /><title>Code Campfire</title><subtitle type="html">Coding stories and related antics</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://codecampfire.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://codecampfire.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Joshua McKinnon</name><uri>http://www.blogger.com/profile/07449570522421153119</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-59dTXSMtv9s/TYkTwzRMA1I/AAAAAAAAALc/_cmMHmiEpFo/s220/foo.png" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>82</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/CodeCampfire" /><feedburner:info uri="codecampfire" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;CUQFQnczeip7ImA9WhRUFk4.&quot;"><id>tag:blogger.com,1999:blog-6511306120971083204.post-3496586177264786011</id><published>2012-01-26T22:01:00.001-05:00</published><updated>2012-01-26T22:01:53.982-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-26T22:01:53.982-05:00</app:edited><title>How to Ruin a Perfectly Good Evening</title><content type="html">Open your brand new SSD (Samsung 830 series 128GB)&lt;br /&gt;
&lt;br /&gt;
Marvel with excitement at the iPhone-like packaging and eagerly image your old drive (Intel 80GB G1 SSD) onto the new one with Clonezilla - 15 mins and booted into Windows 7 on the new SSD. &lt;b&gt;This is where I should have stopped - oh what a fool I was to continue.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Side-track to find out why PC basically hangs for 1-2 mins after 
login and discover it is Microsoft Security Essentials misbehaving - 
story for another day - 20 mins ...&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Everything has gone smoothly so far - run &lt;a href="http://alex-is.de/PHP/fusion/downloads.php?cat_id=4&amp;amp;download_id=9"&gt;AS SSD&lt;/a&gt; and ogle the new benchmark numbers. Uh oh. offset 31K bad? Great. I recall that I never fixed this on my Intel SSD and that is why, so I foolishly decide to try and fix it. I find an answer at &lt;a href="http://lifehacker.com/5837769/make-sure-your-partitions-are-correctly-aligned-for-optimal-solid-state-drive-performance"&gt;lifehacker&lt;/a&gt;.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;Download GParted and install on my &lt;a href="http://codecampfire.blogspot.com/2011/05/creating-multi-boot-usb-drive.html"&gt;trusty multiboot USB drive&lt;/a&gt; - I actually already had a &lt;a href="http://gparted.sourceforge.net/"&gt;GParted&lt;/a&gt; livecd on there but decided to throw &lt;a href="http://partedmagic.com/doku.php?id=start"&gt;Parted Magic&lt;/a&gt; on there to see what that was like.&lt;br /&gt;
&lt;br /&gt;
Create a Windows 7 Repair Disc (directly from my copy of Windows 7 Home Premium I'm running at home). Wait, no, side-track and test out lightscribe to make a fun label for it first.&lt;br /&gt;
&lt;br /&gt;
Discover that lightscribe software service needs to update. Do that. Find a label maker software - oh, already had one in some software suite - great. Hmm, it won't let me select my CDRW as my lightscribe driver...it will apparently only accept the lowest lettered optical disc drive. Wow. That's good engineering (Cyberlink LabelPrint). Re-map drive names so DVDRW drive comes first. Burn lightscribe label - remember why I haven't burned a lightscribe label in 6 years - because it takes way too long. Finally, let Windows create/burn a windows 7 repair disc.&lt;br /&gt;
&lt;br /&gt;
Boot into Parted Magic and shift my partition forward a few MB, wait 15 mins, then shift back 1 MB, per Lifehacker instructions. Success - now, Windows will no longer boot because it's confused. (This is expected)&lt;br /&gt;
&lt;br /&gt;
Boot up my freshly burned Windows 7 repair disc. I'm greeted with the following:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-E9f9xYokuds/TyIPYSZKrwI/AAAAAAAAAN8/MGe7Fl6c3M4/s1600/win7_recovery_error-crop.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="115" src="http://2.bp.blogspot.com/-E9f9xYokuds/TyIPYSZKrwI/AAAAAAAAAN8/MGe7Fl6c3M4/s320/win7_recovery_error-crop.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The windows recovery disc I burned from the copy of windows I am trying to repairing is incompatible with itself. Yes, that's right - incompatible with itself.&lt;br /&gt;
&lt;br /&gt;
Do some quick searches and come up short. Decide screw it - I'll just reinstall Windows 7 on my SSD. Insert my Windows 7 Upgrade DVD (Family Pack - likely the source of all my pain!) Format the drive, select it - realize that Windows 7 RTM does not create "100MB" partition which has possible side-effect of aligning partition properly (same issue w/ original SSD install I think...). Decide to try and manually create partitions back in GParted and then let Windows 7 try to install.&lt;br /&gt;
&lt;br /&gt;
Nope - Windows 7 will not install on it. Error 80300024. Excellent. No real useful info found.&lt;br /&gt;
&lt;br /&gt;
Remove fancy new SSD and put back in old Intel one. Admit defeat for now.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;4 hours after I started - blog about it, back at square one.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6511306120971083204-3496586177264786011?l=codecampfire.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeCampfire/~4/dp5iSP-Gru8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codecampfire.blogspot.com/feeds/3496586177264786011/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codecampfire.blogspot.com/2012/01/how-to-ruin-perfectly-good-evening.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/3496586177264786011?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/3496586177264786011?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeCampfire/~3/dp5iSP-Gru8/how-to-ruin-perfectly-good-evening.html" title="How to Ruin a Perfectly Good Evening" /><author><name>Joshua McKinnon</name><uri>http://www.blogger.com/profile/07449570522421153119</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-59dTXSMtv9s/TYkTwzRMA1I/AAAAAAAAALc/_cmMHmiEpFo/s220/foo.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-E9f9xYokuds/TyIPYSZKrwI/AAAAAAAAAN8/MGe7Fl6c3M4/s72-c/win7_recovery_error-crop.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://codecampfire.blogspot.com/2012/01/how-to-ruin-perfectly-good-evening.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEYERXg8cCp7ImA9WhRTE04.&quot;"><id>tag:blogger.com,1999:blog-6511306120971083204.post-927948971263380830</id><published>2011-11-03T12:01:00.003-04:00</published><updated>2011-11-03T12:01:44.678-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-03T12:01:44.678-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="editors" /><category scheme="http://www.blogger.com/atom/ns#" term="vim" /><title>20 Years of VIM</title><content type="html">VIM has now been out for 20 years. &lt;a href="http://arstechnica.com/open-source/news/2011/11/two-decades-of-productivity-vims-20th-anniversary.ars"&gt;Ars has a nice article on it&lt;/a&gt;. It is my editor of choice on *nix based systems, but things weren't always that way. I remember when I first used vim (it may have even been an earlier clone, but probably not vi itself) , I hated it - it didn't make any sense. I was in highschool at the time, probably 14 years old. At the time I used pico since it was similar to MSDOS' EDIT.&lt;br /&gt;
&lt;br /&gt;
It wasn't until I was in college that I truly got an appreciation for vim. I saw one of my professors using it to write code, and he was so incredibly fast it amazed me. It got me interested in how to use vim. Once you take the time to learn a few things about how it works, it's very useful. I still am a vim novice, I know enough to "miss" certain features when I am not using vim, but not enough to be a jedi master of vim (I'm a long ways away from that).&lt;br /&gt;
&lt;br /&gt;
I'm going to take this anniversary as an opportunity to learn some new tricks in VIM. I wouldn't be surprised if I sum up some of the most frequent commands I use in a future post.&lt;br /&gt;
&lt;br /&gt;
While I don't think software should &lt;i&gt;generally&lt;/i&gt; have a steep learning curve, in the context of an editor for highly technical users, it makes sense to invest your time really learning an editor. The Pragmatic Programmer tells us to Use A Single Editor Well for a reason - there are real productivity benefits. I'm curious how many users take the time to learn an advanced editor like vim, emacs, or the ins and outs of something like Textmate.&amp;nbsp;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I think being under active development after 20 years is a pretty awesome accomplishment in software. How many projects have that kind of life span these days? A toast to you, VIM! To another 20 years of active development!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6511306120971083204-927948971263380830?l=codecampfire.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeCampfire/~4/pTgBTibhZSw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codecampfire.blogspot.com/feeds/927948971263380830/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codecampfire.blogspot.com/2011/11/20-years-of-vim.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/927948971263380830?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/927948971263380830?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeCampfire/~3/pTgBTibhZSw/20-years-of-vim.html" title="20 Years of VIM" /><author><name>Joshua McKinnon</name><uri>http://www.blogger.com/profile/07449570522421153119</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-59dTXSMtv9s/TYkTwzRMA1I/AAAAAAAAALc/_cmMHmiEpFo/s220/foo.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://codecampfire.blogspot.com/2011/11/20-years-of-vim.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU4CSXw9eSp7ImA9WhRTEUQ.&quot;"><id>tag:blogger.com,1999:blog-6511306120971083204.post-2331451758849207986</id><published>2011-11-01T20:32:00.002-04:00</published><updated>2011-11-01T20:32:48.261-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-01T20:32:48.261-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="nanowrimo" /><category scheme="http://www.blogger.com/atom/ns#" term="writing" /><title>It's PragProWriMo again</title><content type="html">It's November 1st. That means it's &lt;a href="http://forums.pragprog.com/forums/235"&gt;Pragmatic Programmer Writing Month&lt;/a&gt; (PragProWriMo) time again. Itself a spin off of &lt;a href="http://www.nanowrimo.org/"&gt;National Novel Writing Month (NaNoWriMo)&lt;/a&gt;.This will be my third year trying to participate in my own way.&lt;br /&gt;
&lt;br /&gt;
My goal for the month is not to write a book. I take this as an opportunity to encourage myself to blog about technical topics every day for the month. Over time, my blog has become at the very least a resource for myself to find solutions or answers to simple problems I've encountered previously. I find writing every day for a month is both challenging and rewarding.&lt;br /&gt;
&lt;br /&gt;
I lot has happened since last year. My job role has changed, my whole life has been changing (thanks to Jesus Christ), and I just got married last month. I've yet to determine what I will write about this month.&lt;br /&gt;
&lt;br /&gt;
For tonight, I will just state a simple piece of technology that improves my world. Technology often advances just for the sake of advancement, and I'm not always sure a given new technology noticeably improves my life. Occasionally, I'll see something and go wow - why didn't this happen earlier. Why isn't this a feature of every widget? What's one of those things? The dripless pour spout on my &lt;a href="http://www.surlatable.com/product/PRO-178959/Cuisinart-PerfecTemp-Cordless-Electric-Kettle"&gt;new electric kettle&lt;/a&gt;. How many times have liquids (hot or otherwise) been spilled on countertops, on hands, everywhere, because a container has a spout that's prone to dripping everywhere? Somebody took the time to design one that DOES NOT DRIP regardless of how slow you tilt it. No messes because you poured too slow, or poured too fast to avoid a drip from pouring too slow.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-LcL6XFwPdQQ/TrCOzYZWpkI/AAAAAAAAAN0/gUz40C3B6Nc/s1600/electric_kettle_spout.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-LcL6XFwPdQQ/TrCOzYZWpkI/AAAAAAAAAN0/gUz40C3B6Nc/s320/electric_kettle_spout.png" width="267" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
And where is it on the features list? Not even listed on the vendor's website. It was listed on the box somewhere, though. (but isn't why I bought it - I wanted the programmable temperatures as I'm an avid tea drinker and boiling isn't enough flexibility)&lt;br /&gt;
&lt;br /&gt;
Why doesn't every pitcher-like container have a no-drip spout? How many years do you think it will be until every new product has it? It saddens me that it may be quite some time. (5 years, 10 years, more?)&lt;br /&gt;
&lt;br /&gt;
I find this "small touch" feature that is easily overlooked since the user can just deal with having to tread carefully and pour exactly right, or drip and spill liquids, maps over fairly well into the software world. Too often we let the user just deal with stupid, simple, easily fixable problems. We could fix them, but we don't spend the time. These type of problems agitate me more and more as I work with technology. Focusing on the small stuff MATTERS. It makes an IMPACT. This no-drip spout pitcher impresses me more than any other piece of technology I've seen this year - even more than Siri (which is really, really cool). I think more companies need to focus on the small details - it's something I believe Apple does quite well. Focus on no-drip pour spouts. Delight users with that simple, saves-you-10-seconds every day type of boring feature. Nothing frustrates me more than wasting my time on something easily fixed or automated.&lt;br /&gt;
&lt;br /&gt;
I bet not a lot of people get excited about no-drip pour spouts - but I do. That's how I roll.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6511306120971083204-2331451758849207986?l=codecampfire.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeCampfire/~4/DyWo3YZboQk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codecampfire.blogspot.com/feeds/2331451758849207986/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codecampfire.blogspot.com/2011/11/its-pragprowrimo-again.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/2331451758849207986?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/2331451758849207986?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeCampfire/~3/DyWo3YZboQk/its-pragprowrimo-again.html" title="It's PragProWriMo again" /><author><name>Joshua McKinnon</name><uri>http://www.blogger.com/profile/07449570522421153119</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-59dTXSMtv9s/TYkTwzRMA1I/AAAAAAAAALc/_cmMHmiEpFo/s220/foo.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-LcL6XFwPdQQ/TrCOzYZWpkI/AAAAAAAAAN0/gUz40C3B6Nc/s72-c/electric_kettle_spout.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://codecampfire.blogspot.com/2011/11/its-pragprowrimo-again.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8ASXk8fyp7ImA9WhZaE08.&quot;"><id>tag:blogger.com,1999:blog-6511306120971083204.post-8481679221526204741</id><published>2011-06-29T00:14:00.000-04:00</published><updated>2011-06-29T00:14:08.777-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-29T00:14:08.777-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="user experience" /><category scheme="http://www.blogger.com/atom/ns#" term="gui" /><title>A Proper Emphasis on User Experience in Software: Example 1</title><content type="html">I found myself thrilled the other week by how awesome and helpful the messages in &lt;a href="http://www.imgburn.com/"&gt;ImgBurn&lt;/a&gt; are. I was slipstreaming some files on a Windows 7 DVD and wanted to keep it bootable, obviously. I figured I probably should do something but wasn't really sure what, so decided to just try and burn. The cost nowadays of a coaster is minimal.&lt;br /&gt;
&lt;br /&gt;
ImgBurn nicely informed me of my error:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-g2DyhZSDL54/Tgqh8iYwn2I/AAAAAAAAAMs/N1rdw-hbdvk/s1600/OMG_IMGBURN_ROCKS1.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="220" src="http://4.bp.blogspot.com/-g2DyhZSDL54/Tgqh8iYwn2I/AAAAAAAAAMs/N1rdw-hbdvk/s400/OMG_IMGBURN_ROCKS1.png" width="400" /&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;div align="left" class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;That is one of the best dialogs I have ever seen. Ever. It's not just evidence of smart logic, but also properly presenting it to me, and in an entertaining way to boot.. All developers dealing with UIs should learn from this great example.&lt;br /&gt;
&lt;br /&gt;
That wasn't it though, being out of practice I also forgot to create a volume label! Not to worry, ImgBurn also let me know about that:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-fB6AeOGciN0/Tgqi4MpZqnI/AAAAAAAAAMw/B7sWGtpvrcw/s1600/OMG_IMGBURN_ROCKS2.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="270" src="http://2.bp.blogspot.com/-fB6AeOGciN0/Tgqi4MpZqnI/AAAAAAAAAMw/B7sWGtpvrcw/s400/OMG_IMGBURN_ROCKS2.png" width="400" /&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div align="left" class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
This great usability and functionality exists in a FREE program! I love it. This type of excellence should be rewarded - and can be (there's an option to donate on the website).&lt;br /&gt;
&lt;br /&gt;
That's about it, really, I am seriously impressed by &lt;a href="http://www.imgburn.com/"&gt;ImgBurn&lt;/a&gt; - it's a great tool and deserves attention.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6511306120971083204-8481679221526204741?l=codecampfire.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeCampfire/~4/3BaT-hk6Y-w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codecampfire.blogspot.com/feeds/8481679221526204741/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codecampfire.blogspot.com/2011/06/proper-emphasis-on-user-experience-in.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/8481679221526204741?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/8481679221526204741?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeCampfire/~3/3BaT-hk6Y-w/proper-emphasis-on-user-experience-in.html" title="A Proper Emphasis on User Experience in Software: Example 1" /><author><name>Joshua McKinnon</name><uri>http://www.blogger.com/profile/07449570522421153119</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-59dTXSMtv9s/TYkTwzRMA1I/AAAAAAAAALc/_cmMHmiEpFo/s220/foo.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-g2DyhZSDL54/Tgqh8iYwn2I/AAAAAAAAAMs/N1rdw-hbdvk/s72-c/OMG_IMGBURN_ROCKS1.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://codecampfire.blogspot.com/2011/06/proper-emphasis-on-user-experience-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UDSHc7fyp7ImA9WhZaE0w.&quot;"><id>tag:blogger.com,1999:blog-6511306120971083204.post-763635396417888987</id><published>2011-06-28T09:00:00.003-04:00</published><updated>2011-06-28T23:47:59.907-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-28T23:47:59.907-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="eclipse" /><title>Don't Use "Duplicate" button to add a new JRE/JDK in Eclipse</title><content type="html">You may be tempted to use the "Duplicate..." button to add a new version of a JRE/JDK in Eclipse. Save yourself some potential hassle and use the "Add..." button instead. Manually copy and paste any Default VM Arguments you may have set afterwards.&lt;br /&gt;
&lt;br /&gt;
The problem with using "Duplicate" is that all of the system library links remain at the old JRE/JDK after you update the "JRE Home". This can cause very strange errors, such as the following:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;ZipFile.open(String, int, long) line: not available [native method]&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
JarFile(ZipFile).&lt;init&gt;(File, int) line: 114&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
JarFile.&lt;init&gt;(File, boolean, int) line: 135&amp;nbsp;&amp;nbsp; &lt;br /&gt;
JarFile.&lt;init&gt;(String) line: 72&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
URLClassPath$JarLoader.getJarFile(URL) line: 646&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
URLClassPath$JarLoader.access$600(URLClassPath$JarLoader, URL) line: 540&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
URLClassPath$JarLoader$1.run() line: 607&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
AccessController.doPrivileged(PrivilegedExceptionAction&lt;t&gt;) line: not available [native method]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
URLClassPath$JarLoader.ensureOpen() line: 599&amp;nbsp;&amp;nbsp; &lt;br /&gt;
URLClassPath$JarLoader.&lt;init&gt;(URL, URLStreamHandler, HashMap&lt;string,loader&gt;) line: 583&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
URLClassPath$3.run() line: 333&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
AccessController.doPrivileged(PrivilegedExceptionAction&lt;t&gt;) line: not available [native method]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
URLClassPath.getLoader(URL) line: 322&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
URLClassPath.getLoader(int) line: 299&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
URLClassPath.getResource(String, boolean) line: 168&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
URLClassLoader$1.run() line: 194&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/t&gt;&lt;/string,loader&gt;&lt;/init&gt;&lt;/t&gt;&lt;/init&gt;&lt;/init&gt;&lt;/init&gt;&lt;/blockquote&gt;&lt;br /&gt;
Some coworkers did this, and it caused a lot of headaches trying to figure out what was happening. Practically half the dev team has tried it at one point and learned the painful lesson, and it is an easy mistake to make.&lt;br /&gt;
&lt;br /&gt;
If you insist on using "Duplicate...", then there is an easy fix. After you've updated the JRE location, if you use the "Restore Default" button it will update your JRE library entries. It's still very easy to forget this step, which is potentially a lot more work than just copy pasting your Default VM Arguments. If you forget to copy those, diagnosing out of heap errors is a lot simpler.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6511306120971083204-763635396417888987?l=codecampfire.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeCampfire/~4/DOa5e3fdWRY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codecampfire.blogspot.com/feeds/763635396417888987/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codecampfire.blogspot.com/2011/06/dont-use-duplicate-button-to-add-new.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/763635396417888987?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/763635396417888987?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeCampfire/~3/DOa5e3fdWRY/dont-use-duplicate-button-to-add-new.html" title="Don't Use &quot;Duplicate&quot; button to add a new JRE/JDK in Eclipse" /><author><name>Joshua McKinnon</name><uri>http://www.blogger.com/profile/07449570522421153119</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-59dTXSMtv9s/TYkTwzRMA1I/AAAAAAAAALc/_cmMHmiEpFo/s220/foo.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://codecampfire.blogspot.com/2011/06/dont-use-duplicate-button-to-add-new.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkMEQXc_eip7ImA9WhZXFUw.&quot;"><id>tag:blogger.com,1999:blog-6511306120971083204.post-5426064313113475568</id><published>2011-05-04T08:00:00.003-04:00</published><updated>2011-05-04T08:00:00.942-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-04T08:00:00.942-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="useful-tips" /><title>Creating a Multi-boot USB drive</title><content type="html">Creating a bootable USB thumb drive from a single ISO is handy, but not on its own any big advantage over a bootable CD. A multi-boot USB thumb drive with every bootable ISO you want? That's something that is extremely useful, if you tend to need that kind of stuff frequently. It can also be a real time-saver - both by saving you time hunting through your stack of burned CDs, and because a modern USB thumb drive will load files dramatically faster than a CD-ROM will.&lt;br /&gt;
&lt;br /&gt;
I had kind of found a few ideas in the past, but last week I set out to start creating a multi-boot USB drive with all of the tools I frequently use. I picked up a 32GB thumb drive that should have plenty of room. To make my USB drive multi-boot, I used the &lt;a href="http://www.pendrivelinux.com/yumi-multiboot-usb-creator/"&gt;YUMI Multiboot USB Creator.&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
It is basically an NSIS installer that lets you select a USB drive, make it bootable, and select what ISOs you want to load. It will format it FAT32 for you if you want. (I'm not positive, but I suspect FAT32 may be required for some boot CDs/floppy images). It will even initiate the download of all of the ISOs it has in its prebuilt list. I found this really useful, though occasionally a newer version of a tool would be out and it wouldn't directly find it. It was still very easy to use. It also allows you to add unlisted bootable ISOs, which it will add to a separate list. I tested this with 2 vendor diagnostic boot CDs and they both worked - your mileage may vary with some ISOs.&lt;br /&gt;
&lt;br /&gt;
A point of confusion for me was how to add MULTIPLE ISOs. YUMI Multiboot USB Creator is designed to be run once per ISO. Don't try to add all of them at once, or you may end up scratching your head for a few minutes. Add them one at a time. At the end of each addition, it will ask you if you want to add another or not. Clicking yes, or running it again will add an additional bootable ISO while maintaining any that are already installed.It doesn't currently provide a way to remove a bootable ISO, so if you accidentally load the same one twice or otherwise want to remove one, you will have to edit the menu files by hand. This does appear to be a planned feature, though, so that may cease to be the case at some point. The version as of the time of this post is 0.0.1.1 - this version came out a couple of weeks ago, so it appears to be actively in development.&lt;br /&gt;
&lt;br /&gt;
Here are some of the ISOs I loaded on mine:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Clonezilla&lt;/li&gt;
&lt;li&gt;GParted&lt;/li&gt;
&lt;li&gt;DBAN&lt;/li&gt;
&lt;li&gt;Memtest86+ &lt;/li&gt;
&lt;li&gt;FreeDOS&lt;/li&gt;
&lt;li&gt;Ubuntu&lt;/li&gt;
&lt;li&gt;Vendor Hardware Diagnostic CDs&lt;/li&gt;
&lt;/ul&gt;Be sure to read the known issues list. If you load a Windows 7 install CD on there it may interfere with Ubuntu-based distros loading, and there are a few other minor caveats. I am very impressed with this though and look forward to utilizing YUMI Multiboot USB Creator to add more ISOs in the future.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6511306120971083204-5426064313113475568?l=codecampfire.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeCampfire/~4/qU5SR80TtVE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codecampfire.blogspot.com/feeds/5426064313113475568/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codecampfire.blogspot.com/2011/05/creating-multi-boot-usb-drive.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/5426064313113475568?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/5426064313113475568?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeCampfire/~3/qU5SR80TtVE/creating-multi-boot-usb-drive.html" title="Creating a Multi-boot USB drive" /><author><name>Joshua McKinnon</name><uri>http://www.blogger.com/profile/07449570522421153119</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-59dTXSMtv9s/TYkTwzRMA1I/AAAAAAAAALc/_cmMHmiEpFo/s220/foo.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://codecampfire.blogspot.com/2011/05/creating-multi-boot-usb-drive.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4CQXY_fip7ImA9WhZXFE4.&quot;"><id>tag:blogger.com,1999:blog-6511306120971083204.post-4977517479560662640</id><published>2011-05-03T12:09:00.000-04:00</published><updated>2011-05-03T12:09:20.846-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-03T12:09:20.846-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="useful-tips" /><title>Easily create an ISO image of a CD/DVD</title><content type="html">I occasionally find myself needing to create an ISO from a CD/DVD at work. Whether it's of some volume media, a diagnostics CD, or other CD that is created by a vendor. Today I found myself searching for a simple, free tool that does this. In particular, I recently burned a Lenovo diagnostics CD - it would not let me just create an ISO. I want an ISO so it can be a part of my multiboot USB drive with every ISO I frequently use.&lt;br /&gt;
&lt;br /&gt;
Thanks to a &lt;a href="http://superuser.com/questions/166996/simple-utility-to-rip-isos-on-windows-7"&gt;question on superuser&lt;/a&gt; I located and the corresponding answers, I found LC ISO Creator, a 14KB (KB!!!)&lt;a href="http://www.lucersoft.com/freeware.php"&gt; freeware tool from Lucersoft&lt;/a&gt;. It's as simple as it gets, and it works great.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6511306120971083204-4977517479560662640?l=codecampfire.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeCampfire/~4/iMLSpEXXOZc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codecampfire.blogspot.com/feeds/4977517479560662640/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codecampfire.blogspot.com/2011/05/easily-create-iso-image-of-cddvd.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/4977517479560662640?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/4977517479560662640?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeCampfire/~3/iMLSpEXXOZc/easily-create-iso-image-of-cddvd.html" title="Easily create an ISO image of a CD/DVD" /><author><name>Joshua McKinnon</name><uri>http://www.blogger.com/profile/07449570522421153119</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-59dTXSMtv9s/TYkTwzRMA1I/AAAAAAAAALc/_cmMHmiEpFo/s220/foo.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://codecampfire.blogspot.com/2011/05/easily-create-iso-image-of-cddvd.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEcGQn44fCp7ImA9WhZRFkQ.&quot;"><id>tag:blogger.com,1999:blog-6511306120971083204.post-589201009014698395</id><published>2011-04-13T08:00:00.002-04:00</published><updated>2011-04-13T08:00:23.034-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-13T08:00:23.034-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="browser uxfail" /><title>Browser Behavior Audit: Mailto: links</title><content type="html">I don't run a desktop mail client any more at home. I'm sure most users don't. It's because of this that I have no default mail client installed. Occasionally I click a mailto: link. Maybe I want to email someone from their contact page, or sign up for a mailing list. &lt;br /&gt;
&lt;br /&gt;
I was a little surprised when I tried this in Chrome and nothing happened. No error, no dialog, no beep. NOTHING.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Let's do a quick audit of the current browsers:&lt;br /&gt;
&lt;br /&gt;
Chrome 10: nothing happens. This sucks.&lt;br /&gt;
&lt;br /&gt;
IE9: Error dialog:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-MWeIMvIjZtA/TaU6UpgVzEI/AAAAAAAAAMU/naPgQ43XpOY/s1600/IE9_mailto_no_default.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="138" src="http://3.bp.blogspot.com/-MWeIMvIjZtA/TaU6UpgVzEI/AAAAAAAAAMU/naPgQ43XpOY/s400/IE9_mailto_no_default.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
This sucks, but at least it tells me.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Safari (latest as of this writing):&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-kfgBn_57Pdg/TaU6psm3Y-I/AAAAAAAAAMY/Yfk-lqG0lM8/s1600/safari_weird.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="97" src="http://2.bp.blogspot.com/-kfgBn_57Pdg/TaU6psm3Y-I/AAAAAAAAAMY/Yfk-lqG0lM8/s640/safari_weird.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;Similar to IE9...&lt;br /&gt;
&lt;br /&gt;
Opera 11:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-oLQP_E2RpZc/TaU7BiRbywI/AAAAAAAAAMc/r8C5L1F1ZYk/s1600/opera_mailto.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="223" src="http://2.bp.blogspot.com/-oLQP_E2RpZc/TaU7BiRbywI/AAAAAAAAAMc/r8C5L1F1ZYk/s400/opera_mailto.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Much better. However, if I choose system default, nothing will happen once I click on links. It at least prompts me with options though - it receives a passing grade. Note: Gmail is not currently a web mail service option, or I would be more excited that it offers "web mail service" options. The built in mail client is nice, though, so it is a valid option.&lt;br /&gt;
&lt;br /&gt;
Firefox 4:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-ub3yYuQme00/TaU7S1w0f-I/AAAAAAAAAMg/5ZzcOx6Ll8E/s1600/firefox_mailto.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://4.bp.blogspot.com/-ub3yYuQme00/TaU7S1w0f-I/AAAAAAAAAMg/5ZzcOx6Ll8E/s400/firefox_mailto.png" width="375" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Gold star Firefox. Gold. Star. Firefox not only prompts me, it has a gmail option. I'm already logged into my gmail in my browser anyway - if I am, it will directly open a compose mail for me. If not, it will bring me to a gmail login page. GIANT HIGH FIVE!!! Usability Win!&lt;br /&gt;
&lt;br /&gt;
I was so delighted to see this screen with a gmail option, I drew a trophy for Firefox 4:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-RAN75nd-vOE/TaU74YxHeUI/AAAAAAAAAMk/liwOA50iQTA/s1600/FirefoxNumberOneAward.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://1.bp.blogspot.com/-RAN75nd-vOE/TaU74YxHeUI/AAAAAAAAAMk/liwOA50iQTA/s320/FirefoxNumberOneAward.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;My drawing skills are lacking, but Firefox 4's user experience skills certainly aren't. I'm impressed. In fact, the more I toy with Firefox 4, the more I like it.&lt;br /&gt;
&lt;br /&gt;
We live in a webmail age - I bet most people don't have desktop mail  clients any more. Why is such basic functionality seriously lacking? Does nobody ever click a mailto: link? (I admit I only do so a couple of times a year). It may be a minor qualm, but I expect these types of simple usability cases to just work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6511306120971083204-589201009014698395?l=codecampfire.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeCampfire/~4/Cp6rrkWrgDc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codecampfire.blogspot.com/feeds/589201009014698395/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codecampfire.blogspot.com/2011/04/browser-behavior-audit-mailto-links.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/589201009014698395?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/589201009014698395?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeCampfire/~3/Cp6rrkWrgDc/browser-behavior-audit-mailto-links.html" title="Browser Behavior Audit: Mailto: links" /><author><name>Joshua McKinnon</name><uri>http://www.blogger.com/profile/07449570522421153119</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-59dTXSMtv9s/TYkTwzRMA1I/AAAAAAAAALc/_cmMHmiEpFo/s220/foo.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-MWeIMvIjZtA/TaU6UpgVzEI/AAAAAAAAAMU/naPgQ43XpOY/s72-c/IE9_mailto_no_default.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://codecampfire.blogspot.com/2011/04/browser-behavior-audit-mailto-links.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUUGRXs-eCp7ImA9WhZRFU8.&quot;"><id>tag:blogger.com,1999:blog-6511306120971083204.post-1201382613934844873</id><published>2011-04-11T08:00:00.001-04:00</published><updated>2011-04-11T08:00:24.550-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-11T08:00:24.550-04:00</app:edited><title>Port test websites rock</title><content type="html">So you're at home, and you want to connect with a friend online. Maybe it's some &lt;a href="http://www.minecraft.net/"&gt;Minecraft&lt;/a&gt; and you start your own server. Maybe it's an &lt;a href="http://www.igniterealtime.org/index.jsp"&gt;XMPP server&lt;/a&gt; for a little pair programming with &lt;a href="http://www.saros-project.org/"&gt;Saros&lt;/a&gt;. Whatever the case, you've likely got multiple barriers to success. Your OS firewall. Your router firewall. NAT.&lt;br /&gt;
&lt;br /&gt;
You try one thing, then hope it works. Then try again. How do you know it will work? An external port tester.&lt;br /&gt;
&lt;br /&gt;
That's when a website like &lt;a href="http://www.canyouseeme.org/"&gt;http://www.canyouseeme.org/&lt;/a&gt; comes in. It will check if your port is open from the web or not, and save you time. Saving time is good. I think in the future routers should offer this functionality themselves. Let me pretend I'm outside, and I'll tell you if I can reach you. That would be sweet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6511306120971083204-1201382613934844873?l=codecampfire.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeCampfire/~4/z8B4mHRVSNY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codecampfire.blogspot.com/feeds/1201382613934844873/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codecampfire.blogspot.com/2011/04/port-test-websites-rock.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/1201382613934844873?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/1201382613934844873?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeCampfire/~3/z8B4mHRVSNY/port-test-websites-rock.html" title="Port test websites rock" /><author><name>Joshua McKinnon</name><uri>http://www.blogger.com/profile/07449570522421153119</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-59dTXSMtv9s/TYkTwzRMA1I/AAAAAAAAALc/_cmMHmiEpFo/s220/foo.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://codecampfire.blogspot.com/2011/04/port-test-websites-rock.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEYHQnkzeCp7ImA9WhZRE08.&quot;"><id>tag:blogger.com,1999:blog-6511306120971083204.post-5125216936252650439</id><published>2011-04-07T20:46:00.001-04:00</published><updated>2011-04-09T01:15:33.780-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-09T01:15:33.780-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="virtualization" /><category scheme="http://www.blogger.com/atom/ns#" term="hyper-v" /><title>Hyper-V Server 2008 R2 Remote Disk Management from Windows 7 on a Domain</title><content type="html">I'm in the process of migrating a build machine to a Hyper-V Server 2008 R2 SP1 setup. I'm relatively new to Hyper-V, and may also be comparing with other options. The Hyper-V Server is joined to the domain, all standard remote management options from the console are turned on. I could connect with the Hyper-V Manager from a Windows 7 machine fine, but could not remotely manage the disks in Windows 7. I read &lt;a href="http://social.technet.microsoft.com/Forums/en-US/winserverhyperv/thread/988dbc8d-4b0d-4eb7-9837-6862033b5f36/"&gt;this post&lt;/a&gt; and here is what worked for me.&lt;br /&gt;
&lt;br /&gt;
On the &lt;i&gt;connecting&lt;/i&gt; machine, Windows 7, I had to add the following firewall rule:&lt;br /&gt;
&lt;br /&gt;
netsh advfirewall firewall set rule group="Remote Volume Management" new enable=yes&lt;br /&gt;
&lt;br /&gt;
Remote management of Services was working, and I had enabled Virtual Disk Service on the Hyper-V box. Following a reboot, I could finally manage the disks remotely.&lt;br /&gt;
&lt;br /&gt;
Prior to this, I believe any servers on the domain could manage them - just not my Windows 7 workstation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is only the beginning of my hypervisor adventures, as I try to convert 10 physical build machines running &lt;a href="http://jenkins-ci.org/"&gt;Jenkins&lt;/a&gt; masters into a fully virtualized fleet, double the amount of builds that occur, and centralize to 1 hudson master. I'll try to chronicle my findings here on this blog.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6511306120971083204-5125216936252650439?l=codecampfire.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeCampfire/~4/n9MEHXQVdoQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codecampfire.blogspot.com/feeds/5125216936252650439/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codecampfire.blogspot.com/2011/04/hyper-v-server-2008-r2-remote-disk.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/5125216936252650439?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/5125216936252650439?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeCampfire/~3/n9MEHXQVdoQ/hyper-v-server-2008-r2-remote-disk.html" title="Hyper-V Server 2008 R2 Remote Disk Management from Windows 7 on a Domain" /><author><name>Joshua McKinnon</name><uri>http://www.blogger.com/profile/07449570522421153119</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-59dTXSMtv9s/TYkTwzRMA1I/AAAAAAAAALc/_cmMHmiEpFo/s220/foo.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://codecampfire.blogspot.com/2011/04/hyper-v-server-2008-r2-remote-disk.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUENQ346fip7ImA9WhZTGEk.&quot;"><id>tag:blogger.com,1999:blog-6511306120971083204.post-8906758178439954709</id><published>2011-03-22T21:28:00.000-04:00</published><updated>2011-03-22T21:28:12.016-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-22T21:28:12.016-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="musings" /><title>Why add-ons suck</title><content type="html">This dialog, that's why:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh6.googleusercontent.com/-87jxS2iZjYs/TYkV6G8IrwI/AAAAAAAAAMA/Va3qaDmB_j8/s1600/firefox4_incompatible_addons.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://lh6.googleusercontent.com/-87jxS2iZjYs/TYkV6G8IrwI/AAAAAAAAAMA/Va3qaDmB_j8/s1600/firefox4_incompatible_addons.png" /&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
Firefox 4.0 is officially out. I think it's great that Firefox has such a huge array of add-ons. They make a lot of people happy, and are often a justification for why people like the browser. The problem is when I upgrade to a new version and I can no longer use an add-on that is part of my core usage... This has happened a great many times...and every time it is less and less cool.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I'm probably in the minority for considering mouse gestures mandatory capability - but I do, and that requires an add-on in Firefox. There is hope, though.&lt;br /&gt;
&lt;br /&gt;
The Firefox team seems to be taking a nod from Chrome's release cycle, and have vowed much faster, smaller releases going forward. From the "How to ship faster" section of the &lt;a href="https://wiki.mozilla.org/Firefox/Roadmap#Product_Priorities_for_2011"&gt;2011 priorities/roadmap&lt;/a&gt; there is the following bullet point:&lt;br /&gt;
&lt;blockquote&gt;we must provide binary compatibility for Add-ons&amp;nbsp;&lt;/blockquote&gt;If that happens in 6-8 months (or whatever the timeline), it would remove my single biggest irritation with Firefox. Aside from the above dialog, Firefox 4 seems to bring an aweful lot of good to the table. I continue to happily keep 4 browsers installed on my machine...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6511306120971083204-8906758178439954709?l=codecampfire.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeCampfire/~4/kClvpIzTH8o" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codecampfire.blogspot.com/feeds/8906758178439954709/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codecampfire.blogspot.com/2011/03/why-add-ons-suck.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/8906758178439954709?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/8906758178439954709?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeCampfire/~3/kClvpIzTH8o/why-add-ons-suck.html" title="Why add-ons suck" /><author><name>Joshua McKinnon</name><uri>http://www.blogger.com/profile/07449570522421153119</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-59dTXSMtv9s/TYkTwzRMA1I/AAAAAAAAALc/_cmMHmiEpFo/s220/foo.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh6.googleusercontent.com/-87jxS2iZjYs/TYkV6G8IrwI/AAAAAAAAAMA/Va3qaDmB_j8/s72-c/firefox4_incompatible_addons.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://codecampfire.blogspot.com/2011/03/why-add-ons-suck.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEYGRHg8eCp7ImA9Wx9RGEo.&quot;"><id>tag:blogger.com,1999:blog-6511306120971083204.post-4224586816762447404</id><published>2010-12-17T17:39:00.001-05:00</published><updated>2010-12-20T15:15:25.670-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-20T15:15:25.670-05:00</app:edited><title>Trogdor login screen</title><content type="html">I think in general, it is bad security practice to display a lot of identifiable information at an SSH login prompt. If there's a known exploit for distro X version XYZ, you don't want to give someone a fast path to utilizing it.&lt;br /&gt;
&lt;br /&gt;
I was setting up a new test VM at work, so I decided to have fun...and came up with (possibly) one of the greatest things ever. The trogdor ASCII art login screen.&lt;br /&gt;
&lt;br /&gt;
Step 1 - &lt;a href="http://groups.google.com/group/alt.ascii-art/search?group=alt.ascii-art&amp;amp;q=trogdor&amp;amp;qt_g=Search+this+group"&gt;search alt.ascii-art for "trogdor" on google groups&lt;/a&gt;&lt;br /&gt;
Step 2 - copy paste and save to a file on your server&lt;br /&gt;
Step 3 - configure SSH server to display a banner&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/__ZHZfK61_8U/TQvk0FFwUrI/AAAAAAAAAK4/wg2tjolvDHw/s1600/trogdor_login2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/__ZHZfK61_8U/TQvk0FFwUrI/AAAAAAAAAK4/wg2tjolvDHw/s1600/trogdor_login2.png" /&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align="left" class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
The only down side is that my PUTTY window needs to be long enough to see the full awesomeness of this trogdor ascii art. I take zero credit for the ascii art, which you can find by clicking the google groups link above.&lt;br /&gt;
&lt;br /&gt;
I'm kind of a newbie at configuring SSH, so I'm not sure if banners always display after you type your username...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6511306120971083204-4224586816762447404?l=codecampfire.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeCampfire/~4/FdsbPKOAGNQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codecampfire.blogspot.com/feeds/4224586816762447404/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codecampfire.blogspot.com/2010/12/trogdor-login-screen.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/4224586816762447404?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/4224586816762447404?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeCampfire/~3/FdsbPKOAGNQ/trogdor-login-screen.html" title="Trogdor login screen" /><author><name>Joshua McKinnon</name><uri>http://www.blogger.com/profile/07449570522421153119</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-59dTXSMtv9s/TYkTwzRMA1I/AAAAAAAAALc/_cmMHmiEpFo/s220/foo.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/__ZHZfK61_8U/TQvk0FFwUrI/AAAAAAAAAK4/wg2tjolvDHw/s72-c/trogdor_login2.png" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://codecampfire.blogspot.com/2010/12/trogdor-login-screen.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUNQX46eSp7ImA9Wx9TEEg.&quot;"><id>tag:blogger.com,1999:blog-6511306120971083204.post-8876012126273150797</id><published>2010-11-18T00:14:00.000-05:00</published><updated>2010-11-18T00:14:50.011-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-18T00:14:50.011-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="iPad" /><title>Solution to a slow syncing iPad</title><content type="html">I noticed sometimes my iPad takes FOREVER to sync. Specifically, my ipad takes forever to backup before it starts syncing. I recently stopped syncing it to my macbook pro and began syncing it on a windows 7 system - iTunes has been behaving awesome for me on Windows, contrary to frequent opinion. At first, I was careful, and only ever used my iPad cable... but it's just a USB cable, so eventually I slipped and starting using my iPhone cable.&lt;br /&gt;
&lt;br /&gt;
I'm not sure what's special about the iPad cable, aside from combined with the iPad charger it is a higher power charger, but it appears that backing up your iPad (even when it has practically nothing on it - as I recently cleaned mine out) can take ages if you use the wrong cable. Facepalm. It took some reading up on this to realize what I as doing wrong. It's a double facepalm for this even being an issue - I am not sure why an iPhone 3G or 4 cable would cause slow syncing...but it looks like it does. In my case it's slow backing up...like 30 mins to an hour when nothing has even changed. Problem solved though - use the iPad cable.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6511306120971083204-8876012126273150797?l=codecampfire.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeCampfire/~4/62Cqs2hfkpg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codecampfire.blogspot.com/feeds/8876012126273150797/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codecampfire.blogspot.com/2010/11/solution-to-slow-syncing-ipad.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/8876012126273150797?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/8876012126273150797?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeCampfire/~3/62Cqs2hfkpg/solution-to-slow-syncing-ipad.html" title="Solution to a slow syncing iPad" /><author><name>Joshua McKinnon</name><uri>http://www.blogger.com/profile/07449570522421153119</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-59dTXSMtv9s/TYkTwzRMA1I/AAAAAAAAALc/_cmMHmiEpFo/s220/foo.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://codecampfire.blogspot.com/2010/11/solution-to-slow-syncing-ipad.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak8EQHo4fSp7ImA9Wx5aGUQ.&quot;"><id>tag:blogger.com,1999:blog-6511306120971083204.post-5040137827677797963</id><published>2010-11-17T08:00:00.008-05:00</published><updated>2010-11-17T08:00:01.435-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-17T08:00:01.435-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="oracle" /><title>Oracle: How to find the service name of a database instance (SID)</title><content type="html">At work I ran into a surprising issue. It's hard to find a service name for an Oracle database when all you know is the SID if you don't know exactly where to look. Hard, even for large, corporate Oracle deployments with DBAs you can ask. I found it hard to believe, but we've had issues several times now where it has been difficult for customers to determine a service name for their oracle database instance. Now, of course our application lets you enter SID or Service Name and handles URL formats for you and everything - that is not the problem. The problem is when administrative work needs to be done. It usually isn't an oracle DBA handling administrative tasks for our software at a customer site, since the DBAs are a precious resource.&lt;br /&gt;
&lt;br /&gt;
Now, first a quick refresher:&lt;br /&gt;
&lt;br /&gt;
SID - System Identifier uniquely identifying a database instance. Each database instance has an SID - one and only one.&lt;br /&gt;
Service Name - An alias to one or more INSTANCES (useful for clustering, failover, without changing end-user configurations) - introduced in Oracle 8.&lt;br /&gt;
&lt;br /&gt;
One SID could have a hundred service names pointing to it if you wanted to...but I'm pretty sure at a minimum it will have one. When you create an instance, Oracle makes you name them both. The 10g Configuration Assistant on Windows has a field named Global Database Name, which maps to Service Name. The SID is&lt;br /&gt;
frequently, but not always, the same as the initially specified Global Database Name.&lt;br /&gt;
&lt;br /&gt;
After the creation of a database instance, Oracle tools refer strictly to the SID - after all, that is the name of the instance you'd be configuring. Since Service Name is just an alias, you wouldn't configure the character set or memory options of an alias.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Why do I care what the service name is if I have the SID?&lt;br /&gt;
&lt;br /&gt;
Because knowing it lets me avoid relying on properly configured tnsnames.ora on each client machine. Sometimes, tnsnames.ora files appear to be controlled by a dark magic - the same tnsnames.ora file works fine on one machine, but fails inexplicably on another client machine. Sometimes TNS doesn't work right - and for a Java application that's going to be using JDBC, needing to configure tnsnames.ora is unnecessary work. For the command line tools like SQLPLUS and the import/export tools, you can use the &lt;a href="http://www.orafaq.com/wiki/EZCONNECT"&gt;EZCONNECT&lt;/a&gt; URL format and avoid TNS completely. There's a catch - EZCONNECT only accepts Service Names.&lt;br /&gt;
&lt;br /&gt;
So, how do you determine the service name? Here's one way...&lt;br /&gt;
&lt;br /&gt;
This assumes you have access to the oracle server. Provided you do, simply use the command:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;lsnrctl status&lt;/blockquote&gt;&lt;br /&gt;
This will print out various status information, as well as a compact listing of configured service names and which instances they point at. You could also use &lt;em&gt;lsnrctl services&lt;/em&gt; for slightly more verbose services output - but depending on how many service names and instances there are, it may be harder to look at.&lt;br /&gt;
&lt;br /&gt;
It's kind of anti-climatic, but that simple command ended the confusion. I thought Service Name was preferred (as it is more flexible than directly specifying the SID), but apparently it isn't always the case.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6511306120971083204-5040137827677797963?l=codecampfire.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeCampfire/~4/BoP-rVNBUE4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codecampfire.blogspot.com/feeds/5040137827677797963/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codecampfire.blogspot.com/2010/11/oracle-how-to-find-service-name-of.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/5040137827677797963?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/5040137827677797963?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeCampfire/~3/BoP-rVNBUE4/oracle-how-to-find-service-name-of.html" title="Oracle: How to find the service name of a database instance (SID)" /><author><name>Joshua McKinnon</name><uri>http://www.blogger.com/profile/07449570522421153119</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-59dTXSMtv9s/TYkTwzRMA1I/AAAAAAAAALc/_cmMHmiEpFo/s220/foo.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://codecampfire.blogspot.com/2010/11/oracle-how-to-find-service-name-of.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0EAQHY7eSp7ImA9Wx5aGUo.&quot;"><id>tag:blogger.com,1999:blog-6511306120971083204.post-5770895325172720517</id><published>2010-11-17T00:27:00.000-05:00</published><updated>2010-11-17T00:27:21.801-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-17T00:27:21.801-05:00</app:edited><title>Booklist updated, no Tuesday post</title><content type="html">No Tuesday post, but I did spend time working on a longer post that just isn't quite ready yet. Sleep is more important...&lt;br /&gt;
&lt;br /&gt;
I did update my &lt;a href="http://codecampfire.blogspot.com/p/bookshelf.html"&gt;bookshelf&lt;/a&gt; the other night though. Eventually I'll better separate it into a recommendation section, what I've read, and my current queue of books awaiting reading. I often have bigger eyes purchasing books than I do reading, so I always have a long backlog.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6511306120971083204-5770895325172720517?l=codecampfire.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeCampfire/~4/S__E-HNqfrM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codecampfire.blogspot.com/feeds/5770895325172720517/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codecampfire.blogspot.com/2010/11/booklist-updated-no-tuesday-post.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/5770895325172720517?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/5770895325172720517?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeCampfire/~3/S__E-HNqfrM/booklist-updated-no-tuesday-post.html" title="Booklist updated, no Tuesday post" /><author><name>Joshua McKinnon</name><uri>http://www.blogger.com/profile/07449570522421153119</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-59dTXSMtv9s/TYkTwzRMA1I/AAAAAAAAALc/_cmMHmiEpFo/s220/foo.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://codecampfire.blogspot.com/2010/11/booklist-updated-no-tuesday-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEcEQXYzeCp7ImA9Wx5aGE8.&quot;"><id>tag:blogger.com,1999:blog-6511306120971083204.post-4951906799839373097</id><published>2010-11-15T08:00:00.000-05:00</published><updated>2010-11-15T08:00:00.880-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-15T08:00:00.880-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="rambling" /><category scheme="http://www.blogger.com/atom/ns#" term="stumbleupon" /><title>Stumbleupon is neat</title><content type="html">A coworker recently told me he finds some really cool stuff using &lt;a href="http://www.stumbleupon.com/"&gt;Stumbleupon&lt;/a&gt;. Now, I had heard of Stumbleupon before, but I had never tried it. I'm not sure why. The concept is cool.&lt;br /&gt;
&lt;br /&gt;
I gave it a spin today, and here's my experience so far. Account sign up? Fairly easy, though it did kind of nag me to use a facebook account and import some friends or something. Once that was setup, it was fairly straightforward.&lt;br /&gt;
&lt;br /&gt;
So far I've found a couple of really cool links, after telling it I liked ~35 things, and disliked 5, and skipping a few.&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://insideria.com/2009/12/28-rich-data-visualization-too.html"&gt;28 Rich Data Visualization Tools&lt;/a&gt; - some really cool graph and chart tools&lt;/li&gt;
&lt;li&gt;&lt;a href="http://uxmovement.com/"&gt;UX Movement&lt;/a&gt; - a great site about user experience. I'm already learning some useful things, like better ways of presenting form data and search buttons.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;So, Stumbleupon is pretty neat. That's it for now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6511306120971083204-4951906799839373097?l=codecampfire.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeCampfire/~4/Eb4Pk90i5tw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codecampfire.blogspot.com/feeds/4951906799839373097/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codecampfire.blogspot.com/2010/11/stumbleupon-is-neat.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/4951906799839373097?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/4951906799839373097?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeCampfire/~3/Eb4Pk90i5tw/stumbleupon-is-neat.html" title="Stumbleupon is neat" /><author><name>Joshua McKinnon</name><uri>http://www.blogger.com/profile/07449570522421153119</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-59dTXSMtv9s/TYkTwzRMA1I/AAAAAAAAALc/_cmMHmiEpFo/s220/foo.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://codecampfire.blogspot.com/2010/11/stumbleupon-is-neat.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEcGRncycCp7ImA9Wx5aF0Q.&quot;"><id>tag:blogger.com,1999:blog-6511306120971083204.post-6705823978253647679</id><published>2010-11-14T23:40:00.000-05:00</published><updated>2010-11-14T23:40:27.998-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-14T23:40:27.998-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="goals" /><category scheme="http://www.blogger.com/atom/ns#" term="writing" /><title>November month in Writing: Week 2 summary</title><content type="html">I was able to broadly stick to my writing plan last week, as well as converted a couple of my drafts into finished posts. I read just shy of the first 50 pages of "Release It!", and I am enjoying it so far. Every weekday post was scheduled for 8:00AM. This doesn't appear to make a difference when you have no readership :) I need to write some meatier posts that I can submit to Dzone - that does makes a difference.&lt;br /&gt;
&lt;br /&gt;
I failed at pursuing a Hudson / Opera issue that has plagued me. I'll restate the goal for this week... I just need to go through history, merge some modifications to prototype.js into prototype 1.6, then create a patch file and see if anyone is willing to take my patch for a spin (as well as stage it in my environment for a while).&lt;br /&gt;
&lt;br /&gt;
As for general week's news:&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.apple.com/pr/library/2010/11/12openjdk.html"&gt;Oracle and Apple Announce OpenJDK Project for Mac OS X&amp;nbsp;&lt;/a&gt; - the future of Java on OS X seems assured now. Cool.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://blog.mozilla.com/blog/2010/11/10/fasten-your-seatbelts-latest-firefox-4-beta-boosts-speed-in-the-browser/"&gt;Mozilla released Firefox 4 Beta 7&lt;/a&gt; - this added JIT to their Javascript engine, and it's now faster than everything except Opera 11 alpha at Javascript. Woot - I was beginning to think IE9 would be faster, but I am glad to see Firefox 4 gain some serious speed. Competition is good, and it is my #2 browser.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://inhabitat.com/2010/11/10/gold-nanoparticles-could-transform-trees-into-street-lights/"&gt;Gold Nanoparticles Could Transform Trees Into Street Lights&lt;/a&gt; - this is just amazing. I spotted this on twitter and then later on engadget...&lt;br /&gt;
&lt;br /&gt;
No specific ideas for topics this week yet...we'll see what happens.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6511306120971083204-6705823978253647679?l=codecampfire.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeCampfire/~4/Ip71_ZpvJBE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codecampfire.blogspot.com/feeds/6705823978253647679/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codecampfire.blogspot.com/2010/11/november-month-in-writing-week-2.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/6705823978253647679?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/6705823978253647679?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeCampfire/~3/Ip71_ZpvJBE/november-month-in-writing-week-2.html" title="November month in Writing: Week 2 summary" /><author><name>Joshua McKinnon</name><uri>http://www.blogger.com/profile/07449570522421153119</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-59dTXSMtv9s/TYkTwzRMA1I/AAAAAAAAALc/_cmMHmiEpFo/s220/foo.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://codecampfire.blogspot.com/2010/11/november-month-in-writing-week-2.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUUER3s7eyp7ImA9Wx5aFkg.&quot;"><id>tag:blogger.com,1999:blog-6511306120971083204.post-9145385591607885822</id><published>2010-11-13T08:00:00.000-05:00</published><updated>2010-11-13T08:00:06.503-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-13T08:00:06.503-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="utilities" /><title>muCommander - the ultimate cross platform utility</title><content type="html">Despite NTFS supporting very long path names, Windows frequently &lt;a href="http://codecampfire.blogspot.com/2009/11/windows-file-path-fail.html"&gt;has issues&lt;/a&gt; with long filepaths. Sometimes you need to bring in another tool for the job.&lt;br /&gt;
&lt;br /&gt;
My favorite tool for dealing with long filepaths is &lt;a href="http://www.mucommander.com/"&gt;muCommander&lt;/a&gt;. It is a Java app that mimics the traditional "Norton Commander" user interface. Java uses the API in Windows that supports longer filepaths, so muCommander has no trouble dealing with extra long file paths. It's not just for Windows, though - it's available on a lot of platforms.&lt;br /&gt;
&lt;br /&gt;
muCommander is much more than a better file explorer, too. It has built in support for loads of protocols:&lt;br /&gt;
&lt;blockquote&gt;Virtual filesystem with support for local volumes, FTP, SFTP, SMB, NFS, HTTP, Amazon S3, Hadoop HDFS and Bonjour&lt;/blockquote&gt;You mean I can have my local filesystem on one side, and an SFTP session on the other? Awesome.&lt;br /&gt;
&lt;br /&gt;
It can even open and edit zip files in-place.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Plus - it has a sweet logo.&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/__ZHZfK61_8U/TNzL9sR-ubI/AAAAAAAAAK0/7FHDOxS6hKc/s1600/muCommanderLogo.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/__ZHZfK61_8U/TNzL9sR-ubI/AAAAAAAAAK0/7FHDOxS6hKc/s1600/muCommanderLogo.png" style="cursor: move;" /&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: left;"&gt;muCommander is an awesome utility to keep in your toolbox.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6511306120971083204-9145385591607885822?l=codecampfire.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeCampfire/~4/zpyDHfQm-RA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codecampfire.blogspot.com/feeds/9145385591607885822/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codecampfire.blogspot.com/2010/11/mucommander-ultimate-cross-platform.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/9145385591607885822?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/9145385591607885822?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeCampfire/~3/zpyDHfQm-RA/mucommander-ultimate-cross-platform.html" title="muCommander - the ultimate cross platform utility" /><author><name>Joshua McKinnon</name><uri>http://www.blogger.com/profile/07449570522421153119</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-59dTXSMtv9s/TYkTwzRMA1I/AAAAAAAAALc/_cmMHmiEpFo/s220/foo.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/__ZHZfK61_8U/TNzL9sR-ubI/AAAAAAAAAK0/7FHDOxS6hKc/s72-c/muCommanderLogo.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://codecampfire.blogspot.com/2010/11/mucommander-ultimate-cross-platform.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE8FQXc7fCp7ImA9Wx5aFUs.&quot;"><id>tag:blogger.com,1999:blog-6511306120971083204.post-6711649022387153894</id><published>2010-11-12T08:00:00.000-05:00</published><updated>2010-11-12T08:00:10.904-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-12T08:00:10.904-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="notepad2" /><category scheme="http://www.blogger.com/atom/ns#" term="editors" /><title>Replacing Notepad with Notepad2</title><content type="html">I've been using &lt;a href="http://www.flos-freeware.ch/notepad2.html"&gt;Notepad2&lt;/a&gt; as a light-weight replacement for the notepad.exe that comes with Windows for several years. Let's face it, the original notepad.exe falls short on many levels - no auto-tab, no multi-line tabbing/untabbing, poor line endings support to start... I've always felt it was inferior to even the old MS-DOS EDIT, which is a pretty sad statement. In comes Notepad2, fixing all of its shortcomings while remaining lightweight, and adding some other nice features as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It's always been somewhat of a pain to perform the replacement to Notepad2, since notepad.exe is considered a protected operating system file in XP and Windows 7. Fortunately, Kai Liu wrote an installer that does this for you automatically! I just learned about this this week and figured I would share.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To download the installer, just go to &lt;a href="http://code.kliu.org/misc/notepad2/"&gt;http://code.kliu.org/misc/notepad2/&lt;/a&gt; and scroll to the bottom, "Custom Notepad2 Builds", for both 32-bit and 64-bit machines.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6511306120971083204-6711649022387153894?l=codecampfire.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeCampfire/~4/t7BcC5wgZXU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codecampfire.blogspot.com/feeds/6711649022387153894/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codecampfire.blogspot.com/2010/11/replacing-notepad-with-notepad2.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/6711649022387153894?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/6711649022387153894?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeCampfire/~3/t7BcC5wgZXU/replacing-notepad-with-notepad2.html" title="Replacing Notepad with Notepad2" /><author><name>Joshua McKinnon</name><uri>http://www.blogger.com/profile/07449570522421153119</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-59dTXSMtv9s/TYkTwzRMA1I/AAAAAAAAALc/_cmMHmiEpFo/s220/foo.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://codecampfire.blogspot.com/2010/11/replacing-notepad-with-notepad2.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkMESXc-eCp7ImA9Wx5aFEU.&quot;"><id>tag:blogger.com,1999:blog-6511306120971083204.post-7135123546200236452</id><published>2010-11-11T08:00:00.009-05:00</published><updated>2010-11-11T08:00:08.950-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-11T08:00:08.950-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="musings" /><title>Desktop Java Apps - to bundle or not to bundle a JRE?</title><content type="html">First - here is my definition of bundling the JRE. Shipping your application with a JRE, such that it is the one used by default from your application startup scripts, regardless of the environment on the target system. The bundled JRE is not registered with the system, so it should not affect other applications on the system.&lt;br /&gt;
&lt;br /&gt;
There are probably some good reasons not to bundle a JRE. Taking a moment to ponder, I can think of at least the following:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Bloat&lt;/li&gt;
&lt;li&gt;No automatic security updates&lt;/li&gt;
&lt;li&gt;Less portable&lt;/li&gt;
&lt;/ul&gt;There may be more - but I believe the pro's will outweigh them regardless, once I add some additional constraints. Specifically, I am concerned with Java on the Windows desktop. Further, I am talking about larger, high engineering effort commercial software deployed to big companies. Not a small, independent Java app deployed to individual consumers. (although there may still be cases where that simplifies things). At a minimum, I would argue for stating "Use 1.6 Update X or higher" somewhere in a README, even for a small app. I've just seen too many weird issues not to.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On to some reasons for bundling a JRE:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Control over major Java version (1.4,1.5, 1.6) - this is less of an issue today, since 1.5 has reached its end-of-life and 1.4 is far behind that. Thank goodness for that.&lt;/li&gt;
&lt;li&gt;Control over the exact version (i.e. 1.6 Update 20) - to ensure mandatory functionality works properly&lt;/li&gt;
&lt;li&gt;So the end users don't need to install something additional&lt;/li&gt;
&lt;li&gt;So your program is not influenced by the system environment&lt;/li&gt;
&lt;li&gt;So your program does not influence other applications in the environment&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Less variables for when customers report bugs&lt;/li&gt;
&lt;li&gt;No automatic updates - which could break functionality&lt;/li&gt;
&lt;li&gt;Less to test&lt;/li&gt;
&lt;/ul&gt;See a theme? Better control. Also, better isolation from the environment and other things that can go wrong.&lt;br /&gt;
&lt;br /&gt;
For instance, in the 1.5 days, I recall one release that had very misbehaved tabbing through components in a UI. In the era of Windows 7 - you need a minimum of 1.6.0 Update 18 - or you have missing icons in Open/Save File Dialogs. It is not acceptable to have a UI defect like that in a shipping app - any less, and you don't have full Windows 7 support. Except on 64-bit systems Update 18 has a bad habit of crashing the JVM a lot...so you need a more recent update. Then there's the Swing/AWT changes in Update 12 that alter behavior. Then I'm pretty sure depending on the version, applets load differently, if that's a factor (in one of our cases, integration with another process - it is).&lt;br /&gt;
&lt;br /&gt;
You can avoid all that by picking a version you know works for your required situations. This means less to QA. Less potential headaches. The trade-off is losing faster security updates, increased application size (which believe it or not - still matters even in the age of 3TB hard drives), and portability. If you are in a Windows-only market, as I have seen several applications be, then portability isn't affected. Even if there are other target platforms - it's just a matter of repackaging for other platforms.&lt;br /&gt;
&lt;br /&gt;
I believe there are some good reasons to bundle a JRE - on Windows, anyway.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6511306120971083204-7135123546200236452?l=codecampfire.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeCampfire/~4/a2S6TlbGArk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codecampfire.blogspot.com/feeds/7135123546200236452/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codecampfire.blogspot.com/2010/11/desktop-java-apps-to-bundle-or-not-to.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/7135123546200236452?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/7135123546200236452?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeCampfire/~3/a2S6TlbGArk/desktop-java-apps-to-bundle-or-not-to.html" title="Desktop Java Apps - to bundle or not to bundle a JRE?" /><author><name>Joshua McKinnon</name><uri>http://www.blogger.com/profile/07449570522421153119</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-59dTXSMtv9s/TYkTwzRMA1I/AAAAAAAAALc/_cmMHmiEpFo/s220/foo.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://codecampfire.blogspot.com/2010/11/desktop-java-apps-to-bundle-or-not-to.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcEQHk9eSp7ImA9Wx5aE0Q.&quot;"><id>tag:blogger.com,1999:blog-6511306120971083204.post-3124527427102882473</id><published>2010-11-10T08:00:00.000-05:00</published><updated>2010-11-10T08:00:01.761-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-10T08:00:01.761-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="usability" /><category scheme="http://www.blogger.com/atom/ns#" term="musings" /><title>Usability Fail - Confirm Then Swipe</title><content type="html">I consider a fundamental goal of software, and technology in general, to make people's lives easier. To simplify, automate, and perform useful functions. When the above holds true, technology is a success. When technology gets in the way, is a hassle to use, or does not otherwise improve an existing process - it is a failing and does not have purpose.&lt;br /&gt;
&lt;br /&gt;
First, a success story. Trader Joe's is a very pleasant place to shop, all the way through. The checkout process is one reason for this great experience. The first time I went to one was several years ago, and I was pleasantly surprised during checkout.&lt;br /&gt;
&lt;br /&gt;
The Card Swipe device:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Made it immediately obvious that I could swipe my card at any time&lt;/li&gt;
&lt;li&gt;Allowed me to enter DEBIT, PIN, Cashback options, all before the cashier had even finished scanning my items&lt;/li&gt;
&lt;li&gt;Provided a final confirmation once all items were scanned&lt;/li&gt;
&lt;/ol&gt;This is pure win, on all levels. I have true respect for the makers of this device. Others get 2 &amp;amp; 3, but some fail to make it obvious to the user that they can swipe early. No one likes waiting in line - this helps people wait in line for less time - both the person using the card swipe, as well as anyone behind them.&lt;br /&gt;
&lt;br /&gt;
Imagine my surprise when my local Market Basket got new card swipe devices a year or two ago, and they did not share this amazing feature. On the contrary - it required the &lt;em&gt;exact opposite&lt;/em&gt;. Enter the "Confirm Then Swipe", a giant &lt;strong&gt;usability fail&lt;/strong&gt;.&lt;br /&gt;
&lt;br /&gt;
Here is a basic rundown of the Bad Card Swipe Device (TM):&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;You must wait until the cashier has scanned the final item&lt;/li&gt;
&lt;li&gt;The cashier then usually asks credit or debit.&lt;/li&gt;
&lt;li&gt;The cashier reminds you to "Confirm then swipe"&lt;/li&gt;
&lt;li&gt;You confirm the amount&lt;/li&gt;
&lt;li&gt;You can then swipe your card&lt;/li&gt;
&lt;li&gt;Debit PIN&lt;/li&gt;
&lt;li&gt;Oops - you got your PIN wrong, try it again&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Final confirmation (?)&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
&lt;br /&gt;
What went wrong for a device with such a basic purpose to have been made this way? Is it short-sightedness of the developer? Is it due to the other vendor holding software patents? (more on software patents another day...) Whatever the cause - it really bums me out. How many wasted words are there on a daily basis, just to explain to the customers that they must confirm first? (plus the time that could have been saved if the swiping process was completed while items were still being scanned) How much time is lost by the patrons due to this every day? Per Year? This should not be the case, but sadly it is.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6511306120971083204-3124527427102882473?l=codecampfire.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeCampfire/~4/TDK26moBXSo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codecampfire.blogspot.com/feeds/3124527427102882473/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codecampfire.blogspot.com/2010/11/usability-fail-confirm-then-swipe.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/3124527427102882473?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/3124527427102882473?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeCampfire/~3/TDK26moBXSo/usability-fail-confirm-then-swipe.html" title="Usability Fail - Confirm Then Swipe" /><author><name>Joshua McKinnon</name><uri>http://www.blogger.com/profile/07449570522421153119</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-59dTXSMtv9s/TYkTwzRMA1I/AAAAAAAAALc/_cmMHmiEpFo/s220/foo.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://codecampfire.blogspot.com/2010/11/usability-fail-confirm-then-swipe.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUEEQHs-fyp7ImA9Wx5aE00.&quot;"><id>tag:blogger.com,1999:blog-6511306120971083204.post-1996487441423329511</id><published>2010-11-09T08:00:00.003-05:00</published><updated>2010-11-09T08:00:01.557-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-09T08:00:01.557-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="openID" /><category scheme="http://www.blogger.com/atom/ns#" term="musings" /><title>Thoughts on OpenID</title><content type="html">I've had an &lt;a href="http://openid.net/"&gt;OpenID&lt;/a&gt; for over two years now, since I joined &lt;a href="http://stackoverflow.com/"&gt;StackOverflow&lt;/a&gt; during the beta. A lot has probably happened since then. If memory serves correct, at least one OpenID provider went out of business. Others may have changed ownership - and new ones have surely emerged.&lt;br /&gt;
&lt;br /&gt;
How have my first 2 years with OpenID been? Well, I've only set it up on a whopping 2 websites, both of which are technically oriented. I have recently started seeing OpenID as an option on a few more websites, but not a lot.&lt;br /&gt;
&lt;br /&gt;
I attempted to set it up on a third (DZone), and although it allowed me to login, I could not verify my account, or join it to my non-OpenID account. This is probably just an issue with DZone, but if it was important enough, I would hope it'd be resolved.&lt;br /&gt;
&lt;br /&gt;
What implications are there to third party authentication such as OpenID over time? (say, 5-10 years). Quite a lot can happen to a company in that timeframe. Especially tech companies.&lt;br /&gt;
&lt;br /&gt;
Is it easy to switch OpenID providers? It seems like that is limited by whether every site you use supports adding a second OpenID or not. That may be a requirement of participating, I have no idea - so far, the two I care about have supported this.&lt;br /&gt;
&lt;br /&gt;
What happens if my OpenID provider, say, starts getting hosted in China. What happens if my OpenID provider goes down for good? Will I ever be able to reclaim my account?&lt;br /&gt;
&lt;br /&gt;
What happens, for instance, if my OpenID provider's SSL certificate expires? I can't get to my websites unless I accept an expired cert?&lt;br /&gt;
&lt;br /&gt;
For the record - back in August (when first typing this), the MyOpenID login page was doing just this - showing expired certificate messages. Even though it wasn't apparently needed for authentication (because rest assured - I reject expired certs), it was still alarming. I hadn't even seen the domain name before - which was also worrisome.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/__ZHZfK61_8U/TFohpkIB3mI/AAAAAAAAAJY/kBh5cWfM-FU/s1600/myopenid_dialog1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="352" src="http://4.bp.blogspot.com/__ZHZfK61_8U/TFohpkIB3mI/AAAAAAAAAJY/kBh5cWfM-FU/s400/myopenid_dialog1.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
This is what got me pondering OpenID. The concept is nice, but is it succeeding?&lt;br /&gt;
&lt;br /&gt;
I am glad Google is a provider - would OpenID be at all usable still if they weren't? I at least feel safe that my Google account isn't going anywhere anytime soon.&amp;nbsp;Also, it is rather convenient as I'm usually logged into gmail and just need to confirm to login.&lt;br /&gt;
&lt;br /&gt;
I am curious what others think. Do you use Open ID? Do you think it is succeeding - is it convenient, or a pain? What provider(s) do you use? What websites use Open ID for the sole authentication system?&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/__ZHZfK61_8U/TFohpkIB3mI/AAAAAAAAAJY/kBh5cWfM-FU/s1600/myopenid_dialog1.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;/a&gt;&lt;a href="http://4.bp.blogspot.com/__ZHZfK61_8U/TFohpkIB3mI/AAAAAAAAAJY/kBh5cWfM-FU/s1600/myopenid_dialog1.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6511306120971083204-1996487441423329511?l=codecampfire.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeCampfire/~4/TT7qv8jxS_k" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codecampfire.blogspot.com/feeds/1996487441423329511/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codecampfire.blogspot.com/2010/11/thoughts-on-openid.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/1996487441423329511?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/1996487441423329511?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeCampfire/~3/TT7qv8jxS_k/thoughts-on-openid.html" title="Thoughts on OpenID" /><author><name>Joshua McKinnon</name><uri>http://www.blogger.com/profile/07449570522421153119</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-59dTXSMtv9s/TYkTwzRMA1I/AAAAAAAAALc/_cmMHmiEpFo/s220/foo.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/__ZHZfK61_8U/TFohpkIB3mI/AAAAAAAAAJY/kBh5cWfM-FU/s72-c/myopenid_dialog1.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://codecampfire.blogspot.com/2010/11/thoughts-on-openid.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEYNRX0yfip7ImA9Wx5aEko.&quot;"><id>tag:blogger.com,1999:blog-6511306120971083204.post-3615097940850197047</id><published>2010-11-08T23:16:00.000-05:00</published><updated>2010-11-08T23:16:34.396-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-08T23:16:34.396-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="goals" /><category scheme="http://www.blogger.com/atom/ns#" term="writing" /><title>November month in writing: week 1 summary</title><content type="html">One week down - three to go. This year I am aiming to write my posts a day early, scheduling them for 8:00 AM the following day. That worked last week - but I am off to a late start this week. Fortunately, as of this writing, I already have the next two days' posts finished and scheduled to appear.&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Tuesday will be some thoughts on Open ID&lt;/li&gt;
&lt;li&gt;Wednesday will be a usability post&lt;/li&gt;
&lt;li&gt;Thursday - goal is to discuss JRE bundling for Java on the Desktop&lt;/li&gt;
&lt;li&gt;Friday will remain a mystery&lt;/li&gt;
&lt;/ul&gt;As for last week, I felt OK but didn't think I wrote as much as I wanted to. Hopefully I can find room for a recent software experience and maybe a tutorial in the coming week or so.&lt;br /&gt;
&lt;br /&gt;
Goals for this month:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Finish reading two books (not succeeding so far)&lt;/li&gt;
&lt;li&gt;Finish tracking down a Hudson / Opera issue and hopefully submit a patch&lt;/li&gt;
&lt;li&gt;Finish converting more of my drafts into completed posts&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6511306120971083204-3615097940850197047?l=codecampfire.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeCampfire/~4/MUcSHYDqngw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codecampfire.blogspot.com/feeds/3615097940850197047/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codecampfire.blogspot.com/2010/11/november-month-in-writing-week-1.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/3615097940850197047?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/3615097940850197047?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeCampfire/~3/MUcSHYDqngw/november-month-in-writing-week-1.html" title="November month in writing: week 1 summary" /><author><name>Joshua McKinnon</name><uri>http://www.blogger.com/profile/07449570522421153119</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-59dTXSMtv9s/TYkTwzRMA1I/AAAAAAAAALc/_cmMHmiEpFo/s220/foo.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://codecampfire.blogspot.com/2010/11/november-month-in-writing-week-1.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0IMQHo5cSp7ImA9Wx5aEUU.&quot;"><id>tag:blogger.com,1999:blog-6511306120971083204.post-3720067794521644176</id><published>2010-11-07T23:13:00.000-05:00</published><updated>2010-11-07T23:13:01.429-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-07T23:13:01.429-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="dcvs" /><title>Distributed Source Control Rocks</title><content type="html">&lt;show a="" all="" data="" diff="" display="" download="" file="" in="" of="" order="" picture="" slowly="" this="" to="" to="" tortoisesvn="" waiting=""&gt;&lt;/show&gt;&lt;br /&gt;
Hudson core still uses Subversion, and the java.net svn server is kind of slow. I needed to do some diffs when investigating a fix for an issue I encountered. I had to wait a couple of minutes for every single diff I wanted (from the log, not local diff).&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/__ZHZfK61_8U/TNd22oaO97I/AAAAAAAAAKw/suaRP23edpU/s1600/svn_slow_remote_diff.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/__ZHZfK61_8U/TNd22oaO97I/AAAAAAAAAKw/suaRP23edpU/s1600/svn_slow_remote_diff.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
It just so happened it was related to &lt;a href="http://prototypejs.org/"&gt;Prototype&lt;/a&gt;, a popular Javascript library, which is hosted on GitHub. I took a look on that end as well. I cloned a local repository - simple, fast, and instantaneous SCM operations.&lt;br /&gt;
&lt;br /&gt;
I'm still a Git / Mercurial newbie... but it's obvious that if you're a remote user, centralized vs distributed source control isn't even a fair comparison. It's that much better.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6511306120971083204-3720067794521644176?l=codecampfire.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeCampfire/~4/mRvl9SLA3lM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codecampfire.blogspot.com/feeds/3720067794521644176/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codecampfire.blogspot.com/2010/11/distributed-source-control-rocks.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/3720067794521644176?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/3720067794521644176?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeCampfire/~3/mRvl9SLA3lM/distributed-source-control-rocks.html" title="Distributed Source Control Rocks" /><author><name>Joshua McKinnon</name><uri>http://www.blogger.com/profile/07449570522421153119</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-59dTXSMtv9s/TYkTwzRMA1I/AAAAAAAAALc/_cmMHmiEpFo/s220/foo.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/__ZHZfK61_8U/TNd22oaO97I/AAAAAAAAAKw/suaRP23edpU/s72-c/svn_slow_remote_diff.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://codecampfire.blogspot.com/2010/11/distributed-source-control-rocks.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUNSX08cSp7ImA9Wx5aEEQ.&quot;"><id>tag:blogger.com,1999:blog-6511306120971083204.post-6505706588342781671</id><published>2010-11-06T22:34:00.000-04:00</published><updated>2010-11-06T22:34:58.379-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-06T22:34:58.379-04:00</app:edited><title>News and Links Nov 6 2010</title><content type="html">Marco Arment had a great post about technology - &lt;a href="http://www.marco.org/1483805627"&gt;Developers don’t rush to new platforms&lt;/a&gt;. Everyone considering getting new smartphones or tablets should definitely read this. It's short and to the point.&lt;br /&gt;
&lt;br /&gt;
I've been looking at our database performance at work recently, so I've been digging around a lot of MySQL and related database info this week and found this blog - &lt;a href="http://explainextended.com/"&gt;EXPLAIN EXTENDED&lt;/a&gt;. In particular, this week's post:&lt;br /&gt;
&lt;a href="http://explainextended.com/2010/11/03/10-things-in-mysql-that-wont-work-as-expected/"&gt;10 things in MySQL (that won’t work as expected)&lt;/a&gt; - I'll be subscribing to this one, and maybe you should too if you use MySQL.&lt;br /&gt;
&lt;br /&gt;
iOS 4.2 went to GM seed this week. That should mean 4.2 will release for iPads next week if no criticals problems are found. I can't wait.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.pragprog.com/titles/btlang/seven-languages-in-seven-weeks"&gt;Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages&lt;/a&gt; by Bruce Tate is now out. I can't wait to read it! I better make some progress on "Release It!"...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6511306120971083204-6505706588342781671?l=codecampfire.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodeCampfire/~4/Dm7DdBfrjfQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://codecampfire.blogspot.com/feeds/6505706588342781671/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://codecampfire.blogspot.com/2010/11/news-and-links-nov-6-2010.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/6505706588342781671?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6511306120971083204/posts/default/6505706588342781671?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/CodeCampfire/~3/Dm7DdBfrjfQ/news-and-links-nov-6-2010.html" title="News and Links Nov 6 2010" /><author><name>Joshua McKinnon</name><uri>http://www.blogger.com/profile/07449570522421153119</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/-59dTXSMtv9s/TYkTwzRMA1I/AAAAAAAAALc/_cmMHmiEpFo/s220/foo.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://codecampfire.blogspot.com/2010/11/news-and-links-nov-6-2010.html</feedburner:origLink></entry></feed>

