<?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;CkEGQHY8fSp7ImA9WhVUFUU.&quot;"><id>tag:blogger.com,1999:blog-2391037223319513388</id><updated>2012-05-20T23:10:21.875-07:00</updated><category term="Visual Studio" /><category term="PropertyGrid" /><category term="finances" /><category term="xmlns" /><category term="tools" /><category term="live" /><category term="tsql" /><category term="news" /><category term="bug" /><category term="free" /><category term="interesting" /><category term="dotnetnuke" /><category term="vs2008" /><category term="xmldocument" /><category term="ultimate" /><category term="DataTable" /><category term="jpg" /><category term="upgrade" /><category term="service" /><category term="intuition" /><category term="ddms" /><category term="threading" /><category term="chrome" /><category term="www" /><category term="module" /><category term="xmltextwriter" /><category term="set" /><category term="mouse" /><category term="taxes" /><category term="in plain english" /><category term="vc2005" /><category term="extension" /><category term="spam" /><category term="rss" /><category term="apps" /><category term="radiobutton" /><category term="gdata" /><category term="resource" /><category term="video" /><category term="email" /><category term="mashup" /><category term="c++" /><category term="training" /><category term="2008" /><category term="prism" /><category term="rant" /><category term="InitInstance" /><category term="facebook" /><category term="flashing" /><category term="launchy" /><category term="gafyd" /><category term="java" /><category term="heroes happen here" /><category term="PathEditor" /><category term="theme" /><category term="cartoon" /><category term="graphics" /><category term="controlly" /><category term="whitehart" /><category term="format" /><category term="stackpanel" /><category term="sp2" /><category term="mvc" /><category term="ui" /><category term="authorize.net" /><category term="1337" /><category term="portable applications" /><category term="Assembly" /><category term="report" /><category term="google drive" /><category term="aggregate" /><category term="text" /><category term="desktop" /><category term="emulator" /><category term="dns" /><category term="databinding" /><category term="tostring" /><category term="selection" /><category term="asp.net" /><category term="design" /><category term="mp3" /><category term="crystal reports" /><category term="project" /><category term="error" /><category term="compiler" /><category term="google" /><category term="svn" /><category term="XmlWriterSettings" /><category term="technology" /><category term="msdn" /><category term="Microsoft" /><category term="support" /><category term="hang" /><category term="whr-hp-g54" /><category term="quote" /><category term="search engine" /><category term="buffalo" /><category term="about" /><category term="SortedDictionary" /><category term="creative commons" /><category term="template" /><category term="XmlSerializerNamespaces" /><category term="currency" /><category term="sync" /><category term="vcproj" /><category term="toolbox" /><category term="tortoisesvn" /><category term="Version" /><category term="csharp" /><category term="Uncle Microsoft" /><category term="separator" /><category term="opensource" /><category term="DataSet" /><category term="shared folder" /><category term="blw" /><category term="gimp" /><category term="sp1" /><category term="knee chair" /><category term="code" /><category term="productivity" /><category term="inkscape" /><category term="designers" /><category term="learning" /><category term="ico" /><category term="app id" /><category term="del.icio.us" /><category term="vc++" /><category term="workaround" /><category term="wallpaper" /><category term="usb" /><category term="cookies" /><category term="virtual application" /><category term="howto" /><category term="music" /><category term="COM" /><category term="task chair" /><category term="gae" /><category term="linksys" /><category term="ie" /><category term="resx" /><category term="tip" /><category term="seo" /><category term="sql" /><category term="wireless" /><category term="untried" /><category term="identity" /><category term="wpf" /><category term="twitter" /><category term="BindingSource" /><category term="closure" /><category term="source code" /><category term="exception" /><category term="autopublish" /><category term="foss" /><category term=".net 2.0" /><category term="social media" /><category term="decimal" /><category term="ftp" /><category term="human" /><category term="calendar" /><category term="DataGridView" /><category term="templates" /><category term="openid" /><category term="xaml" /><category term="installation" /><category term="documentation" /><category term="xpmode" /><category term="registry" /><category term="mailto" /><category term="keepass" /><category term="tablelayout" /><category term="web apps" /><category term="remunerated" /><category term="ClickOnce" /><category term="art" /><category term="column" /><category term="open source" /><category term="UITypeEditor" /><category term="common craft" /><category term="dvd" /><category term="insert" /><category term="phone" /><category term="devfuelnet" /><category term="library" /><category term="linkrolls" /><category term="c#" /><category term="addin" /><category term="firefox" /><category term="google docs" /><category term="DOM" /><category term="travel" /><category term="vc6" /><category term="css" /><category term="ball chair" /><category term="wrt54g" /><category term="List" /><category term="DRM" /><category term="firmware" /><category term=".net" /><category term="professional" /><category term="performance" /><category term="google plus" /><category term="xp" /><category term="vb.net" /><category term="humor" /><category term="xml" /><category term="seating" /><category term="swopper" /><category term="hashtable" /><category term="os" /><category term="security" /><category term="local" /><category term="sourceforge" /><category term="Attribute" /><category term="game" /><category term="sample" /><category term="legacy code" /><category term="android" /><category term="notepad++" /><category term="html" /><category term="atom" /><category term="dev" /><category term="regular expressions" /><category term="screenshot" /><category term="testing" /><category term="release" /><category term="vs2003" /><category term="scc" /><category term="gcalview" /><category term="widget" /><category term="vista" /><category term="google apps" /><category term="sitemap" /><category term="cheat sheet" /><category term="media" /><category term="IBindingListView" /><category term="wiki" /><category term="linker" /><category term="dll" /><category term="javascript" /><category term="debugging" /><category term="organization" /><category term="comics" /><category term="hosts" /><category term="directory" /><category term="string" /><category term="multi-profile" /><category term="XmlSerializer" /><category term="duplicate" /><category term="shared collection" /><category term="delete" /><category term="win7" /><category term=".net 4.0" /><category term="metrics" /><category term="browser" /><category term="radiogroup" /><category term="script" /><category term="installer class" /><category term="chat" /><category term="layout" /><category term="windows" /><category term="gcal" /><category term="thunderbird" /><category term="vs2005" /><category term="file" /><category term="SynchronizationContext" /><category term="app engine" /><category term="stl" /><category term="installutil" /><category term="snippet" /><category term="oss" /><category term="organize" /><category term="feed" /><category term="tool" /><category term="essential" /><category term="tutorial" /><category term="control panel" /><category term="sorting" /><category term="vs6" /><category term="website" /><category term="quick reference" /><category term="font" /><category term="blog" /><category term="source" /><category term="blogger" /><category term="disk space" /><category term="web2.0" /><category term="qa" /><category term="activex" /><category term="generics" /><category term="icon" /><category term="languages" /><category term="hobby" /><category term="entertainment" /><category term="search" /><category term="windows7" /><category term="quotes" /><category term="mozilla" /><category term="attached property" /><category term="tagging" /><category term="collections" /><category term="rambling" /><title>devfuel.com</title><subtitle type="html">Developing software in the wilds of Washington State</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.devfuel.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://www.devfuel.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Elliott Edwards</name><uri>https://profiles.google.com/101256894969172700518</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-aJMJsLJV0yc/AAAAAAAAAAI/AAAAAAAAABc/epGY6ddcmWs/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>147</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/Devfuel" /><feedburner:info uri="devfuel" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>Devfuel</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><entry gd:etag="W/&quot;A0IFQX8_eip7ImA9WhVVEUg.&quot;"><id>tag:blogger.com,1999:blog-2391037223319513388.post-5241551374003735999</id><published>2012-05-04T11:51:00.001-07:00</published><updated>2012-05-04T12:25:10.142-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-05-04T12:25:10.142-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="shared folder" /><category scheme="http://www.blogger.com/atom/ns#" term="organize" /><category scheme="http://www.blogger.com/atom/ns#" term="shared collection" /><category scheme="http://www.blogger.com/atom/ns#" term="workaround" /><category scheme="http://www.blogger.com/atom/ns#" term="organization" /><category scheme="http://www.blogger.com/atom/ns#" term="google docs" /><category scheme="http://www.blogger.com/atom/ns#" term="google drive" /><title>Google Drive Hurdles: Organizing Shared Folders</title><content type="html">&lt;h2&gt;


Where Did My Shared Folders Go?&lt;/h2&gt;
&lt;div&gt;
When you fire up Google Drive for the first time after making the switch, you will eventually run into some changes with respect to the way shared files and folders work. Being the bold type, you will eventually click on the "Shared with me" node in the navigation at left.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-8xAkaAeH264/T6QUuLcNRlI/AAAAAAAAA2A/ACm7NtGF5uA/s1600/Capture.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="95" src="http://2.bp.blogspot.com/-8xAkaAeH264/T6QUuLcNRlI/AAAAAAAAA2A/ACm7NtGF5uA/s400/Capture.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="" style="clear: both; text-align: left;"&gt;
&lt;/div&gt;
&lt;div class="" style="clear: both; text-align: left;"&gt;
If you haven't yet had anything shared with you, you will see this in the "view" area:&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-xW1Sm4II61A/T6QUvIwqlmI/AAAAAAAAA2Y/tHcndu9zB08/s1600/SharedWithMeEmpty.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="85" src="http://3.bp.blogspot.com/-xW1Sm4II61A/T6QUvIwqlmI/AAAAAAAAA2Y/tHcndu9zB08/s400/SharedWithMeEmpty.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="" style="clear: both; text-align: left;"&gt;
Or you will see a list of folders and files that have been shared. In the below example, I have shared a "SharedStuff" folder with myself (from a different account):&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-tGX17YSlSZk/T6QUwIf3AvI/AAAAAAAAA2w/ySMo2WamXUI/s1600/SharedWithMeItem.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="116" src="http://1.bp.blogspot.com/-tGX17YSlSZk/T6QUwIf3AvI/AAAAAAAAA2w/ySMo2WamXUI/s640/SharedWithMeItem.PNG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style="text-align: left;"&gt;So far, so good. The items that were shared with me are still shared...but now...how do i &lt;/span&gt;&lt;b style="text-align: left;"&gt;use&lt;/b&gt;&lt;span style="text-align: left;"&gt;&amp;nbsp;them?&lt;/span&gt;&lt;br /&gt;
&lt;h2&gt;


&amp;nbsp;Go to Shared with me, sort by title, then drag folders to My Drive&lt;/h2&gt;
&lt;div&gt;
While technically correct, this is a dense bit of instruction. So lets take a moment and unpack it.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The "Shared with me" portion is referring to a "Share with me" link listed in the navigation section at the left of the interface. Clicking on that link will show a simple flat list of everything that is shared with the current user.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
This list is subtly different from what you get when clicking on folders that are "In" your Google drive (and sync automatically to your local machine), though.&amp;nbsp;It is kind of a "limbo" mode that has some (reasonable, but not immediately obvious) limitations.&lt;/div&gt;
&lt;h3&gt;


"Limbo Mode" Limitations&lt;/h3&gt;
&lt;div&gt;
As one commenter (rmmiles) points out:&amp;nbsp;&lt;/div&gt;
&lt;blockquote class="tr_bq"&gt;
I’ve also noticed that there is no longer the ability to view items shared with you by Collection. This was very handy for organizing shared items, and now all you see is a flat list of items with no structure at all.&lt;/blockquote&gt;
&lt;div&gt;
He is mostly right when it comes to this "limbo" mode. While i can click on a shared folder in the "Shared with me" section, and "dig into" it:&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-WwDCQair0FQ/T6QUvfIOUeI/AAAAAAAAA2g/WrAtEy8d_WY/s1600/SharedWithMeFolder.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="156" src="http://4.bp.blogspot.com/-WwDCQair0FQ/T6QUvfIOUeI/AAAAAAAAA2g/WrAtEy8d_WY/s640/SharedWithMeFolder.PNG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
When I go to the "Organize" dialog, I can't see any of my shared folders available for destinations: (Also note, that the organize dialog doesn't even come up if you haven't yet added a folder in "My Drive". I had to create "DriveFolder" to even get this screenshot...)&lt;/div&gt;
&lt;div style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-32aD_ukgabg/T6QUsrw6jEI/AAAAAAAAA14/jf0JbHQWW9A/s1600/CantOrganize.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;/a&gt;&lt;a href="http://3.bp.blogspot.com/-32aD_ukgabg/T6QUsrw6jEI/AAAAAAAAA14/jf0JbHQWW9A/s1600/CantOrganize.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="207" src="http://3.bp.blogspot.com/-32aD_ukgabg/T6QUsrw6jEI/AAAAAAAAA14/jf0JbHQWW9A/s400/CantOrganize.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
I &lt;b&gt;can&lt;/b&gt;&amp;nbsp;drag and drop items into subfolders:&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-t-aWK7r5glY/T6QUvp_Q7uI/AAAAAAAAA2o/RB1GoWol4Pw/s1600/SharedWithMeFolderDrag.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="171" src="http://3.bp.blogspot.com/-t-aWK7r5glY/T6QUvp_Q7uI/AAAAAAAAA2o/RB1GoWol4Pw/s400/SharedWithMeFolderDrag.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
But this is pretty limited. If we are stuck in "Limbo", then we lost a lot of power with respect to organizing our Shared Folders. What is going on here Google Drive?&lt;/div&gt;
&lt;h3&gt;


Getting out of "Limbo"&lt;/h3&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
The solution is still staring us in the face (in a subtle way). The "Shared with me" view is just a quick and dirty sharing mechanism. It is meant mostly for sharing of single files, in which it make perfect sense. If Bob shares a spreadsheet, I just want to take a look...I don't necessarily want it syncing down to my local box.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
Shared folders, however, imply a different kind of permanent, organized shared team resource. As such, we have to indicate to Google Drive that we want everything in the folder.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
This screen is optimized for the "quick and dirty" use and not for the "initial setup" use, and I think this is rational, but un-intuitive. Once we get all of our shared folders setup and working, we will appreciate how easy it is to see what was recently shared, but in the mean time we have to dig a bit to get things "back to the way they were".&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
So let's look again at the tooltip:&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
"Go to Shared with me, sort by title, then drag folders to My Drive":&lt;/div&gt;
&lt;h4&gt;

"Go to Shared with Me"&lt;/h4&gt;
&lt;div&gt;
We have this part down. We have clicked on "Shared with Me" are looking at our top level "Limbo View"&lt;/div&gt;
&lt;h4&gt;

"Sort by Title"&lt;/h4&gt;
&lt;div&gt;
The limbo view has a variety of sorting mechanisms. If it isn't already done, hit the "Sort" combo and choose "Sort by Title".&amp;nbsp;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-G_A-POUchqM/T6QdsNGSfyI/AAAAAAAAA28/4dxH2jeYIQM/s1600/SortBy.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="175" src="http://3.bp.blogspot.com/-G_A-POUchqM/T6QdsNGSfyI/AAAAAAAAA28/4dxH2jeYIQM/s400/SortBy.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
Otherwise your shared folders may be down at the bottom of a very long list of recently modified files, etc. Sort by Title bubbles the folders up to the top of the list, and prepares you to drag and drop.&lt;/div&gt;
&lt;h4&gt;

"Then drag folders to My Drive"&lt;/h4&gt;
&lt;div&gt;
I would have probably wanted to put some quotes in around "My Drive". Really this is just saying that you want to click and drag the icon of the shared folder of your choice into the "My Drive" item in the navigation list at left.&amp;nbsp;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-dHtoC__1rD4/T6QUucN-hoI/AAAAAAAAA2I/qAuBDqH3a0E/s1600/DraggingToMyDrive.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="191" src="http://1.bp.blogspot.com/-dHtoC__1rD4/T6QUucN-hoI/AAAAAAAAA2I/qAuBDqH3a0E/s400/DraggingToMyDrive.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
It is a tree view, and you are simply moving the shared folder into the list of stuff that will get synced down. Once you are done, it will look like this:&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-73DzC4CwOgo/T6QUuxQoxUI/AAAAAAAAA2Q/hDruOK2GITg/s1600/InMyDrive.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="175" src="http://2.bp.blogspot.com/-73DzC4CwOgo/T6QUuxQoxUI/AAAAAAAAA2Q/hDruOK2GITg/s400/InMyDrive.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
And now when you have, say, the "SharedDocument" (in the above example) selected and you hit organize, you see:&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-dDsIpaySL1c/T6QUqdyzZBI/AAAAAAAAA1w/A92fPAkn46Y/s1600/CanOrganize.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="187" src="http://4.bp.blogspot.com/-dDsIpaySL1c/T6QUqdyzZBI/AAAAAAAAA1w/A92fPAkn46Y/s400/CanOrganize.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&amp;nbsp;Notice that you can select folders and subfolders in the shared folder hierarchy. In short, you can now do what you had been able to do before you opted in to Google Drive.&lt;/div&gt;
&lt;h4&gt;


Repeat as Necessary&lt;/h4&gt;
&lt;div style="text-align: left;"&gt;
&amp;nbsp;Repeat the above steps for each shared folder you care to have on your drive. If you want this organize power, but don't want to sync it down, you have two options:&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;Disable the local sync program, organize, and then re-enable&lt;/li&gt;
&lt;li&gt;Have the owner of the folder do the organize.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;


&amp;nbsp;It goes without saying?&lt;/h2&gt;
&lt;div&gt;
Once you "get" it, this seems pretty trivial. For people familiar with software and web apps, a little tinkering would have gotten you to this point without much hassle. For some people it would have been obvious from the tooltip and/or a visit to the linked documentation page.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
However, for typical users at the lower end of a long learning curve, this includes a bunch of challenging concepts. My wife, for example, is a smart lady. She "got" it once i showed her how to do it and briefly explained why. But there is a bunch of stuff to navigate, and Google Drive's instruction is assuming a level of experience that may or may not be the case.&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Someone may have shared something with you. Before, it just showed up. Now you have to find it and say "I still want that to show up"&lt;/li&gt;
&lt;li&gt;Someone may have set things up for you, such as a techy friend or sys admin. Now, when you opt in, Google Drive has "moved your cheese"&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Personally, i think it would have been a better experience for Google Drive to:&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;Note that you have shared folders when activating for the first time&lt;/li&gt;
&lt;li&gt;Ask you to check all folders that you wanted to sync to your machine&lt;/li&gt;
&lt;li&gt;Go on its merry way without subtle tech intervention&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
While I do understand the engineering reasons the wouldn't want to just automatically sync down everything by default, simply asking would have solved this. My wife would have navigated that without issue, as well as just about anyone else that may have been confused by this change.&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;&lt;a href="http://www.devfuel.com"&gt;devfuel.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2391037223319513388-5241551374003735999?l=www.devfuel.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Devfuel/~4/j6hGwnHfj-M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devfuel.com/feeds/5241551374003735999/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devfuel.com/2012/05/google-drive-hurdles-organizing-shared.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/5241551374003735999?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/5241551374003735999?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Devfuel/~3/j6hGwnHfj-M/google-drive-hurdles-organizing-shared.html" title="Google Drive Hurdles: Organizing Shared Folders" /><author><name>Elliott Edwards</name><uri>https://profiles.google.com/101256894969172700518</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-aJMJsLJV0yc/AAAAAAAAAAI/AAAAAAAAABc/epGY6ddcmWs/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-8xAkaAeH264/T6QUuLcNRlI/AAAAAAAAA2A/ACm7NtGF5uA/s72-c/Capture.PNG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.devfuel.com/2012/05/google-drive-hurdles-organizing-shared.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEQNSHo6fip7ImA9WhVWFEo.&quot;"><id>tag:blogger.com,1999:blog-2391037223319513388.post-1119001217824433972</id><published>2012-04-26T13:14:00.005-07:00</published><updated>2012-04-26T13:33:19.416-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-04-26T13:33:19.416-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="tagging" /><category scheme="http://www.blogger.com/atom/ns#" term="collections" /><category scheme="http://www.blogger.com/atom/ns#" term="web apps" /><category scheme="http://www.blogger.com/atom/ns#" term="organization" /><category scheme="http://www.blogger.com/atom/ns#" term="google docs" /><category scheme="http://www.blogger.com/atom/ns#" term="google drive" /><title>Ctrl+Click To Multiselect Folders in Google Drive's Organize</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
At the risk of seeming pedantic, I am posting this solution to my previous Question. It appears the &lt;a href="https://support.google.com/drive/bin/answer.py?hl=en&amp;amp;answer=2375028&amp;amp;p=organize_dialog"&gt;"Add or remove something from a folder"&lt;/a&gt; documentation page (Accessible&amp;nbsp;from the "Organize" dialog's "Learn More" link) has been updated to answer this question. This makes me feel a ton better.&lt;br /&gt;
&lt;div&gt;
&lt;h4&gt;
&lt;span style="font-weight: normal;"&gt;  The Solution? Just hold Ctrl (⌘ command for Mac) while "checking", and you will get a multi-select.&lt;/span&gt;&lt;/h4&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href="http://2.bp.blogspot.com/-hThQscWsAF8/T5mr9f_ATFI/AAAAAAAAAw0/0M7FcRSq0FI/s1600/OrganizeGoogleDriveMultiselect.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="272" src="http://2.bp.blogspot.com/-hThQscWsAF8/T5mr9f_ATFI/AAAAAAAAAw0/0M7FcRSq0FI/s320/OrganizeGoogleDriveMultiselect.png" width="320" /&gt;&lt;/a&gt;So the power was always there, it was just not super obvious. For me, if there had been a traditional browser combo, I would have thought to try the standard selection shortcuts. Instead it looks very "web custom control", so I didn't consider that approach until suggestions from Commenters and &lt;a href="http://webapps.stackexchange.com/a/26012/18395"&gt;StackExchange Answerers&lt;/a&gt; rolled in.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
The reason I am stoked to see an official documentation page change (I swear this wasn't in there before...I did spend some time looking) is that it implies this is a fully supported feature. Now, instead of the "workaround" s being something that may disappear in the future, it makes the "tagging" an official feature (and something I will make use of). I also like how responsive this change was. Well done Google Drive team.&lt;/div&gt;
&lt;h4&gt;
  &lt;span style="font-weight: normal;"&gt;On a side note:&lt;/span&gt;&lt;/h4&gt;
&lt;div&gt;
The engineering/usability idea behind this actually seems sound to me. Having a document in multiple folders/collections is the more advanced and rare use case. The previous dialog put that feature front and center (perhaps to the confusion of some users). By contrast, the Google Drive&amp;nbsp;version allows it to remain a powerful feature, but recede to the background, deferring to the more common case. That said, I think a "Ctrl+Click to multiselect" on the actual dialog would give a "best of both worlds" solution.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Thanks, Internet, for the assistance!&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;&lt;a href="http://www.devfuel.com"&gt;devfuel.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2391037223319513388-1119001217824433972?l=www.devfuel.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Devfuel/~4/juEI4Xyf_zw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devfuel.com/feeds/1119001217824433972/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devfuel.com/2012/04/ctrlclick-to-multiselect-folders-in.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/1119001217824433972?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/1119001217824433972?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Devfuel/~3/juEI4Xyf_zw/ctrlclick-to-multiselect-folders-in.html" title="Ctrl+Click To Multiselect Folders in Google Drive's Organize" /><author><name>Elliott Edwards</name><uri>https://profiles.google.com/101256894969172700518</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-aJMJsLJV0yc/AAAAAAAAAAI/AAAAAAAAABc/epGY6ddcmWs/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-hThQscWsAF8/T5mr9f_ATFI/AAAAAAAAAw0/0M7FcRSq0FI/s72-c/OrganizeGoogleDriveMultiselect.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.devfuel.com/2012/04/ctrlclick-to-multiselect-folders-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEYMR3Yyeyp7ImA9WhVWFEo.&quot;"><id>tag:blogger.com,1999:blog-2391037223319513388.post-5971450253076391417</id><published>2012-04-24T13:30:00.000-07:00</published><updated>2012-04-26T13:29:46.893-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-04-26T13:29:46.893-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="tagging" /><category scheme="http://www.blogger.com/atom/ns#" term="collections" /><category scheme="http://www.blogger.com/atom/ns#" term="web apps" /><category scheme="http://www.blogger.com/atom/ns#" term="organization" /><category scheme="http://www.blogger.com/atom/ns#" term="google docs" /><category scheme="http://www.blogger.com/atom/ns#" term="google drive" /><title>Google Drive steps backward onto my Docs Collections</title><content type="html">&lt;div class="aside"&gt;&lt;em&gt;Update:&lt;/em&gt; See &lt;a href="http://www.devfuel.com/2012/04/ctrlclick-to-multiselect-folders-in.html"&gt;here&lt;/a&gt; for the solution!&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
Tried Google Drive today and promptly noticed that the "organize" feature of Google Docs went from a multi-selectable checkbox ordeal (in which you can choose multiple collections for a document to be "in"):&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-LYU_O2mOKKs/T5cL5_iQJtI/AAAAAAAAAuw/LPOiVFSqaW4/s1600/Capture2.PNG" imageanchor="1" style="clear: left; display: inline !important; margin-bottom: 1em; margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-LYU_O2mOKKs/T5cL5_iQJtI/AAAAAAAAAuw/LPOiVFSqaW4/s1600/Capture2.PNG" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Pre-Google Drive "Organize"&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;To a single select checkmark:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-3WV9IYR0Tls/T5cL5ulYoZI/AAAAAAAAAuo/kINnNal6yu8/s1600/Capture.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-3WV9IYR0Tls/T5cL5ulYoZI/AAAAAAAAAuo/kINnNal6yu8/s1600/Capture.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
Personally I loved the flexible concept of document collections. Am I missing something? is there another view that allows me to have that same document collection support? I realize that you can't have the same file in two folders, but i really didn't expect to lose organizational power/configuration just by opting in to the service...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;A user that deeply used the "one document in many collections" feature could be pretty upset to see that all work/organization evaporate.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Did i miss a warning somewhere?&lt;br /&gt;
&lt;br /&gt;
Can anyone help/suggest?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;I used this feature (like tags in gmail) where it made sense. Perhaps no-one really was using it and so it hit the cutting room floor.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;*sigh*&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;&lt;a href="http://www.devfuel.com"&gt;devfuel.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2391037223319513388-5971450253076391417?l=www.devfuel.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Devfuel/~4/qc26BiHIKnA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devfuel.com/feeds/5971450253076391417/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devfuel.com/2012/04/google-drive-steps-backward-onto-my.html#comment-form" title="8 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/5971450253076391417?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/5971450253076391417?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Devfuel/~3/qc26BiHIKnA/google-drive-steps-backward-onto-my.html" title="Google Drive steps backward onto my Docs Collections" /><author><name>Elliott Edwards</name><uri>https://profiles.google.com/101256894969172700518</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-aJMJsLJV0yc/AAAAAAAAAAI/AAAAAAAAABc/epGY6ddcmWs/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-LYU_O2mOKKs/T5cL5_iQJtI/AAAAAAAAAuw/LPOiVFSqaW4/s72-c/Capture2.PNG" height="72" width="72" /><thr:total>8</thr:total><feedburner:origLink>http://www.devfuel.com/2012/04/google-drive-steps-backward-onto-my.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQAR307cSp7ImA9WhVRFU8.&quot;"><id>tag:blogger.com,1999:blog-2391037223319513388.post-865517552565645275</id><published>2012-03-23T08:39:00.000-07:00</published><updated>2012-03-23T10:39:06.309-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-23T10:39:06.309-07:00</app:edited><title>The Zen of Captcha Codes</title><content type="html">&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-8ZDpk5yHPUo/T2y0mtwwN0I/AAAAAAAAAiM/V4eJ2r8kyR4/s1600/sheredes_mineral.PNG" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="134" src="http://1.bp.blogspot.com/-8ZDpk5yHPUo/T2y0mtwwN0I/AAAAAAAAAiM/V4eJ2r8kyR4/s320/sheredes_mineral.PNG" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;sheredes mineral,&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
I realized this morning, when browsing &lt;a href="http://thedailywtf.com/Articles/Captchad--Do-Not-Complain.aspx"&gt;the daily WTF&lt;/a&gt;, that there is a sort of Zen to &lt;a href="http://en.wikipedia.org/wiki/Captcha"&gt;CAPTCHA&lt;/a&gt; codes. They aren't meant to be meaningful messages, and yet our minds easily attach meaning to them. They occasionally startle us out of our daily work and give us pause.&lt;br /&gt;
&lt;br /&gt;
Here are some more fun ones from &lt;a href="http://www.huffingtonpost.com/2010/03/05/funny-captchas-fails-the_n_487166.html#s70931&amp;amp;title=Aass_Atkr"&gt;the Huffington Post&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
And here is a &lt;a href="http://www.captchart.com/"&gt;blog&lt;/a&gt;&amp;nbsp;(warning, captchart.com appears to be occasionally NSFW) devoted to RAGE-style cartoons that investigate the hidden meaning of captchas.&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;&lt;a href="http://www.devfuel.com"&gt;devfuel.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2391037223319513388-865517552565645275?l=www.devfuel.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Devfuel/~4/g_gOSeHr-6w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devfuel.com/feeds/865517552565645275/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devfuel.com/2012/03/zen-of-captcha-codes.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/865517552565645275?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/865517552565645275?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Devfuel/~3/g_gOSeHr-6w/zen-of-captcha-codes.html" title="The Zen of Captcha Codes" /><author><name>Elliott Edwards</name><uri>https://profiles.google.com/101256894969172700518</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-aJMJsLJV0yc/AAAAAAAAAAI/AAAAAAAAABc/epGY6ddcmWs/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-8ZDpk5yHPUo/T2y0mtwwN0I/AAAAAAAAAiM/V4eJ2r8kyR4/s72-c/sheredes_mineral.PNG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.devfuel.com/2012/03/zen-of-captcha-codes.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0IGRHg4cSp7ImA9WhVRFE4.&quot;"><id>tag:blogger.com,1999:blog-2391037223319513388.post-4289267508150719167</id><published>2012-03-19T09:31:00.000-07:00</published><updated>2012-03-22T09:58:45.639-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-22T09:58:45.639-07:00</app:edited><title>Software Engineering Link Round Up</title><content type="html">In the recent &lt;a href="https://docs.google.com/presentation/d/1ySRSieaoCabmThyXqRrFMD9zgg8uEUZjYZsWTmcHno4/edit"&gt;talk&lt;/a&gt; I gave to the Software Engineering class at &lt;a href="http://www.whitworth.edu/"&gt;Whitworth University&lt;/a&gt;, I referenced a variety of articles and technologies. This is a quick post to provide the mentioned links (in pseudo-random order):&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;My Google+ profile:&amp;nbsp;
&lt;a href="https://plus.google.com/101256894969172700518/posts"&gt;https://plus.google.com/101256894969172700518/posts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;On Scrum (and pigs/chickens):&amp;nbsp;
&lt;a href="http://en.wikipedia.org/wiki/The_Chicken_and_the_Pig"&gt;http://en.wikipedia.org/wiki/The_Chicken_and_the_Pig&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Craigslist Ad:&amp;nbsp;&lt;a href="http://clientsfromhell.net/post/385649895/craigslist-ad"&gt;http://clientsfromhell.net/post/385649895/craigslist-ad&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Coastline Travel (Estimation analogy, slightly NSFW language):&amp;nbsp;&lt;a href="http://www.quora.com/Engineering-Management/Why-are-software-development-task-estimations-regularly-off-by-a-factor-of-2-3"&gt;http://www.quora.com/Engineering-Management/Why-are-software-development-task-estimations-regularly-off-by-a-factor-of-2-3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Programmer Communication:&amp;nbsp;&lt;a href="http://www.secretgeek.net/program_communicate_4reasons.asp"&gt;http://www.secretgeek.net/program_communicate_4reasons.asp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Programmer Fitness: &lt;a href="http://www.fitocracy.com/"&gt;http://www.fitocracy.com&lt;/a&gt;&amp;nbsp;(Group&amp;nbsp;
&lt;a href="http://www.fitocracy.com/group/13/"&gt;http://www.fitocracy.com/group/13/&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Workflowy (Outlining tool): &lt;a href="http://www.workflowy.com/"&gt;http://www.workflowy.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;TDD:&amp;nbsp;
&lt;a href="http://en.wikipedia.org/wiki/Test-driven_development"&gt;http://en.wikipedia.org/wiki/Test-driven_development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;BDD vs TDD (intuition) :&amp;nbsp;
&lt;a href="http://lostechies.com/seanchambers/2008/12/07/starting-with-bdd-vs-starting-with-tdd/"&gt;http://lostechies.com/seanchambers/2008/12/07/starting-with-bdd-vs-starting-with-tdd/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Behavior Driven Design Tool (in .NET)&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Specflow: &lt;a href="http://specflow.org/"&gt;http://specflow.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Screencast with useful examples:&amp;nbsp;
&lt;a href="http://specflow.org/getdoc/7a17d618-cb24-40e4-904b-b335c34c98d8/screencast.aspx"&gt;http://specflow.org/getdoc/7a17d618-cb24-40e4-904b-b335c34c98d8/screencast.aspx&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;&lt;a href="http://www.devfuel.com"&gt;devfuel.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2391037223319513388-4289267508150719167?l=www.devfuel.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Devfuel/~4/7X0Zm-1V4EY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devfuel.com/feeds/4289267508150719167/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devfuel.com/2012/03/software-engineering-link-round-up.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/4289267508150719167?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/4289267508150719167?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Devfuel/~3/7X0Zm-1V4EY/software-engineering-link-round-up.html" title="Software Engineering Link Round Up" /><author><name>Elliott Edwards</name><uri>https://profiles.google.com/101256894969172700518</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-aJMJsLJV0yc/AAAAAAAAAAI/AAAAAAAAABc/epGY6ddcmWs/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.devfuel.com/2012/03/software-engineering-link-round-up.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkIAR3Y5eyp7ImA9WhdUE08.&quot;"><id>tag:blogger.com,1999:blog-2391037223319513388.post-1763938687886415960</id><published>2011-09-29T11:06:00.001-07:00</published><updated>2011-09-29T13:35:46.823-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-29T13:35:46.823-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="identity" /><category scheme="http://www.blogger.com/atom/ns#" term="google plus" /><title>Google Plus</title><content type="html">After a great deal of thought on the matter, I have decided to de-anonymize this blog. Not that it would have been terribly complicated to reverse-engineer who wrote this, but now I am taking steps to informationally "claim" it as my own.&lt;br /&gt;
&lt;br /&gt;
My public profile on google plus is &lt;a href="https://plus.google.com/101256894969172700518"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;&lt;a href="http://www.devfuel.com"&gt;devfuel.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2391037223319513388-1763938687886415960?l=www.devfuel.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Devfuel/~4/VztHg0FbSOM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devfuel.com/feeds/1763938687886415960/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devfuel.com/2011/09/google-plus_29.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/1763938687886415960?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/1763938687886415960?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Devfuel/~3/VztHg0FbSOM/google-plus_29.html" title="Google Plus" /><author><name>Elliott Edwards</name><uri>https://profiles.google.com/101256894969172700518</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-aJMJsLJV0yc/AAAAAAAAAAI/AAAAAAAAABc/epGY6ddcmWs/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.devfuel.com/2011/09/google-plus_29.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcEQn48cCp7ImA9WhdUE08.&quot;"><id>tag:blogger.com,1999:blog-2391037223319513388.post-3777307415495061468</id><published>2011-07-30T12:00:00.001-07:00</published><updated>2011-09-29T13:26:43.078-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-29T13:26:43.078-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="multi-profile" /><category scheme="http://www.blogger.com/atom/ns#" term="chrome" /><title>Multi-Profile baked into Google Chrome (Dev Update Channel)</title><content type="html">&lt;a href="http://2.bp.blogspot.com/-kpQrkQq48EI/TjRRqZToRLI/AAAAAAAAAF8/2wdC7vCjcLA/s1600/profile_switcher.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-kpQrkQq48EI/TjRRqZToRLI/AAAAAAAAAF8/2wdC7vCjcLA/s320/profile_switcher.png" width="153" /&gt;&lt;/a&gt;I have long been a fan of separate profiles for separate concerns. All my devfuel.com posts and management, for example, have been managed on a single profile. To accomplish this in the past, I have (in the past) made use of the &lt;a href="http://peter.sh/experiments/chromium-command-line-switches/"&gt;command line option&lt;/a&gt;&amp;nbsp;(&lt;span class="Apple-style-span" style="background-color: white; font-family: Verdana; font-size: 12px;"&gt;--user-data-dir):&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Make a short-cut for each profile and set the --user-data-dir flag to a different folder for each&lt;/li&gt;
&lt;li&gt;Run chrome via the shortcut and then browse normally, but only as a particular profile&lt;/li&gt;
&lt;li&gt;Use chrome themes to visually distinguish between profile instances&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
This has worked fairly well, so far, but it is a bit geeky for most users. However, this morning when I logged on, the latest chrome version had improved on its &lt;a href="http://lifehacker.com/5796831/try-out-chromes-multiple-profile-support-in-the-canary-builds"&gt;multi-profile support&lt;/a&gt;. It now looks like this (as of 14.0.835.8):&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-2eMSfJlUD94/TjRRzyNDbjI/AAAAAAAAAGA/wgX5axDXTqE/s1600/new_profile.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://1.bp.blogspot.com/-2eMSfJlUD94/TjRRzyNDbjI/AAAAAAAAAGA/wgX5axDXTqE/s400/new_profile.png" width="330" /&gt;&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 class="separator" style="clear: both; text-align: left;"&gt;
There is also further management for changing the profile name and icon available in the settings:&lt;/div&gt;
&lt;div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-vI1j0WsPFDc/TjRSFbyMncI/AAAAAAAAAGE/05kh1KNV8Z8/s1600/Profile_options.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="152" src="http://1.bp.blogspot.com/-vI1j0WsPFDc/TjRSFbyMncI/AAAAAAAAAGE/05kh1KNV8Z8/s400/Profile_options.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Please note that this has, of course, not hit the stable update channels (and probably won't for some time). To see it, you have to switch to (for me) the dev update channel. This feature will probably evolve further in its look and feel, too. (I have seen several versions of it so far). Regardless, the functionality is fabulously useful. I can't wait to see/use the finished product.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;&lt;a href="http://www.devfuel.com"&gt;devfuel.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2391037223319513388-3777307415495061468?l=www.devfuel.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Devfuel/~4/l22GWDxGixA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devfuel.com/feeds/3777307415495061468/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devfuel.com/2011/07/multi-profile-baked-into-google-chrome_30.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/3777307415495061468?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/3777307415495061468?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Devfuel/~3/l22GWDxGixA/multi-profile-baked-into-google-chrome_30.html" title="Multi-Profile baked into Google Chrome (Dev Update Channel)" /><author><name>Elliott Edwards</name><uri>https://profiles.google.com/101256894969172700518</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-aJMJsLJV0yc/AAAAAAAAAAI/AAAAAAAAABc/epGY6ddcmWs/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-kpQrkQq48EI/TjRRqZToRLI/AAAAAAAAAF8/2wdC7vCjcLA/s72-c/profile_switcher.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.devfuel.com/2011/07/multi-profile-baked-into-google-chrome_30.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcEQ3c8fCp7ImA9WhdUE08.&quot;"><id>tag:blogger.com,1999:blog-2391037223319513388.post-2251877178473938475</id><published>2011-07-11T11:10:00.001-07:00</published><updated>2011-09-29T13:26:42.974-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-29T13:26:42.974-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="closure" /><category scheme="http://www.blogger.com/atom/ns#" term="learning" /><category scheme="http://www.blogger.com/atom/ns#" term="c#" /><category scheme="http://www.blogger.com/atom/ns#" term="csharp" /><title>It is important to get closure in c#</title><content type="html">&lt;a href="http://www.blogger.com/profile/16441901713967254504"&gt;Mike Hadlow&lt;/a&gt;&amp;nbsp;recently shared a nice, succinct &lt;a href="http://mikehadlow.blogspot.com/2011/07/what-is-closure.html"&gt;definition of a closure&lt;/a&gt;&amp;nbsp;by way of some description and code demonstrations in C#. As always, an elegant, understandable description is invaluable, and so it is collected and referenced here for posterity.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;&lt;a href="http://www.devfuel.com"&gt;devfuel.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2391037223319513388-2251877178473938475?l=www.devfuel.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Devfuel/~4/YgQiwKpn8BA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devfuel.com/feeds/2251877178473938475/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devfuel.com/2011/07/it-is-important-to-get-closure-in-c_11.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/2251877178473938475?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/2251877178473938475?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Devfuel/~3/YgQiwKpn8BA/it-is-important-to-get-closure-in-c_11.html" title="It is important to get closure in c#" /><author><name>Elliott Edwards</name><uri>https://profiles.google.com/101256894969172700518</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-aJMJsLJV0yc/AAAAAAAAAAI/AAAAAAAAABc/epGY6ddcmWs/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.devfuel.com/2011/07/it-is-important-to-get-closure-in-c_11.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcEQnwzfCp7ImA9WhdUE08.&quot;"><id>tag:blogger.com,1999:blog-2391037223319513388.post-6773518456180031254</id><published>2011-06-30T07:46:00.001-07:00</published><updated>2011-09-29T13:26:43.284-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-29T13:26:43.284-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="app engine" /><category scheme="http://www.blogger.com/atom/ns#" term="gafyd" /><category scheme="http://www.blogger.com/atom/ns#" term="apps" /><category scheme="http://www.blogger.com/atom/ns#" term="workaround" /><category scheme="http://www.blogger.com/atom/ns#" term="google apps" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><category scheme="http://www.blogger.com/atom/ns#" term="app id" /><category scheme="http://www.blogger.com/atom/ns#" term="gae" /><title>"You do not have the permissions necessary to install this application"</title><content type="html">I have been working with Google App Engine in conjecture with Google Apps for your domain, and their have been...quirks. The latest being that I recently added an application identifier that was a randomized series of letters and numbers (to avoid the dreaded &lt;span style="font-weight: bold;"&gt;"Sorry 'omgponies' is not available"&lt;/span&gt; message in the app creation process.&lt;br /&gt;
&lt;br /&gt;
The App ID I made (now disabled and scheduled for deletion) "806df7ef93" created successfully, and I uploaded my app content just fine, but when i went to &lt;a href="https://www.google.com/a/cpanel/[domain.com]/SelectServices"&gt;https://www.google.com/a/cpanel/[domain.com]/SelectServices&lt;/a&gt; and entered the correct App ID, I got the message:&lt;br /&gt;
&lt;blockquote&gt;
"You do not have the permissions necessary to install this application"&lt;/blockquote&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;a href="http://2.bp.blogspot.com/-FF1K9tveq30/TgyhfUJXRGI/AAAAAAAAAFg/GhZ6mErApnM/s1600/You+do+not+have+the+permissions+necessary+to+install+this+application.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="93" src="http://2.bp.blogspot.com/-FF1K9tveq30/TgyhfUJXRGI/AAAAAAAAAFg/GhZ6mErApnM/s320/You+do+not+have+the+permissions+necessary+to+install+this+application.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
I was a bit confused as I was logged in with an account that was an "Owner" of the application, but I happened upon &lt;a href="http://www.google.com/support/forum/p/Google%20Apps/thread?tid=6909a9939170caa1&amp;amp;hl=en"&gt;a post&lt;/a&gt; by &lt;a href="http://www.google.com/support/forum/p/Google%20Apps/user?userid=13789225373433947226&amp;amp;hl=en"&gt;kernixski&lt;/a&gt; that suggested that this problem would occur if the App ID &lt;span style="font-weight: bold;"&gt;ended in a number&lt;/span&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/-y9bGM1MAihU/TgyL_7WgqVI/AAAAAAAAAFc/sbgvfQ43iR8/s1600/kernixski_suggestion.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="85" src="http://3.bp.blogspot.com/-y9bGM1MAihU/TgyL_7WgqVI/AAAAAAAAAFc/sbgvfQ43iR8/s400/kernixski_suggestion.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Obviously there are other reasons for this error to manifest, and changing your App ID to not end in a number will probably not affect those cases. However, after choosing a new&amp;nbsp;&lt;span style="font-weight: bold;"&gt;ID that doesn't end with a number&lt;/span&gt;, this process worked perfectly. Now, if I could only use my native Google Apps account in AppEngine without a Gmail.com proxy account, things would really be looking up.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;&lt;a href="http://www.devfuel.com"&gt;devfuel.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2391037223319513388-6773518456180031254?l=www.devfuel.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Devfuel/~4/RO26YP3b_hU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devfuel.com/feeds/6773518456180031254/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devfuel.com/2011/06/do-not-have-permissions-necessary-to.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/6773518456180031254?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/6773518456180031254?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Devfuel/~3/RO26YP3b_hU/do-not-have-permissions-necessary-to.html" title="&amp;quot;You do not have the permissions necessary to install this application&amp;quot;" /><author><name>Elliott Edwards</name><uri>https://profiles.google.com/101256894969172700518</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-aJMJsLJV0yc/AAAAAAAAAAI/AAAAAAAAABc/epGY6ddcmWs/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-FF1K9tveq30/TgyhfUJXRGI/AAAAAAAAAFg/GhZ6mErApnM/s72-c/You+do+not+have+the+permissions+necessary+to+install+this+application.PNG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.devfuel.com/2011/06/do-not-have-permissions-necessary-to.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcEQng4cSp7ImA9WhdUE08.&quot;"><id>tag:blogger.com,1999:blog-2391037223319513388.post-848140730800872455</id><published>2011-06-15T15:10:00.001-07:00</published><updated>2011-09-29T13:26:43.639-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-29T13:26:43.639-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="tip" /><category scheme="http://www.blogger.com/atom/ns#" term=".net" /><category scheme="http://www.blogger.com/atom/ns#" term="c#" /><category scheme="http://www.blogger.com/atom/ns#" term="tostring" /><title>Stringing it out - object.ToString() vs. Convert.ToString()</title><content type="html">KodefuGuru has an &lt;a href="http://www.kodefuguru.com/post/2011/06/14/Deeper-into-Convert-ToString.aspx"&gt;interesting investigation and analysis&lt;/a&gt; of these two methods for serializing object data to strings. Convert.ToString() has some nice features that I will definitely be keeping in mind &lt;span style="font-style:italic;"&gt;while I linger&lt;/span&gt; in the world of .NET/C#.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;&lt;a href="http://www.devfuel.com"&gt;devfuel.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2391037223319513388-848140730800872455?l=www.devfuel.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Devfuel/~4/3V7WORfJbM0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devfuel.com/feeds/848140730800872455/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devfuel.com/2011/06/stringing-it-out-objecttostring-vs_15.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/848140730800872455?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/848140730800872455?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Devfuel/~3/3V7WORfJbM0/stringing-it-out-objecttostring-vs_15.html" title="Stringing it out - object.ToString() vs. Convert.ToString()" /><author><name>Elliott Edwards</name><uri>https://profiles.google.com/101256894969172700518</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-aJMJsLJV0yc/AAAAAAAAAAI/AAAAAAAAABc/epGY6ddcmWs/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.devfuel.com/2011/06/stringing-it-out-objecttostring-vs_15.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEYGSHk5cSp7ImA9WhVRFE4.&quot;"><id>tag:blogger.com,1999:blog-2391037223319513388.post-8556062581848399862</id><published>2011-04-04T20:28:00.002-07:00</published><updated>2012-03-22T09:02:09.729-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-22T09:02:09.729-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="wpf" /><category scheme="http://www.blogger.com/atom/ns#" term="attached property" /><category scheme="http://www.blogger.com/atom/ns#" term=".net 4.0" /><category scheme="http://www.blogger.com/atom/ns#" term=".net" /><category scheme="http://www.blogger.com/atom/ns#" term="xaml" /><category scheme="http://www.blogger.com/atom/ns#" term="resx" /><category scheme="http://www.blogger.com/atom/ns#" term="c#" /><category scheme="http://www.blogger.com/atom/ns#" term="string" /><category scheme="http://www.blogger.com/atom/ns#" term="resource" /><title>Bypass the colon - DRY your WPF/XAML label string resources with an Attached Property</title><content type="html">DRY, like KISS (Keep It Simple Stupid), is one of those acronyms that one is &lt;em&gt;unlikely to forget&lt;/em&gt; once you &lt;em&gt;get the gist&lt;/em&gt;. It stands for &lt;a href="http://en.wikipedia.org/wiki/Don%27t_repeat_yourself"&gt;Don’t Repeat Yourself&lt;/a&gt; and I have long been an adherent to this philosophy, but only recently was acquainted with the acronymic tie.&lt;br /&gt;
While working in WPF/XAML, I have see one such &lt;em&gt;repetition battleground&lt;/em&gt; emerge: String resources in a .resx file.&lt;br /&gt;
&lt;h4&gt;

Consider:&lt;/h4&gt;
&lt;pre style="background: white;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: 9.8pt;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.8pt;"&gt;&lt;span style="color: #a31515;"&gt;data&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;UserName&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;xml:space&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;preserve&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;value&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;User Name&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;value&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;data&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue; font-size: 9.8pt;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;h4&gt;

&lt;strong&gt;Versus:&lt;/strong&gt;&lt;/h4&gt;
&lt;pre style="background: white;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: 9.8pt;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.8pt;"&gt;&lt;span style="color: #a31515;"&gt;data&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;UserNameLabel&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;xml:space&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;preserve&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;value&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;User Name:&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;value&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;data&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue; font-size: 9.8pt;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="background: white;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="color: blue; font-size: 9.8pt;"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
The latter might be intended to be &lt;strong&gt;used in XAML like&lt;/strong&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="background: white;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: 9.8pt;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.8pt;"&gt;&lt;span style="color: #a31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color: red;"&gt; Text&lt;/span&gt;&lt;span style="color: blue;"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515;"&gt;x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Static&lt;/span&gt;&lt;span style="color: red;"&gt; res&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Resources&lt;/span&gt;&lt;span style="color: blue;"&gt;.UserNameLabel}" /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="background: white;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
But now we can see the problem. If and when you take steps to internationalize, you have to translate both resources. And if you refactor, you have to manage both instances.&amp;nbsp; While I have seen a couple solutions to this problem, I happened upon an alternative idea, &lt;strong&gt;an Attached Property&lt;/strong&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="background: white;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: 9.8pt;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.8pt;"&gt;&lt;span style="color: #a31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color: red;"&gt; ns&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Attached.LabelText&lt;/span&gt;&lt;span style="color: blue;"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515;"&gt;x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Static&lt;/span&gt;&lt;span style="color: red;"&gt; res&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Resources&lt;/span&gt;&lt;span style="color: blue;"&gt;.UserName}" /&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="background: white;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;&lt;span style="color: blue;"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
At this point, we have handily done away with the “colonated” version of the label (or hyphenated, etc.) in favor of the real, underlying resource. Now we have become more DRY (If I may use this sense).&lt;br /&gt;
The implementation is &lt;strong&gt;shockingly simple&lt;/strong&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="background: #ffffff; border-left: #eee 1px solid; border-top: #eee 1px solid; color: black; font-family: consolas, 'Courier New', courier, monospace; font-size: 10pt; overflow: scroll; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;
&lt;pre style="margin: 0px;"&gt;&lt;pre style="background: white;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: 9.8pt;"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.8pt;"&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;class&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Attached&lt;/span&gt;
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt; GetLabelText(DependencyObject obj)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; (&lt;span style="color: blue;"&gt;string&lt;/span&gt;)obj.GetValue(LabelTextProperty);
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;void&lt;/span&gt; SetLabelText(DependencyObject obj, &lt;span style="color: blue;"&gt;string&lt;/span&gt; value)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TextBlock textBlock = obj &lt;span style="color: blue;"&gt;as&lt;/span&gt; TextBlock;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (textBlock != &lt;span style="color: blue;"&gt;null&lt;/span&gt;)
&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; textBlock.Text = &lt;span style="color: blue;"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515;"&gt;"{0} :"&lt;/span&gt;, value);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;//TODO: Make the string format a localizable resource&lt;/span&gt;
&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; obj.SetValue(LabelTextProperty, value);
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;readonly&lt;/span&gt; DependencyProperty LabelTextProperty =
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DependencyProperty.RegisterAttached(&lt;span style="color: #a31515;"&gt;"LabelText"&lt;/span&gt;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: blue;"&gt;string&lt;/span&gt;),
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(TextBlock),
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;new&lt;/span&gt; UIPropertyMetadata(&lt;span style="color: #a31515;"&gt;"DefaultLabel"&lt;/span&gt;));
}&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
So where does that leave us? We should now be able to use this Attached Property to avoid string resource repetition, and that is a good thing. A similar approach will work for other Controls, text decorations, etc. Let me know if it works out for you.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;&lt;a href="http://www.devfuel.com"&gt;devfuel.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2391037223319513388-8556062581848399862?l=www.devfuel.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Devfuel/~4/QSlPKlOOxAs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devfuel.com/feeds/8556062581848399862/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devfuel.com/2011/04/bypass-colon-dry-your-wpfxaml-label_04.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/8556062581848399862?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/8556062581848399862?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Devfuel/~3/QSlPKlOOxAs/bypass-colon-dry-your-wpfxaml-label_04.html" title="Bypass the colon - DRY your WPF/XAML label string resources with an Attached Property" /><author><name>Elliott Edwards</name><uri>https://profiles.google.com/101256894969172700518</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-aJMJsLJV0yc/AAAAAAAAAAI/AAAAAAAAABc/epGY6ddcmWs/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.devfuel.com/2011/04/bypass-colon-dry-your-wpfxaml-label_04.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0AEQX07cCp7ImA9WhVRFE4.&quot;"><id>tag:blogger.com,1999:blog-2391037223319513388.post-1454023017740838042</id><published>2010-10-06T16:25:00.001-07:00</published><updated>2012-03-22T10:01:40.308-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-22T10:01:40.308-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="emulator" /><category scheme="http://www.blogger.com/atom/ns#" term="workaround" /><category scheme="http://www.blogger.com/atom/ns#" term="ddms" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><category scheme="http://www.blogger.com/atom/ns#" term="screenshot" /><title>Workaround: Android DDMS: "Screen not available" for screenshot</title><content type="html">Been working more with DDMS as a screen capture mechanism (was using Alt+PrntScrn method before) and have found an alarming trend:&lt;br /&gt;
&lt;br /&gt;
Sometimes, when using the "Device Screen Capture" mechanism, I get the following:&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/_-G_3ErCaUTo/TK0DRD9YXvI/AAAAAAAABdg/hK5oRdn08mU/s1600/DeviceScreenCapture_Screen_Not_available.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="151" src="http://4.bp.blogspot.com/_-G_3ErCaUTo/TK0DRD9YXvI/AAAAAAAABdg/hK5oRdn08mU/s200/DeviceScreenCapture_Screen_Not_available.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;/div&gt;
It seems to happen more when I am on certain, custom views that deal with multiple layers of transparency. Usually i could just hit the "refresh" buttons a few times and work past it.&lt;br /&gt;
&lt;br /&gt;
When hit with a more persistent "Screen not available" situation, i was stuck. 15 refreshes never resulted in a capture. Closing and reopening had the same result.&lt;br /&gt;
&lt;br /&gt;
Finally, on a whim, i hit the &lt;a href="http://developer.android.com/guide/developing/tools/emulator.html#controlling"&gt;rotate keys&lt;/a&gt; while the focus was on the emulator (either "7" or "9" on the numeric keypad), and then the "refresh" button in DDMS. To my amazement and relief, the capture went through. Now when a capture repeatedly fails, I typically &lt;b&gt;rotate the orientation in the emulator and THEN hit capture&lt;/b&gt;. For whatever reason, this seems to do the trick. *shrug*&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;&lt;a href="http://www.devfuel.com"&gt;devfuel.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2391037223319513388-1454023017740838042?l=www.devfuel.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Devfuel/~4/cksOGM0Di3c" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devfuel.com/feeds/1454023017740838042/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devfuel.com/2010/10/workaround-android-ddms-not-available.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/1454023017740838042?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/1454023017740838042?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Devfuel/~3/cksOGM0Di3c/workaround-android-ddms-not-available.html" title="Workaround: Android DDMS: &amp;quot;Screen not available&amp;quot; for screenshot" /><author><name>Elliott Edwards</name><uri>https://profiles.google.com/101256894969172700518</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-aJMJsLJV0yc/AAAAAAAAAAI/AAAAAAAAABc/epGY6ddcmWs/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_-G_3ErCaUTo/TK0DRD9YXvI/AAAAAAAABdg/hK5oRdn08mU/s72-c/DeviceScreenCapture_Screen_Not_available.png" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://www.devfuel.com/2010/10/workaround-android-ddms-not-available.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcEQn49fyp7ImA9WhdUE08.&quot;"><id>tag:blogger.com,1999:blog-2391037223319513388.post-356301625533520805</id><published>2010-08-27T10:46:00.002-07:00</published><updated>2011-09-29T13:26:43.067-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-29T13:26:43.067-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="email" /><category scheme="http://www.blogger.com/atom/ns#" term="emulator" /><category scheme="http://www.blogger.com/atom/ns#" term="workaround" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>Workaround: Can’t send email in Android emulator</title><content type="html">&lt;p&gt;Spent a fair amount of time this week trying to send various flavors and combinations of email. The slow leg of the development cycle was coming from the fact that there is no Gmail setup in the emulator. Thus, I would have to push the .APK file out to an actual device to test an iteration. &lt;/p&gt; &lt;p&gt;Fortunately I came across the &lt;a href="http://code.google.com/p/k9mail/"&gt;K-9 Mail application for Android&lt;/a&gt;. Since this allows POP and IMAP access, you can download its .APK in the emulator (via the browser), install it, and set up a simple POP/IMAP account. It then will respond to email-sending intentions. Goodbye to the “No applications can perform this action” message. While is isn’t exactly the same as the standard Gmail compose activity, it is close enough to narrow in on things like formatting and attachments without having to do a lengthier push-test cycle.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;&lt;a href="http://www.devfuel.com"&gt;devfuel.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2391037223319513388-356301625533520805?l=www.devfuel.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Devfuel/~4/No5ejTKBL-o" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devfuel.com/feeds/356301625533520805/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devfuel.com/2010/08/workaround-cant-send-email-in-android_27.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/356301625533520805?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/356301625533520805?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Devfuel/~3/No5ejTKBL-o/workaround-cant-send-email-in-android_27.html" title="Workaround: Can’t send email in Android emulator" /><author><name>Elliott Edwards</name><uri>https://profiles.google.com/101256894969172700518</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-aJMJsLJV0yc/AAAAAAAAAAI/AAAAAAAAABc/epGY6ddcmWs/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.devfuel.com/2010/08/workaround-cant-send-email-in-android_27.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D08EQ3s5eip7ImA9WhVRFE4.&quot;"><id>tag:blogger.com,1999:blog-2391037223319513388.post-4010324684669700104</id><published>2010-08-18T11:16:00.002-07:00</published><updated>2012-03-22T10:03:22.522-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-22T10:03:22.522-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="layout" /><category scheme="http://www.blogger.com/atom/ns#" term="column" /><category scheme="http://www.blogger.com/atom/ns#" term="radiobutton" /><category scheme="http://www.blogger.com/atom/ns#" term="radiogroup" /><category scheme="http://www.blogger.com/atom/ns#" term="tablelayout" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>Android: Advanced RadioButton layout (columns, etc.) in a RadioGroup</title><content type="html">Android is a powerful framework. Many of the design decisions and mechanisms are exactly what I would expect/want. However, I recently came across a “rough edge” where the in-built mechanism left something to be desired:&lt;br /&gt;
&lt;blockquote&gt;
There is no good way to do advanced (read as anything other than a simple LinearLayout) layout techniques with a RadioGroup.&lt;/blockquote&gt;
I have seen several posts of people wanting to do rational things like have two columns of RadioButtons for a certain screen orientation. This is not currently possible if you choose to use a RadioGroup:&lt;br /&gt;
&lt;pre style="font-family: consolas;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;RadioGroup&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;...&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;RadioButton&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;android:id&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;@+id/one&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;...&lt;/span&gt;&lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;RadioButton&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;android:id&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;@+id/two&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;...&lt;/span&gt;&lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;RadioButton&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;android:id&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;@+id/three&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;...&lt;/span&gt;&lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;RadioButton&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;android:id&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;@+id/four&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;...&lt;/span&gt;&lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;RadioGroup&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
So that is our first step…to step away from the RadioGroup.&lt;br /&gt;
Some of you, like I did, will then scream: “But wait! The RadioGroup has all the logic for mutual exclusion of buttons! We can’t do away with that!”&lt;br /&gt;
But then I thought about it from my oldschool Win32 perspective and realized that there wasn’t much logic in there to be lost. Certainly nothing that would be missed.&lt;br /&gt;
Lets say we have an “Option” enum:&lt;br /&gt;
&lt;pre style="font-family: consolas;"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;enum&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Option&lt;/span&gt;
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; One,
&amp;nbsp;&amp;nbsp;&amp;nbsp; Two,
&amp;nbsp;&amp;nbsp;&amp;nbsp; Three,
&amp;nbsp;&amp;nbsp;&amp;nbsp; Four
}&lt;/pre&gt;
Then we add some special Java enum sauce:&lt;br /&gt;
&lt;pre style="font-family: consolas;"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;enum&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Option&lt;/span&gt;
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; One(R.id.one),
&amp;nbsp;&amp;nbsp;&amp;nbsp; Two(R.id.two),
&amp;nbsp;&amp;nbsp;&amp;nbsp; Three(R.id.three),
&amp;nbsp;&amp;nbsp;&amp;nbsp; Four(R.id.four);
 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; idInLayout;&lt;/pre&gt;
&lt;pre style="font-family: consolas;"&gt;&lt;span style="color: green;"&gt;&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="font-family: consolas;"&gt;&lt;span style="color: green;"&gt;    //enum constructor taking a radio button id&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; Option(&lt;span style="color: blue;"&gt;int&lt;/span&gt; idInLayout)
    {
 &lt;span style="color: blue;"&gt;this&lt;/span&gt;.idInLayout = idInLayout;
    }
 &lt;/pre&gt;
&lt;span style="color: green;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //accessor for id&lt;/span&gt;&lt;br /&gt;
&lt;pre style="font-family: consolas;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;int&lt;/span&gt; getIdInLayout()
    {
 &lt;span style="color: blue;"&gt;return&lt;/span&gt; idInLayout;
    }
}&lt;/pre&gt;
Note that R.id.* would reference your app’s (not android’s) generated resource class. Since layout ids can be reused across layouts and are you are unlikely to need your option’s id more than once in a layout…this is pretty handy.&lt;br /&gt;
Now we just layout our RadioButtons like we would any other view:&lt;br /&gt;
&lt;pre style="font-family: consolas;"&gt;...
&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;TableLayout&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;...&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;TableRow&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;RadioButton&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;android:id&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;@+id/one&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;...&lt;/span&gt;&lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;RadioButton&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;android:id&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;@+id/two&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;...&lt;/span&gt;&lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;TableRow&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;TableRow&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;RadioButton&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;android:id&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;@+id/three&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;...&lt;/span&gt;&lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;RadioButton&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;android:id&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;@+id/four&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;...&lt;/span&gt;&lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;TableRow&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;TableLayout&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
...&lt;/pre&gt;
In our Activity, we add some initialization to handle button selection:&lt;br /&gt;
&lt;pre style="font-family: consolas;"&gt;@Override
&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;void&lt;/span&gt; onCreate(Bundle savedInstanceState)
{
&lt;span style="color: green;"&gt;    //Do all the standard init junk and then…&lt;/span&gt;
&lt;span style="color: blue;"&gt;&lt;span style="color: black;"&gt;    &lt;/span&gt;for&lt;/span&gt; (Option option : Option.values())
    {
 RadioButton radio = (RadioButton) &lt;/pre&gt;
&lt;pre style="font-family: consolas;"&gt;               findViewById(option.getIdInLayout());
 &lt;span style="color: blue;"&gt;if&lt;/span&gt; (radio != &lt;span style="color: blue;"&gt;null&lt;/span&gt;)
 {
  radio.setOnClickListener(optionOnClickListener);
  radio.setTag(option);
 }
    }
}&lt;/pre&gt;
This sets up each radio to call our click listener:&lt;br /&gt;
&lt;pre style="font-family: consolas;"&gt;RadioButton.OnClickListener optionOnClickListener = &lt;/pre&gt;
&lt;pre style="font-family: consolas;"&gt;     &lt;span style="color: blue;"&gt;new&lt;/span&gt; RadioButton.OnClickListener()
{
 &lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;void&lt;/span&gt; onClick(View v)
 {
  Option option = (Option) v.getTag();
  &lt;span style="color: green;"&gt;//React to your option selection here&lt;/span&gt;
  exclusivelySetOption(option);
 }
};&lt;/pre&gt;
Which then uses our exclusivelySetOption method:&lt;br /&gt;
&lt;pre style="font-family: consolas;"&gt;&lt;span style="color: blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;void&lt;/span&gt; exclusivelySetOption(Option selectedOption)
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;//Cycle through all options&lt;/span&gt;
&lt;span style="color: blue;"&gt;&lt;span style="color: black;"&gt;    &lt;/span&gt;for&lt;/span&gt; (Option option : Option.values())
    {
 RadioButton radio = (RadioButton) &lt;/pre&gt;
&lt;pre style="font-family: consolas;"&gt;             findViewById(option.getIdInLayout());
 &lt;span style="color: blue;"&gt;if&lt;/span&gt; (radio != &lt;span style="color: blue;"&gt;null&lt;/span&gt;)
 {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;//Check or uncheck as needed&lt;/span&gt;
            radio.setChecked(option.ordinal() &lt;/pre&gt;
&lt;pre style="font-family: consolas;"&gt;                   == selectedOption.ordinal());
 }
    }
}&lt;/pre&gt;
For completeness, you would call exclusivelySetOption in your onResume overload to set the initial radio value:&lt;br /&gt;
&lt;pre style="font-family: consolas;"&gt;@Override
&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;void&lt;/span&gt; onResume()
{
    super.onResume();
&amp;nbsp;&amp;nbsp;&amp;nbsp; Option currentOption = &lt;span style="color: green;"&gt;//get what our option should be&lt;/span&gt;
    exclusivelySetOption(currentOption);
}&lt;/pre&gt;
And there you have it. We have simulated a RadioGroup, layed out our RadioButtons with new found power, and massaged all the id mapping into our enumeration.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;&lt;a href="http://www.devfuel.com"&gt;devfuel.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2391037223319513388-4010324684669700104?l=www.devfuel.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Devfuel/~4/rfSyz82CO-I" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devfuel.com/feeds/4010324684669700104/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devfuel.com/2010/08/android-advanced-radiobutton-layout_18.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/4010324684669700104?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/4010324684669700104?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Devfuel/~3/rfSyz82CO-I/android-advanced-radiobutton-layout_18.html" title="Android: Advanced RadioButton layout (columns, etc.) in a RadioGroup" /><author><name>Elliott Edwards</name><uri>https://profiles.google.com/101256894969172700518</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-aJMJsLJV0yc/AAAAAAAAAAI/AAAAAAAAABc/epGY6ddcmWs/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://www.devfuel.com/2010/08/android-advanced-radiobutton-layout_18.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcEQn84cSp7ImA9WhdUE08.&quot;"><id>tag:blogger.com,1999:blog-2391037223319513388.post-4625566146423975564</id><published>2010-06-22T10:06:00.002-07:00</published><updated>2011-09-29T13:26:43.139-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-29T13:26:43.139-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="separator" /><category scheme="http://www.blogger.com/atom/ns#" term="wpf" /><category scheme="http://www.blogger.com/atom/ns#" term=".net" /><category scheme="http://www.blogger.com/atom/ns#" term="xaml" /><category scheme="http://www.blogger.com/atom/ns#" term="workaround" /><category scheme="http://www.blogger.com/atom/ns#" term="stackpanel" /><title>Workaround: WPF Separator hidden if in a horizontal StackPanel</title><content type="html">&lt;p&gt;The other day I was working with a series of TextBlock controls in a horizontally-oriented StackPanel. When I wanted some visible separation, I naturally chose the Separator control. When it didn’t show up, I was bemused and confused. This is getting to be a familiar place to be as I spelunk the deep caverns of WPF. &lt;/p&gt; &lt;p&gt;It took some digging, but I finally &lt;a href="http://stackoverflow.com/questions/1274370/wpf-toolbar-separator-shrinks-to-nothing-when-inside-a-stackpanel/1274444#1274444"&gt;came across&lt;/a&gt; a workable solution:&lt;/p&gt;&lt;!-- Start block. Created with Code4Blog for Microsoft Visual Studio 2010. Copyright (c)2010 Vitaly Zayko http://zayko.net --&gt; &lt;div style="width: 99.5%; color: black; overflow: auto"&gt;&lt;pre style="margin: 0em"&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;span style="color: #a31515"&gt;StackPanel&lt;span style="color: #ff0000"&gt; Orientation&lt;span style="color: #0000ff"&gt;="Horizontal"&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/pre&gt;&lt;pre style="margin: 0em"&gt; &lt;span style="color: #a31515"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;span style="color: #a31515"&gt;TextBlock&lt;span style="color: #ff0000"&gt; Text&lt;span style="color: #0000ff"&gt;="A" /&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/pre&gt;&lt;pre style="margin: 0em"&gt; &lt;span style="color: #a31515"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;span style="color: #a31515"&gt;Separator&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/pre&gt;&lt;pre style="margin: 0em"&gt; &lt;span style="color: #a31515"&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;span style="color: #a31515"&gt;Separator.LayoutTransform&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/pre&gt;&lt;pre style="margin: 0em"&gt; &lt;span style="color: #a31515"&gt;            &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;span style="color: #a31515"&gt;RotateTransform&lt;span style="color: #ff0000"&gt; Angle&lt;span style="color: #0000ff"&gt;="90" /&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/pre&gt;&lt;pre style="margin: 0em"&gt; &lt;span style="color: #a31515"&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;span style="color: #a31515"&gt;Separator.LayoutTransform&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/pre&gt;&lt;pre style="margin: 0em"&gt; &lt;span style="color: #a31515"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;span style="color: #a31515"&gt;Separator&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/pre&gt;&lt;pre style="margin: 0em"&gt; &lt;span style="color: #a31515"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;span style="color: #a31515"&gt;TextBlock&lt;span style="color: #ff0000"&gt; Text&lt;span style="color: #0000ff"&gt;="B" /&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/pre&gt;&lt;pre style="margin: 0em"&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;span style="color: #a31515"&gt;StackPanel&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/pre&gt;&lt;pre style="margin: 0em"&gt; &lt;/pre&gt;&lt;/div&gt;&lt;p&gt; It seems the Separator control is not set up to be "self righting" if the parent control has an alternate orientation. Thus the 90 degree twist. After this, the Separator shows as expected.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;&lt;a href="http://www.devfuel.com"&gt;devfuel.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2391037223319513388-4625566146423975564?l=www.devfuel.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Devfuel/~4/xs6_SB0nFI0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devfuel.com/feeds/4625566146423975564/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devfuel.com/2010/06/workaround-wpf-separator-hidden-if-in_22.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/4625566146423975564?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/4625566146423975564?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Devfuel/~3/xs6_SB0nFI0/workaround-wpf-separator-hidden-if-in_22.html" title="Workaround: WPF Separator hidden if in a horizontal StackPanel" /><author><name>Elliott Edwards</name><uri>https://profiles.google.com/101256894969172700518</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-aJMJsLJV0yc/AAAAAAAAAAI/AAAAAAAAABc/epGY6ddcmWs/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.devfuel.com/2010/06/workaround-wpf-separator-hidden-if-in_22.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcEQn8-fip7ImA9WhdUE08.&quot;"><id>tag:blogger.com,1999:blog-2391037223319513388.post-525964812687100487</id><published>2010-04-22T09:56:00.001-07:00</published><updated>2011-09-29T13:26:43.156-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-29T13:26:43.156-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="blogger" /><category scheme="http://www.blogger.com/atom/ns#" term="social media" /><category scheme="http://www.blogger.com/atom/ns#" term="template" /><category scheme="http://www.blogger.com/atom/ns#" term="facebook" /><title>Blogger: Add Facebook "Like" button to each post</title><content type="html">&lt;p&gt;
Amit, over at Digital Inspiration, &lt;a href="http://www.labnol.org/internet/add-facebook-plugins-to-website/13505/"&gt;laid out some simple steps&lt;/a&gt; to getting the new FaceBook "Like" button onto your Blogger site. &lt;b&gt;If only&lt;/b&gt; it had worked for me...&lt;/p&gt;

&lt;p&gt;
But, being a developer, I dug a bit into the Blogger templating engine and figured out how to make it work for real in a modern template. The snippet you want is:&lt;/p&gt;

&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white; font-family: Consolas, 'Courier New', Courier, Monospace; font-size: 10pt; color: black; background: white; background-color: #FFFFCC; padding: .5em; overflow:scroll; border-top: 1px solid #eee; border-left: 1px solid #eee;"&gt; &lt;pre style="margin: 0px;"&gt;&amp;lt;iframe 
   allowTransparency='true' 
   frameborder='0' 
   scrolling='no' 
   expr:src='"http://www.facebook.com/plugins/like.php?href=" 
             + data:post.url 
             + "&amp;amp;amp;layout=standard&amp;amp;amp;show_faces=true&amp;amp;amp;"
             + "width=530&amp;amp;amp;height=60&amp;amp;amp;action=like&amp;amp;amp;"
             + "colorscheme=light"' 
   style='border:none; overflow:hidden; width:530px; height:60px'/&amp;gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;
The "expr:src" tells the engine to interpret the XML attribute as an expression. The single quotes allow you to nest double quotes inside. The quoted sections are the parts that won't change, and the "data:post.url" is replaced with the fixed url for the given post.&lt;/p&gt;

&lt;p&gt;
As to where to put it, that really depends on your intention and current blogger template. In general, though, you need to edit your HTML template:&lt;/p&gt;

&lt;pre&gt;Layout Tab -&gt; Edit HTML&lt;/pre&gt;

&lt;p&gt;
&lt;b&gt;Warning! Manually editing your template can hose your entire blog if done wrong. Be sure to back it up (instructions are on the Edit HTML page), and don't blame anyone but yourself if you mess it up!&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;
In the edit box, search for "&amp;lt;b:includable id='post' var='post'&amp;gt;". That is the beginning of the post template. You should be able to make out the various parts of the post (comments, edit button, title, etc.) Try pasting the above snippet in various areas and then pressing the "Preview" button. (This lets you try it before you "buy" it ;) If you get a working "Like" button on each post, you are done!&lt;/p&gt;

&lt;p&gt;
Good Luck!&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;UPDATE 1 - No Line Breaks&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;
In case you have issues, here is the version with all the clarifying formatting removed and no line breaks:&lt;/p&gt;

&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white; font-family: Consolas, 'Courier New', Courier, Monospace; font-size: 10pt; color: black; background: white; background-color: #FFFFCC; padding: .5em; overflow:scroll; border-top: 1px solid #eee; border-left: 1px solid #eee;"&gt; &lt;pre style="margin: 0px;"&gt;&amp;lt;iframe allowTransparency='true' expr:src='&amp;quot;http://www.facebook.com/plugins/like.php?href=&amp;quot; + data:post.url + &amp;quot;&amp;amp;amp;layout=standard&amp;amp;amp;show_faces=true&amp;amp;amp;width=530&amp;amp;amp;height=60&amp;amp;amp;action=like&amp;amp;amp;colorscheme=light&amp;quot;' frameborder='0' scrolling='no' style='border:none; overflow:hidden; width:530px; height:60px'/&amp;gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;
Note: When you paste this into the HTML editor, ensure that the snippet begins with "&amp;lt;iframe" and not "&amp;amp;lt;iframe". The snippet had to be escaped in order to display correctly in the HTML of this blog, but you need the real deal.&lt;/p&gt;

&lt;p&gt;
In addition, if you are using the blogger in draft template designer, be aware that there are some HTML editor errors that occur under certain conditions. If you are getting a mysterious error code, try switching to the draft HTML editor. (while on the Edit HTML page, replace "www" in the address bar with "draft") I had to change some attributes from having the value "" to having " " (a space) in order to work.&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;UPDATE 2 - String escapes&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;As reported by some readers, the previous drafts of this post were not correctly formatted. Inside the expr:src quoted strings, you need "&amp;amp;amp;" instead of "&amp;amp;". The above examples have been updated to allow for direct copy and paste.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;&lt;a href="http://www.devfuel.com"&gt;devfuel.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2391037223319513388-525964812687100487?l=www.devfuel.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Devfuel/~4/rP5V8dqta8I" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devfuel.com/feeds/525964812687100487/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devfuel.com/2010/04/blogger-add-facebook-button-to-each.html#comment-form" title="51 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/525964812687100487?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/525964812687100487?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Devfuel/~3/rP5V8dqta8I/blogger-add-facebook-button-to-each.html" title="Blogger: Add Facebook &amp;quot;Like&amp;quot; button to each post" /><author><name>Elliott Edwards</name><uri>https://profiles.google.com/101256894969172700518</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-aJMJsLJV0yc/AAAAAAAAAAI/AAAAAAAAABc/epGY6ddcmWs/s512-c/photo.jpg" /></author><thr:total>51</thr:total><feedburner:origLink>http://www.devfuel.com/2010/04/blogger-add-facebook-button-to-each.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcEQnw6fyp7ImA9WhdUE08.&quot;"><id>tag:blogger.com,1999:blog-2391037223319513388.post-5748605276278683838</id><published>2010-02-02T12:05:00.002-08:00</published><updated>2011-09-29T13:26:43.217-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-29T13:26:43.217-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="atom" /><category scheme="http://www.blogger.com/atom/ns#" term="blogger" /><category scheme="http://www.blogger.com/atom/ns#" term="seo" /><category scheme="http://www.blogger.com/atom/ns#" term="sitemap" /><category scheme="http://www.blogger.com/atom/ns#" term="mvc" /><category scheme="http://www.blogger.com/atom/ns#" term="asp.net" /><title>Free, automated Google Sitemap for your Blogger site</title><content type="html">&lt;p&gt;I am sure that this is well-known for an elite few SEO-type folks, but it is new to me, and thus I am posting it for posterity.&lt;/p&gt;&lt;p&gt;Strayed across some choice tidbits today. Was doing the work to make a custom &lt;a href="http://www.asp.net/mvc/"&gt;ASP.NET MVC&lt;/a&gt; site have an automated &lt;a href="http://www.sitemaps.org/"&gt;Sitemap&lt;/a&gt; stream and suddenly realized that various blogs that I maintain did not have this service either.&lt;/p&gt;
&lt;p&gt;Ever wary of &lt;em&gt;re-Inventing wheel-like structures&lt;/em&gt;, I did some digging and came across &lt;a href="http://theos.in/hakuna-matata/adding-google-sitemap-to-bloggercom-blog-account/"&gt;this&lt;/a&gt; (slightly outdated) reference on how to use the ATOM feed of a blogger site as a sitemap. More important, however, was the user comments that suggested using the following URL for a live sitemap feed:&lt;/p&gt;
&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white; font-family: Consolas, 'Courier New', Courier, Monospace; font-size: 10pt; color: black; background: white; background-color: #FFFFCC; padding: .5em; overflow:scroll; border-top: 1px solid #eee; border-left: 1px solid #eee;"&gt; &lt;pre style="margin: 0px;"&gt;atom.xml?redirect=false&amp;start-index=1&amp;max-results=100&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Since &lt;a href="http://www.google.com/webmasters/tools/"&gt;Google Webmaster Tools&lt;/a&gt; no longer allows a full sitemap URL, copying and pasting that value into the sitemap add UI will yield delicious, automated discovery of Blogger.com content.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;&lt;a href="http://www.devfuel.com"&gt;devfuel.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2391037223319513388-5748605276278683838?l=www.devfuel.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Devfuel/~4/ndQkUcPIc7A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devfuel.com/feeds/5748605276278683838/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devfuel.com/2010/02/free-automated-google-sitemap-for-your_02.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/5748605276278683838?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/5748605276278683838?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Devfuel/~3/ndQkUcPIc7A/free-automated-google-sitemap-for-your_02.html" title="Free, automated Google Sitemap for your Blogger site" /><author><name>Elliott Edwards</name><uri>https://profiles.google.com/101256894969172700518</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-aJMJsLJV0yc/AAAAAAAAAAI/AAAAAAAAABc/epGY6ddcmWs/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.devfuel.com/2010/02/free-automated-google-sitemap-for-your_02.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcEQn8yfSp7ImA9WhdUE08.&quot;"><id>tag:blogger.com,1999:blog-2391037223319513388.post-5531842067267447465</id><published>2009-11-20T10:19:00.001-08:00</published><updated>2011-09-29T13:26:43.195-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-29T13:26:43.195-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="twitter" /><title>Flocking together</title><content type="html">&lt;a href="http://twitter.com/devfuel"&gt;DevFuel is now tweeting&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;&lt;a href="http://www.devfuel.com"&gt;devfuel.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2391037223319513388-5531842067267447465?l=www.devfuel.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Devfuel/~4/MinAcY43-Ug" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devfuel.com/feeds/5531842067267447465/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devfuel.com/2009/11/flocking-together_20.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/5531842067267447465?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/5531842067267447465?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Devfuel/~3/MinAcY43-Ug/flocking-together_20.html" title="Flocking together" /><author><name>Elliott Edwards</name><uri>https://profiles.google.com/101256894969172700518</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-aJMJsLJV0yc/AAAAAAAAAAI/AAAAAAAAABc/epGY6ddcmWs/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.devfuel.com/2009/11/flocking-together_20.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcEQn88cSp7ImA9WhdUE08.&quot;"><id>tag:blogger.com,1999:blog-2391037223319513388.post-5410860370545656245</id><published>2009-10-27T13:18:00.002-07:00</published><updated>2011-09-29T13:26:43.179-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-29T13:26:43.179-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="win7" /><category scheme="http://www.blogger.com/atom/ns#" term="autopublish" /><category scheme="http://www.blogger.com/atom/ns#" term="windows7" /><category scheme="http://www.blogger.com/atom/ns#" term="virtual application" /><category scheme="http://www.blogger.com/atom/ns#" term="windows" /><category scheme="http://www.blogger.com/atom/ns#" term="xpmode" /><title>Windows 7 XP Mode: Manually Add Virtual Application Link</title><content type="html">&lt;p&gt;I was playing around with Windows 7 on my work machine and got the Windows XP Mode working. I loved how installing an application on the virtual machine creates a “virtual application” link in the host Windows 7 environment. However, while the first application I installed worked perfectly, the second failed to autopublish a link to Windows 7. &lt;/p&gt; &lt;br/&gt; &lt;p&gt;Turns out that you need to have the install link available for all users in order to autopublish. So I just dragged and dropped a shortcut into Documents and Settings\All Users\Programs and logged off the virtual machine. Voila, the link autopublished. &lt;/p&gt; &lt;br/&gt; &lt;p&gt;In the future, I will make sure to install applications for “all users” to avoid having to do this step. Someone mentioned that they thought the autopublish only worked for Microsoft Installer based applications, but I am skeptical. Instead I am betting that certain non-Microsoft installers are more likely to default to installing for the current user/and/or the suggestor of this idea chose “install for current user” on these applications (as was in the case of my second, non-publishing install).&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;&lt;a href="http://www.devfuel.com"&gt;devfuel.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2391037223319513388-5410860370545656245?l=www.devfuel.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Devfuel/~4/x1gD7XtMiHQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devfuel.com/feeds/5410860370545656245/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devfuel.com/2009/10/windows-7-xp-mode-manually-add-virtual_27.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/5410860370545656245?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/5410860370545656245?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Devfuel/~3/x1gD7XtMiHQ/windows-7-xp-mode-manually-add-virtual_27.html" title="Windows 7 XP Mode: Manually Add Virtual Application Link" /><author><name>Elliott Edwards</name><uri>https://profiles.google.com/101256894969172700518</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-aJMJsLJV0yc/AAAAAAAAAAI/AAAAAAAAABc/epGY6ddcmWs/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.devfuel.com/2009/10/windows-7-xp-mode-manually-add-virtual_27.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcEQn45cSp7ImA9WhdUE08.&quot;"><id>tag:blogger.com,1999:blog-2391037223319513388.post-279981495971393722</id><published>2009-10-23T07:30:00.001-07:00</published><updated>2011-09-29T13:26:43.029-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-29T13:26:43.029-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="workaround" /><category scheme="http://www.blogger.com/atom/ns#" term="chrome" /><title>Google Chrome 4.0.223.9 Crashes (development branch workaround)</title><content type="html">Was getting pretty regular crashes when clicking on links in Chrome. After disabling the RSS extension, everything is hunky-dorey again:&lt;br/&gt;&lt;div&gt;&lt;span style="font-weight:bold;"&gt;
Wrench Menu-&gt;Extensions-&gt;disable button on RSS extension&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;&lt;a href="http://www.devfuel.com"&gt;devfuel.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2391037223319513388-279981495971393722?l=www.devfuel.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Devfuel/~4/dXPeMkhIBMA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devfuel.com/feeds/279981495971393722/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devfuel.com/2009/10/google-chrome-402239-crashes_23.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/279981495971393722?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/279981495971393722?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Devfuel/~3/dXPeMkhIBMA/google-chrome-402239-crashes_23.html" title="Google Chrome 4.0.223.9 Crashes (development branch workaround)" /><author><name>Elliott Edwards</name><uri>https://profiles.google.com/101256894969172700518</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-aJMJsLJV0yc/AAAAAAAAAAI/AAAAAAAAABc/epGY6ddcmWs/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.devfuel.com/2009/10/google-chrome-402239-crashes_23.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcEQnw-fyp7ImA9WhdUE08.&quot;"><id>tag:blogger.com,1999:blog-2391037223319513388.post-6583856330217243456</id><published>2009-10-05T10:15:00.002-07:00</published><updated>2011-09-29T13:26:43.257-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-29T13:26:43.257-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="sync" /><category scheme="http://www.blogger.com/atom/ns#" term="chrome" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><category scheme="http://www.blogger.com/atom/ns#" term="browser" /><title>Chrome Bookmark Sync on by default? (development branch)</title><content type="html">&lt;p&gt;This morning I noticed some links at the bottom of the excellent Google Chrome “New Tab” page. Although I am running the development build of Chrome, I hadn’t specified the command line parameters that enable &lt;a href="http://googlesystem.blogspot.com/2009/08/sync-google-chrome-bookmarks.html"&gt;bookmark sync&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;So I went out on a limb and tried it out. Indeed, it does what one would expect. Previously I had been using evernote to share/log links. This looks like a much better system for having my organized links on any machine I work on. I should have tried it when it was first released, but oh well…just a bit behind the curve. If you have the development branch of Chrome, give it a try!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;&lt;a href="http://www.devfuel.com"&gt;devfuel.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2391037223319513388-6583856330217243456?l=www.devfuel.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Devfuel/~4/Khz3sODYWHQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devfuel.com/feeds/6583856330217243456/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devfuel.com/2009/10/chrome-bookmark-sync-on-by-default_05.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/6583856330217243456?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/6583856330217243456?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Devfuel/~3/Khz3sODYWHQ/chrome-bookmark-sync-on-by-default_05.html" title="Chrome Bookmark Sync on by default? (development branch)" /><author><name>Elliott Edwards</name><uri>https://profiles.google.com/101256894969172700518</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-aJMJsLJV0yc/AAAAAAAAAAI/AAAAAAAAABc/epGY6ddcmWs/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.devfuel.com/2009/10/chrome-bookmark-sync-on-by-default_05.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcEQn07fip7ImA9WhdUE08.&quot;"><id>tag:blogger.com,1999:blog-2391037223319513388.post-7131215686273053259</id><published>2009-06-12T09:10:00.001-07:00</published><updated>2011-09-29T13:26:43.306-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-29T13:26:43.306-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="msdn" /><category scheme="http://www.blogger.com/atom/ns#" term="documentation" /><category scheme="http://www.blogger.com/atom/ns#" term="search engine" /><category scheme="http://www.blogger.com/atom/ns#" term="browser" /><title>Google Custom Search + MSDN + Chrome Omnibox = bliss</title><content type="html">&lt;p&gt;So, this is a technology fusion post. The ability to do this has been around for a while, but I have just recently put &lt;span style="font-weight:bold;"&gt;one and one and one together to get three&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;MSDN is well known for being a monolithic, barely navigable Leviathan of a programmer resource. For the most part, I have avoided it by using the local version installed by Visual Studio. However, at my home machine, I have opted out of the huge MSDN install and started using the online version instead. Typically this consisted of doing a google search with "msdn" as a keyword.&lt;/p&gt;
&lt;p&gt;Recently, while &lt;a href="http://www.google.com/support/chrome/bin/answer.py?answer=95653"&gt;setting up a custom search engine&lt;/a&gt; for the &lt;a href="http://www.google.com/support/chrome/bin/answer.py?answer=95440&amp;hl=en"&gt;Omnibox in Chrome&lt;/a&gt;, it occurred to me that there is a better way.&lt;/p&gt;
&lt;p&gt;After a bit of time, i have tacked together the following:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Find a &lt;a href="http://www.google.com/cse?cx=018205968162215846785:zeur6t7rqb8"&gt;Google Custom Search tailored for MSDN&lt;/a&gt; (tip of the hat to &lt;a href="http://stackoverflow.com/users/3043/joel-coehoorn"&gt;Joel Coehoorn&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Familiarize yourself with the &lt;a href="http://www.google.com/support/chrome/bin/answer.py?answer=95655"&gt;Omnibox search shortcuts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.google.com/support/chrome/bin/answer.py?answer=95653"&gt;Set up a custom search engine for Chome&lt;/a&gt; that points to your custom google search:&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;&lt;span style="font-weight:bold;"&gt;Name:&lt;/span&gt;MSDN&lt;br /&gt;
&lt;span style="font-weight:bold;"&gt;Shortcut:&lt;/span&gt;msdn&lt;br /&gt;
&lt;span style="font-weight:bold;"&gt;URL:&lt;/span&gt;&lt;pre&gt;http://www.google.com/cse?cx=018205968162215846785:zeur6t7rqb8 
&amp;ie=UTF-8&amp;q=%s&amp;sa=Search&lt;/pre&gt;
[Note: Although this URL is on two lines for long line wrapping purposes, you will need to rejoin them for entry in Chrome.]&lt;/blockquote&gt;
&lt;p&gt;So now a reasonable MSDN search can be accomplished in the browser via shortcuts. Typing "msdn" [TAB] "object" gives the System.Object entry as the first result. Next on my list would be getting the results to be in the &lt;a href="http://weblogs.asp.net/jgalloway/archive/2008/08/30/msdn-low-bandwidth-bookmarklet.aspx"&gt;loband version of MSDN&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;&lt;a href="http://www.devfuel.com"&gt;devfuel.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2391037223319513388-7131215686273053259?l=www.devfuel.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Devfuel/~4/d7Yp-FzMkpg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devfuel.com/feeds/7131215686273053259/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devfuel.com/2009/06/google-custom-search-msdn-chrome_12.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/7131215686273053259?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/7131215686273053259?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Devfuel/~3/d7Yp-FzMkpg/google-custom-search-msdn-chrome_12.html" title="Google Custom Search + MSDN + Chrome Omnibox = bliss" /><author><name>Elliott Edwards</name><uri>https://profiles.google.com/101256894969172700518</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-aJMJsLJV0yc/AAAAAAAAAAI/AAAAAAAAABc/epGY6ddcmWs/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.devfuel.com/2009/06/google-custom-search-msdn-chrome_12.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcEQnwyfip7ImA9WhdUE08.&quot;"><id>tag:blogger.com,1999:blog-2391037223319513388.post-709872976339775420</id><published>2009-01-21T10:24:00.002-08:00</published><updated>2011-09-29T13:26:43.296-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-29T13:26:43.296-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="quote" /><category scheme="http://www.blogger.com/atom/ns#" term="humor" /><title>Classic C++ Quote</title><content type="html">Referring to a particularly heinous block of legacy code:   &lt;blockquote&gt;In a COM-Wrapped DLL, having a class named &amp;quot;CGlobals&amp;quot;  that is both global and static is like having a class named &amp;quot;CMemoryLeak&amp;quot; - TSE &lt;/blockquote&gt;  &lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;&lt;a href="http://www.devfuel.com"&gt;devfuel.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2391037223319513388-709872976339775420?l=www.devfuel.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Devfuel/~4/TrvOW_9giw4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devfuel.com/feeds/709872976339775420/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devfuel.com/2009/01/classic-c-quote_21.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/709872976339775420?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/709872976339775420?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Devfuel/~3/TrvOW_9giw4/classic-c-quote_21.html" title="Classic C++ Quote" /><author><name>Elliott Edwards</name><uri>https://profiles.google.com/101256894969172700518</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-aJMJsLJV0yc/AAAAAAAAAAI/AAAAAAAAABc/epGY6ddcmWs/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.devfuel.com/2009/01/classic-c-quote_21.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0MCQXc5eip7ImA9WhVRFE4.&quot;"><id>tag:blogger.com,1999:blog-2391037223319513388.post-3337108154237494990</id><published>2009-01-13T09:18:00.002-08:00</published><updated>2012-03-22T09:57:40.922-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-22T09:57:40.922-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="howto" /><category scheme="http://www.blogger.com/atom/ns#" term="xmltextwriter" /><category scheme="http://www.blogger.com/atom/ns#" term="quotes" /><category scheme="http://www.blogger.com/atom/ns#" term="c#" /><category scheme="http://www.blogger.com/atom/ns#" term="xmldocument" /><title>Howto: Save an XmlDocument with single-quoted attributes</title><content type="html">There are some cases in which one has to deal with non-standard XML serialization. We all know why this can happen, (cough, cough, legacy code) but then we have to make things work anyway. So...say you are reading and writing XML that uses single quotes instead of double quotes to surround attributes (it is valid, just non-standard). If you used XmlDocument.Save() to write out the DOM, you then may have been dismayed to see double quotes. So how to make .NET spit out single quotes?&lt;br /&gt;
&lt;div style="background-color: #ffffcc; background: white; background: white; border-left: 1px solid #eee; border-top: 1px solid #eee; color: black; color: black; font-family: Consolas, 'Courier New', Courier, Monospace; font-family: Courier New; font-size: 10pt; font-size: 10pt; overflow: scroll; padding: .5em;"&gt;
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; WriteSingleQuotedXml(&lt;span style="color: #2b91af;"&gt;XmlDocument&lt;/span&gt; document, &lt;span style="color: blue;"&gt;string&lt;/span&gt; path)&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;using&lt;/span&gt; (&lt;span style="color: #2b91af;"&gt;XmlTextWriter&lt;/span&gt; writer = &lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;XmlTextWriter&lt;/span&gt;(path, System.Text.&lt;span style="color: #2b91af;"&gt;Encoding&lt;/span&gt;.Default))&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;//Save using single quotes around attributes, etc&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; writer.QuoteChar = &lt;span style="color: #a31515;"&gt;'\''&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// Write XML data.&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; document.Save(writer);&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
Now that that is out of the way, perhaps you need to &lt;a href="http://www.devfuel.com/2007/03/xmlserializer-now-with-less-xmlnsxsi.html"&gt;get rid of the leading  "&amp;lt; ? x m l &amp;gt;", "xmlns:xsi" and "xmlns:xsd" stuff?&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;&lt;a href="http://www.devfuel.com"&gt;devfuel.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2391037223319513388-3337108154237494990?l=www.devfuel.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Devfuel/~4/FX1U4Qtod8U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devfuel.com/feeds/3337108154237494990/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devfuel.com/2009/01/howto-save-xmldocument-with-single_13.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/3337108154237494990?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/3337108154237494990?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Devfuel/~3/FX1U4Qtod8U/howto-save-xmldocument-with-single_13.html" title="Howto: Save an XmlDocument with single-quoted attributes" /><author><name>Elliott Edwards</name><uri>https://profiles.google.com/101256894969172700518</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-aJMJsLJV0yc/AAAAAAAAAAI/AAAAAAAAABc/epGY6ddcmWs/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.devfuel.com/2009/01/howto-save-xmldocument-with-single_13.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcEQn48eyp7ImA9WhdUE08.&quot;"><id>tag:blogger.com,1999:blog-2391037223319513388.post-3579505099418445697</id><published>2009-01-11T01:15:00.001-08:00</published><updated>2011-09-29T13:26:43.073-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-29T13:26:43.073-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="blogger" /><category scheme="http://www.blogger.com/atom/ns#" term="gcal" /><category scheme="http://www.blogger.com/atom/ns#" term="free" /><category scheme="http://www.blogger.com/atom/ns#" term="calendar" /><category scheme="http://www.blogger.com/atom/ns#" term="gcalview" /><category scheme="http://www.blogger.com/atom/ns#" term="aggregate" /><category scheme="http://www.blogger.com/atom/ns#" term="widget" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><title>gcalview - Free Google Calendar Blogger Widget</title><content type="html">&lt;a href="http://code.google.com/p/gcalview/wiki/AddToBlogger"&gt;Click to add gcalview to Blogger&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;&lt;a href="http://www.devfuel.com"&gt;devfuel.com&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2391037223319513388-3579505099418445697?l=www.devfuel.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Devfuel/~4/wIpIe001ZJw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devfuel.com/feeds/3579505099418445697/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devfuel.com/2009/01/gcalview-free-google-calendar-blogger_11.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/3579505099418445697?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2391037223319513388/posts/default/3579505099418445697?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Devfuel/~3/wIpIe001ZJw/gcalview-free-google-calendar-blogger_11.html" title="gcalview - Free Google Calendar Blogger Widget" /><author><name>Elliott Edwards</name><uri>https://profiles.google.com/101256894969172700518</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-aJMJsLJV0yc/AAAAAAAAAAI/AAAAAAAAABc/epGY6ddcmWs/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.devfuel.com/2009/01/gcalview-free-google-calendar-blogger_11.html</feedburner:origLink></entry></feed>

