<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-17855063</id><updated>2009-12-13T21:53:46.056-07:00</updated><title type='text'>Elegant Development</title><subtitle type='html'>Just my stuff..</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://elegantdevelopment.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default?orderby=updated'/><link rel='alternate' type='text/html' href='http://elegantdevelopment.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default?start-index=26&amp;max-results=25&amp;orderby=updated'/><author><name>Wasatch Wizard</name><uri>http://www.blogger.com/profile/07858015938543437007</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>85</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-17855063.post-777693948778938492</id><published>2009-09-23T07:59:00.000-07:00</published><updated>2009-09-23T13:15:57.055-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><title type='text'>Customize how search results are displayed</title><content type='html'>&lt;p&gt;I created a simple utility that can customize the Visual Studio Find Results output. I think using it should be pretty self-explanatory..&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_RDJEOHTGP8U/SrqB9x1C1PI/AAAAAAAAAGU/G_ZkKM4Lw1M/s1600-h/VSFindResultsEditor8.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="VSFindResultsEditor" border="0" alt="VSFindResultsEditor" src="http://lh5.ggpht.com/_RDJEOHTGP8U/SrqB-zEvsmI/AAAAAAAAAGY/5mcrIdqv_sk/VSFindResultsEditor_thumb6.png?imgmax=800" width="509" height="210" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I wanted something new to do this morning, what can I say!? &lt;/p&gt;  &lt;p&gt;&lt;a href="http://dl.getdropbox.com/u/123747/blog/VSFindResultsEditor.exe"&gt;Download it here!&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;You can also check out Sara Ford’s blog for all the glorious details about customizing the Visual Studio Find Results output:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://blogs.msdn.com/saraford/archive/2008/11/24/did-you-know-you-can-customize-how-search-results-are-displayed-in-the-find-results-window-363.aspx" href="http://blogs.msdn.com/saraford/archive/2008/11/24/did-you-know-you-can-customize-how-search-results-are-displayed-in-the-find-results-window-363.aspx"&gt;http://blogs.msdn.com/saraford/archive/2008/11/24/did-you-know-you-can-customize-how-search-results-are-displayed-in-the-find-results-window-363.aspx&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17855063-777693948778938492?l=elegantdevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elegantdevelopment.blogspot.com/feeds/777693948778938492/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=17855063&amp;postID=777693948778938492' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/777693948778938492'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/777693948778938492'/><link rel='alternate' type='text/html' href='http://elegantdevelopment.blogspot.com/2009/09/customize-how-search-results-are.html' title='Customize how search results are displayed'/><author><name>Wasatch Wizard</name><uri>http://www.blogger.com/profile/07858015938543437007</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00828643655769295472'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17855063.post-6424754533289098285</id><published>2009-09-23T07:09:00.001-07:00</published><updated>2009-09-23T07:09:56.857-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><title type='text'>Excellent Visual Studio tips roundup by Sara Ford</title><content type='html'>&lt;p&gt;&lt;a title="http://blogs.msdn.com/saraford/archive/2009/09/09/teched-australia-25-visual-studio-2008-ide-tips.aspx" href="http://blogs.msdn.com/saraford/archive/2009/09/09/teched-australia-25-visual-studio-2008-ide-tips.aspx"&gt;http://blogs.msdn.com/saraford/archive/2009/09/09/teched-australia-25-visual-studio-2008-ide-tips.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;The ones I found most useful (or didn’t already know) include:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Prevent copying blank lines with Ctrl+C&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Look in Tools - Options - Text Editor - All Languages - General. Unchecking 'Apply Cut or Copy commands to blank lines when there is no selection' prevents copying a blank line into the clipboard.&amp;#160; How did I ever miss this checkbox!?&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Incremental Search&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This allows me to jump to the next match as I type it out. I LOVE it!!&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160; 1. Press Ctrl+I   &lt;br /&gt;&amp;#160;&amp;#160; 2. Start typing the text you are searching for.&amp;#160; note: you'll see the cursor jump to the first match, highlighting the current search string.    &lt;br /&gt;&amp;#160;&amp;#160; 3. Press Ctrl+I again to jump to the next occurrence of the search string    &lt;br /&gt;&amp;#160;&amp;#160; 4. (advanced tip) Press Ctrl+Shift+I to search backwards    &lt;br /&gt;&amp;#160;&amp;#160; 5. To stop searching, press ESC&lt;/p&gt;  &lt;p&gt;You’ll note that it is case-sensitive, unfortunately. I’ll have to look for a way to change that..&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;And, my total favorite is..&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Customize how search results are displayed&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This is one of the most irritating things ever about Visual Studio. The Find Results window is almost always filled with only the paths of the found files, instead of the line details. I always have to scroll to the right to see the details. Here is the direct link to the article, bypassing the roundup.&lt;/p&gt;  &lt;p&gt;&lt;a title="http://blogs.msdn.com/saraford/archive/2008/11/24/did-you-know-you-can-customize-how-search-results-are-displayed-in-the-find-results-window-363.aspx" href="http://blogs.msdn.com/saraford/archive/2008/11/24/did-you-know-you-can-customize-how-search-results-are-displayed-in-the-find-results-window-363.aspx"&gt;http://blogs.msdn.com/saraford/archive/2008/11/24/did-you-know-you-can-customize-how-search-results-are-displayed-in-the-find-results-window-363.aspx&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17855063-6424754533289098285?l=elegantdevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elegantdevelopment.blogspot.com/feeds/6424754533289098285/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=17855063&amp;postID=6424754533289098285' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/6424754533289098285'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/6424754533289098285'/><link rel='alternate' type='text/html' href='http://elegantdevelopment.blogspot.com/2009/09/excellent-visual-studio-tips-roundup-by.html' title='Excellent Visual Studio tips roundup by Sara Ford'/><author><name>Wasatch Wizard</name><uri>http://www.blogger.com/profile/07858015938543437007</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00828643655769295472'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17855063.post-4523674407276598818</id><published>2009-09-18T12:37:00.001-07:00</published><updated>2009-09-18T14:22:14.872-07:00</updated><title type='text'>Visual Studio 2008 Macro Fun</title><content type='html'>&lt;p&gt;Here are a few macros that I use, that I thought might be of use to others. They should be fairly easy to set up in your environment. I’m always excited to hear about new macros and plugins and other time-saving functionality for Visual Studio, so if you have any – please let me know!!&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Misc Built-in Macros&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Here are some basic macros that came with Visual Studio 2008 (and VS 2005) that are very useful and easily map to your favorite keyboard shortcut(s).&lt;/p&gt;  &lt;pre&gt;Macros.Samples.Accessibility.&lt;strong&gt;IncreaseTextEditorFontSize&lt;/strong&gt;&lt;br /&gt;Macros.Samples.Accessibility.&lt;strong&gt;DecreaseTextEditorFontSize&lt;/strong&gt; &lt;br /&gt;Macros.Samples.Accessibility.&lt;strong&gt;UpdateTextEditorFontSizeToMatchDisplayProperties&lt;/strong&gt; &lt;br /&gt;Macros.Samples.Utilities.&lt;strong&gt;TurnOnLineNumbers&lt;/strong&gt; &lt;br /&gt;Macros.Samples.Utilities.&lt;strong&gt;TurnOffLineNumbers&lt;/strong&gt; &lt;br /&gt;Macros.Samples.VSEditor.&lt;strong&gt;BeginningOfFunction&lt;/strong&gt; &lt;br /&gt;Macros.Samples.VSEditor.&lt;strong&gt;LineEmUp&lt;/strong&gt; (Good for aligning variable assignments) &lt;br /&gt;Macros.Samples.DevStudio6Editor.&lt;strong&gt;AutoCompleteFromFile&lt;/strong&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;b&gt;Format Source Code&lt;/b&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;I map F2 to the standard Edit.FormatDocument command and Ctrl+F2 to the FormatCSharp macro method.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="color: #0000ff"&gt;Public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Sub&lt;/span&gt; FormatCSharp()&lt;br /&gt;&lt;br /&gt;   &lt;span style="color: #0000ff"&gt;Try&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: #008000"&gt;' Remove and sort using statements if PowerCommands is installed.&lt;/span&gt;&lt;br /&gt;      DTE.ExecuteCommand(&amp;quot;&lt;span style="color: #8b0000"&gt;Edit.RemoveAndSort&lt;/span&gt;&amp;quot;)&lt;br /&gt;   &lt;span style="color: #0000ff"&gt;Catch&lt;/span&gt; ex &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; Exception&lt;br /&gt;      &lt;br /&gt;   &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Try&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;   &lt;span style="color: #0000ff"&gt;Try&lt;/span&gt;&lt;br /&gt;      DTE.ExecuteCommand(&amp;quot;&lt;span style="color: #8b0000"&gt;Macros.Samples.VSEditor.FixLineEnds&lt;/span&gt;&amp;quot;)&lt;br /&gt;   &lt;span style="color: #0000ff"&gt;Catch&lt;/span&gt; ex &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; Exception&lt;br /&gt;      &lt;span style="color: #0000ff"&gt;Exit&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Sub&lt;/span&gt;&lt;br /&gt;   &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Try&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;   DTE.ExecuteCommand(&amp;quot;&lt;span style="color: #8b0000"&gt;Edit.FormatDocument&lt;/span&gt;&amp;quot;)&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Sub&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;b&gt;Attach to IIS Worker Processes&lt;/b&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;I map Ctrl+P to this macro, replacing the default Print Current Document shortcut.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="color: #0000ff"&gt;Sub&lt;/span&gt; MacroAttachToAllWebProcesses() &lt;br /&gt;   &lt;span style="color: #0000ff"&gt;Try&lt;/span&gt; &lt;br /&gt;      &lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; dbg2 &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; EnvDTE80.Debugger2 = DTE.Debugger &lt;br /&gt;      &lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; trans &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; EnvDTE80.Transport = dbg2.Transports.Item(&amp;quot;&lt;span style="color: #8b0000"&gt;Default&lt;/span&gt;&amp;quot;) &lt;br /&gt;      &lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; dbgeng(3) &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; EnvDTE80.Engine &lt;br /&gt;&lt;br /&gt;      dbgeng(0) = trans.Engines.Item(&amp;quot;&lt;span style="color: #8b0000"&gt;T-SQL&lt;/span&gt;&amp;quot;) &lt;br /&gt;      dbgeng(1) = trans.Engines.Item(&amp;quot;&lt;span style="color: #8b0000"&gt;T-SQL&lt;/span&gt;&amp;quot;) &lt;br /&gt;      dbgeng(2) = trans.Engines.Item(&amp;quot;&lt;span style="color: #8b0000"&gt;Managed&lt;/span&gt;&amp;quot;) &lt;br /&gt;&lt;br /&gt;      &lt;span style="color: #008000"&gt;' Use . for local machine or type machine name &lt;/span&gt;&lt;br /&gt;      &lt;span style="color: #0000ff"&gt;For&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Each&lt;/span&gt; theProcess &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; EnvDTE80.Process2 &lt;span style="color: #0000ff"&gt;In&lt;/span&gt; dbg2.GetProcesses(trans, &amp;quot;&lt;span style="color: #8b0000"&gt;.&lt;/span&gt;&amp;quot;) &lt;br /&gt;         &lt;span style="color: #0000ff"&gt;If&lt;/span&gt; theProcess.Name.Contains(&amp;quot;&lt;span style="color: #8b0000"&gt;aspnet_wp.exe&lt;/span&gt;&amp;quot;) &lt;span style="color: #0000ff"&gt;Or&lt;/span&gt; theProcess.Name.Contains(&amp;quot;&lt;span style="color: #8b0000"&gt;w3wp.exe&lt;/span&gt;&amp;quot;) &lt;span style="color: #0000ff"&gt;Then&lt;/span&gt; &lt;br /&gt;            theProcess.Attach2(dbgeng) &lt;br /&gt;         &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;If&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: #0000ff"&gt;Next&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;   &lt;span style="color: #0000ff"&gt;Catch&lt;/span&gt; ex &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; System.Exception &lt;br /&gt;      MsgBox(ex.Message) &lt;br /&gt;   &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Try&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Sub&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;b&gt;Solution Events&lt;/b&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="color: #008000"&gt;' Automatically close all documents when the solution is closed.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;Private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Sub&lt;/span&gt; SolutionEvents_BeforeClosing() &lt;span style="color: #0000ff"&gt;Handles&lt;/span&gt; SolutionEvents.BeforeClosing&lt;br /&gt;   DTE.ExecuteCommand(&amp;quot;&lt;span style="color: #8b0000"&gt;Window.CloseAllDocuments&lt;/span&gt;&amp;quot;)&lt;br /&gt;&lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Sub&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;b&gt;Build Events&lt;/b&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="color: #008000"&gt;' A project failed to compile, so cancel remaining and beep&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;Private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Sub&lt;/span&gt; BuildEvents_OnBuildProjConfigDone(&lt;span style="color: #0000ff"&gt;ByVal&lt;/span&gt; Project &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff"&gt;String&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;ByVal&lt;/span&gt; ProjectConfig &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff"&gt;String&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;ByVal&lt;/span&gt; Platform &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff"&gt;String&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;ByVal&lt;/span&gt; SolutionConfig &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff"&gt;String&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;ByVal&lt;/span&gt; Success &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Boolean&lt;/span&gt;) &lt;span style="color: #0000ff"&gt;Handles&lt;/span&gt; BuildEvents.OnBuildProjConfigDone&lt;br /&gt;   &lt;span style="color: #0000ff"&gt;If&lt;/span&gt; Success = &lt;span style="color: #0000ff"&gt;False&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Then&lt;/span&gt;&lt;br /&gt;      DTE.ExecuteCommand(&amp;quot;&lt;span style="color: #8b0000"&gt;Build.Cancel&lt;/span&gt;&amp;quot;)&lt;br /&gt;      &lt;span style="color: #008000"&gt;' System.Windows.Forms.MessageBox.Show(&amp;quot;Build failed!&amp;quot;)&lt;/span&gt;&lt;br /&gt;      Beep()&lt;br /&gt;      Threading.Thread.Sleep(500)&lt;br /&gt;      Beep()&lt;br /&gt;      Threading.Thread.Sleep(500)&lt;br /&gt;      Beep()&lt;br /&gt;      Threading.Thread.Sleep(500)&lt;br /&gt;      Beep()&lt;br /&gt;   &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;If&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Sub&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;' The build finished successfully&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;Private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Sub&lt;/span&gt; BuildEvents_OnBuildDone(&lt;span style="color: #0000ff"&gt;ByVal&lt;/span&gt; Scope &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; EnvDTE.vsBuildScope, &lt;span style="color: #0000ff"&gt;ByVal&lt;/span&gt; Action &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; EnvDTE.vsBuildAction) &lt;span style="color: #0000ff"&gt;Handles&lt;/span&gt; BuildEvents.OnBuildDone&lt;br /&gt;   &lt;span style="color: #0000ff"&gt;If&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;Not&lt;/span&gt; failed) &lt;span style="color: #0000ff"&gt;Then&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: #008000"&gt;' System.Windows.Forms.MessageBox.Show(&amp;quot;Build is complete!&amp;quot;)&lt;/span&gt;&lt;br /&gt;      Beep()&lt;br /&gt;      Threading.Thread.Sleep(250)&lt;br /&gt;      Beep()&lt;br /&gt;   &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;If&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Sub&lt;/span&gt;&lt;/pre&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17855063-4523674407276598818?l=elegantdevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elegantdevelopment.blogspot.com/feeds/4523674407276598818/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=17855063&amp;postID=4523674407276598818' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/4523674407276598818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/4523674407276598818'/><link rel='alternate' type='text/html' href='http://elegantdevelopment.blogspot.com/2009/09/visual-studio-2008-macro-fun.html' title='Visual Studio 2008 Macro Fun'/><author><name>Wasatch Wizard</name><uri>http://www.blogger.com/profile/07858015938543437007</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00828643655769295472'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17855063.post-4211038107678591060</id><published>2009-09-18T13:58:00.001-07:00</published><updated>2009-09-18T13:58:25.066-07:00</updated><title type='text'>Build macro for web projects</title><content type='html'>&lt;p&gt;Using this macro and batch file you can map a keyboard shortcut and/or a toolbar button in Visual Studio to restart IIS and build the selected project asynchronously.&lt;/p&gt;  &lt;p&gt;1. Create a batch file that includes the following:&lt;/p&gt;  &lt;pre&gt;@echo off &lt;br /&gt;net stop w3svc &lt;br /&gt;net start w3svc&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;For projects that tend to get hung up more frequently in IIS, you can replace the 'net stop' line above with net 'stop &lt;strong&gt;iisadmin&lt;/strong&gt;' instead. (Don’t change the ‘net start’ line.)&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;2. Create a new macro project that includes events (or add a new module in existing macro project).&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;3. Paste the following code into the module, inserting the path to the new batch file:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="color: #0000ff"&gt;Sub&lt;/span&gt; BuildSelectedWebProject() &lt;br /&gt;   &lt;span style="color: #008000"&gt;' restart iis &lt;/span&gt;&lt;br /&gt;   Shell(&amp;quot;&lt;span style="color: #8b0000"&gt;&amp;lt;your batch file path&amp;gt;&lt;/span&gt;&amp;quot;, AppWinStyle.MinimizedNoFocus, &lt;span style="color: #0000ff"&gt;False&lt;/span&gt;) &lt;br /&gt;   &lt;span style="color: #008000"&gt;' start the build &lt;/span&gt;&lt;br /&gt;   DTE.ExecuteCommand(&amp;quot;&lt;span style="color: #8b0000"&gt;Build.BuildSelection&lt;/span&gt;&amp;quot;) &lt;br /&gt;&lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Sub&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;4. Map a keyboard shortcut or toolbar button to the new macro: Macros.&amp;lt;Macro Project Name&amp;gt;.BuildSelectedWebProject&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Build Solution&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Optionally, you can also re-map Ctrl+Shift+B (Build Solution) to the following if desired:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="color: #0000ff"&gt;Sub&lt;/span&gt; BuildSolution() &lt;br /&gt;   &lt;span style="color: #008000"&gt;' restart iis &lt;/span&gt;&lt;br /&gt;   Shell(&amp;quot;&lt;span style="color: #8b0000"&gt;&amp;lt;your batch file path&amp;gt;\iisrestart.bat&lt;/span&gt;&amp;quot;, AppWinStyle.MinimizedNoFocus, &lt;span style="color: #0000ff"&gt;False&lt;/span&gt;) &lt;br /&gt;   &lt;span style="color: #008000"&gt;' start the build &lt;/span&gt;&lt;br /&gt;   DTE.ExecuteCommand(&amp;quot;&lt;span style="color: #8b0000"&gt;Build.&lt;strong&gt;BuildSolution&lt;/strong&gt;&lt;/span&gt;&amp;quot;) &lt;br /&gt;&lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Sub&lt;/span&gt;&lt;/pre&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17855063-4211038107678591060?l=elegantdevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elegantdevelopment.blogspot.com/feeds/4211038107678591060/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=17855063&amp;postID=4211038107678591060' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/4211038107678591060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/4211038107678591060'/><link rel='alternate' type='text/html' href='http://elegantdevelopment.blogspot.com/2009/09/build-macro-for-web-projects.html' title='Build macro for web projects'/><author><name>Wasatch Wizard</name><uri>http://www.blogger.com/profile/07858015938543437007</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00828643655769295472'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17855063.post-2308350240700206610</id><published>2009-07-21T22:02:00.000-07:00</published><updated>2009-07-21T22:02:00.466-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Regular Expressions'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><title type='text'>Simple Visual Studio 2005 regular expression to swap variable assignments</title><content type='html'>&lt;style&gt;&lt;br /&gt;&lt;br /&gt;table.findreplace { border-right: #ccc 1px solid; border-bottom: #ccc 1px solid; margin:10px; }&lt;br /&gt;table.findreplace td { border-left: #ccc 1px solid; border-top: #ccc 1px solid; font-family: consolas,courier new; padding: 3px 12px 3px 6px; }&lt;br /&gt;table.findreplace td.label { background-color: #eee; }&lt;/style&gt;Here is a simple regular expression to use in Visual Studio 2005 to swap the variable/object and assignment.   &lt;table class="findreplace" border="0" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td class="label"&gt;Find What:&lt;/td&gt;        &lt;td&gt;mySettings.{.+} = {.+};&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td class="label"&gt;Replace With:&lt;/td&gt;        &lt;td&gt;\2 = mySettings.\1;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17855063-2308350240700206610?l=elegantdevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elegantdevelopment.blogspot.com/feeds/2308350240700206610/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=17855063&amp;postID=2308350240700206610' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/2308350240700206610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/2308350240700206610'/><link rel='alternate' type='text/html' href='http://elegantdevelopment.blogspot.com/2009/07/simple-visual-studio-2005-regular.html' title='Simple Visual Studio 2005 regular expression to swap variable assignments'/><author><name>Wasatch Wizard</name><uri>http://www.blogger.com/profile/07858015938543437007</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00828643655769295472'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17855063.post-1530961070604295072</id><published>2009-07-16T10:57:00.001-07:00</published><updated>2009-07-16T10:57:13.111-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><title type='text'>Collapse folders and projects in Visual Studio</title><content type='html'>&lt;p&gt;I consider the &lt;a href="http://code.msdn.microsoft.com/PowerCommands"&gt;PowerCommands for Visual Studio 2008&lt;/a&gt; invaluable. And, the collapse all feature is certainly one of my most used features. However, if a solution folder is already collapsed, the projects underneath are skipped. &lt;/p&gt;  &lt;p&gt;So, I found a great macro for collapsing all solution folders and their projects, regardless of whether or not the parent solution folder(s) are open or closed. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://geekswithblogs.net/scottkuhl/archive/2007/04/09/111195.aspx"&gt;Visual Studio 2005 Collapse All Macro&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;em&gt;(yes, it works for Visual Studio 2008, what I primarily use)&lt;/em&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;For convenience, here is the macro source code:&lt;/p&gt;  &lt;pre&gt;    &lt;span style="color: #0000ff"&gt;Sub&lt;/span&gt; CollapseAll()&lt;br /&gt;&lt;br /&gt;        ' &lt;span style="color: #0000ff"&gt;Get&lt;/span&gt; the the Solution Explorer tree&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; solutionExplorer As UIHierarchy&lt;br /&gt;        solutionExplorer = DTE.Windows.Item(Constants.vsext_wk_SProjectWindow).Object()&lt;br /&gt;&lt;br /&gt;        ' Check &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; there &lt;span style="color: #0000ff"&gt;is&lt;/span&gt; any open solution&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;If&lt;/span&gt; (solutionExplorer.UIHierarchyItems.Count = 0) &lt;span style="color: #0000ff"&gt;Then&lt;/span&gt;&lt;br /&gt;            Return&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;If&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        ' &lt;span style="color: #0000ff"&gt;Get&lt;/span&gt; the top node (the name of the solution)&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; rootNode As UIHierarchyItem = solutionExplorer.UIHierarchyItems.Item(1)&lt;br /&gt;        rootNode.DTE.SuppressUI = True&lt;br /&gt;&lt;br /&gt;        ' Collapse &lt;span style="color: #0000ff"&gt;each&lt;/span&gt; project node&lt;br /&gt;        Collapse(rootNode, solutionExplorer)&lt;br /&gt;&lt;br /&gt;        ' &lt;span style="color: #0000ff"&gt;Select&lt;/span&gt; the solution node, &lt;span style="color: #0000ff"&gt;or&lt;/span&gt; &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; when you click &lt;br /&gt;        ' &lt;span style="color: #0000ff"&gt;on&lt;/span&gt; the solution window&lt;br /&gt;        ' scrollbar, it will synchronize the open document &lt;br /&gt;        ' &lt;span style="color: #0000ff"&gt;with&lt;/span&gt; the tree &lt;span style="color: #0000ff"&gt;and&lt;/span&gt; pop&lt;br /&gt;        ' out the corresponding node which &lt;span style="color: #0000ff"&gt;is&lt;/span&gt; probably &lt;span style="color: #0000ff"&gt;not&lt;/span&gt; what you want.&lt;br /&gt;&lt;br /&gt;        rootNode.&lt;span style="color: #0000ff"&gt;Select&lt;/span&gt;(vsUISelectionType.vsUISelectionTypeSelect)&lt;br /&gt;        rootNode.DTE.SuppressUI = False&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Sub&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;Private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Sub&lt;/span&gt; Collapse(ByVal item As UIHierarchyItem, ByRef solutionExplorer As UIHierarchy)&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;For&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Each&lt;/span&gt; innerItem As UIHierarchyItem &lt;span style="color: #0000ff"&gt;In&lt;/span&gt; item.UIHierarchyItems&lt;br /&gt;            &lt;span style="color: #0000ff"&gt;If&lt;/span&gt; innerItem.UIHierarchyItems.Count &amp;gt; 0 &lt;span style="color: #0000ff"&gt;Then&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;                ' Re-cursive &lt;span style="color: #0000ff"&gt;call&lt;/span&gt;&lt;br /&gt;                Collapse(innerItem, solutionExplorer)&lt;br /&gt;&lt;br /&gt;                ' Collapse&lt;br /&gt;                &lt;span style="color: #0000ff"&gt;If&lt;/span&gt; innerItem.UIHierarchyItems.Expanded &lt;span style="color: #0000ff"&gt;Then&lt;/span&gt;&lt;br /&gt;                    innerItem.UIHierarchyItems.Expanded = False&lt;br /&gt;                    &lt;span style="color: #0000ff"&gt;If&lt;/span&gt; innerItem.UIHierarchyItems.Expanded = True &lt;span style="color: #0000ff"&gt;Then&lt;/span&gt;&lt;br /&gt;                        ' Bug &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; VS 2005&lt;br /&gt;                        innerItem.&lt;span style="color: #0000ff"&gt;Select&lt;/span&gt;(vsUISelectionType.vsUISelectionTypeSelect)&lt;br /&gt;                        solutionExplorer.DoDefaultAction()&lt;br /&gt;                    &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;If&lt;/span&gt;&lt;br /&gt;                &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;If&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;If&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;Next&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Sub&lt;/span&gt;&lt;/pre&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17855063-1530961070604295072?l=elegantdevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elegantdevelopment.blogspot.com/feeds/1530961070604295072/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=17855063&amp;postID=1530961070604295072' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/1530961070604295072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/1530961070604295072'/><link rel='alternate' type='text/html' href='http://elegantdevelopment.blogspot.com/2009/07/collapse-folders-and-projects-in-visual.html' title='Collapse folders and projects in Visual Studio'/><author><name>Wasatch Wizard</name><uri>http://www.blogger.com/profile/07858015938543437007</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00828643655769295472'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17855063.post-101551136341028857</id><published>2009-01-13T07:46:00.000-07:00</published><updated>2009-01-13T10:53:35.377-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SCRUM'/><title type='text'>SCRUM vs. Waterfall</title><content type='html'>&lt;p&gt;I didn’t realize how frustrating it would be to take a new job that doesn’t do SCRUM. I was told it was an iterative development process. But, honestly, it’s more like old-fashioned waterfall than anything else.&lt;/p&gt;  &lt;p&gt;I’ve had a few discussions revolving around development methodologies but there is nothing except anti-sentiment and near resentment for even bringing up any way to do things better! What’s the deal?&lt;/p&gt;  &lt;p&gt;Why is it so hard for people to even consider trying it or even spending a couple lunches doing some practice exercises?&lt;/p&gt;  &lt;p&gt;I guarantee it’s &lt;em&gt;what they want&lt;/em&gt;. They just don’t know it.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17855063-101551136341028857?l=elegantdevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elegantdevelopment.blogspot.com/feeds/101551136341028857/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=17855063&amp;postID=101551136341028857' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/101551136341028857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/101551136341028857'/><link rel='alternate' type='text/html' href='http://elegantdevelopment.blogspot.com/2009/01/scrum-vs-waterfall.html' title='SCRUM vs. Waterfall'/><author><name>Wasatch Wizard</name><uri>http://www.blogger.com/profile/07858015938543437007</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00828643655769295472'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17855063.post-5007103512395655506</id><published>2008-10-30T14:24:00.002-07:00</published><updated>2008-10-30T14:26:22.890-07:00</updated><title type='text'>Obama vs. Christians</title><content type='html'>1.&amp;nbsp; Obama is undecided on whether life begins at conception - Saddleback Church Forum Aug 16th, 2008. Obama voted against born alive protections for abortion survivors four times, and voted against a ban on partial-birth abortion in the Illinois state senate&lt;br /&gt;&lt;br /&gt;SOURCES: &lt;a href="http://www.bornalivetruth.org/"&gt;http://www.bornalivetruth.org&lt;/a&gt;&lt;br /&gt;Audacity of Hope written by Barack Obama &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2.&amp;nbsp; Obama has pledged to Planned Parenthood to sign The Freedom of Choice Act, a law which would cancel every state, federal, and local regulation of abortion, no matter how modest or reasonable.&amp;nbsp; It would even abolish all state restrictions on government funding for abortions.&amp;nbsp; Catholics that pay income tax will be paying an abortionist to perform an abortion. It would also abolish state laws that protect Catholic doctors and nurses from losing their jobs if they refuse to participate in abortions.&amp;nbsp; It would abolish requirements for parental notification and informed consent for mothers who consider the procedure. – Obama speech to Planned Parenthood, July 17, 2007&lt;br /&gt;He is endorsed by pro-Abortion industry leader Planned Parenthood and has a 100% NARAL voting record. - &lt;br /&gt;&lt;br /&gt;SOURCES: &lt;a href="http://www.plannedparenthoodaction.org/campaigns/barack-obama-endorsement-111.htm"&gt;http://www.plannedparenthoodaction.org/campaigns/barack-obama-endorsement-111.htm&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.naral.org/elections/statements/obama.html"&gt;http://www.naral.org/elections/statements/obama.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3.&amp;nbsp; Obama would repeal the Mexico City policy, which bars federal funding for international nongovernmental organizations involved in abortion-related services and would pit the US against the [Christians everywhere] on the international fight against abortion.&lt;br /&gt;&lt;br /&gt;SOURCE: &lt;a href="http://www.nationaljournal.com/njmagazine/nj_20080719_6257.php"&gt;http://www.nationaljournal.com/njmagazine/nj_20080719_6257.php&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4.&amp;nbsp; He strongly supports the 1973 Supreme Court decision on abortion rights and says he will oppose any constitutional measure to overturn it. - &lt;br /&gt;&lt;br /&gt;SOURCE: &lt;a href="http://www.nationaljournal.com/njmagazine/nj_20080719_6257.php"&gt;http://www.nationaljournal.com/njmagazine/nj_20080719_6257.php&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;5.&amp;nbsp; Obama has pledged to choose Justices with a Pro Abortion agenda and he voted against Roberts and Alito.&lt;br /&gt;&lt;br /&gt;SOURCE: &lt;a href="http://www.nationaljournal.com/njmagazine/nj_20080719_6257.php"&gt;http://www.nationaljournal.com/njmagazine/nj_20080719_6257.php&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;6.&amp;nbsp; Obama voted no on notifying parents of minors who get out-of-state abortions and prohibiting minors crossing state lines for abortion. &lt;br /&gt;&lt;br /&gt;SOURCE: &lt;a href="http://www.nationaljournal.com/njmagazine/nj_20080719_6257.php%20"&gt;http://www.nationaljournal.com/njmagazine/nj_20080719_6257.php &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;7.&amp;nbsp; Obama supports the destruction of embryos for experimentation and voted to expand research to more embryonic stem cell lines.&lt;br /&gt;&lt;br /&gt;SOURCE: &lt;a href="http://obama.senate.gov/press/070411-obama_renews_su/"&gt;http://obama.senate.gov/press/070411-obama_renews_su/&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;8.&amp;nbsp; He voted yes on $100M to fund contraceptives for teens and sponsored bill providing contraceptives for low-income women.&lt;br /&gt;&lt;br /&gt;SOURCE: &lt;a href="http://www.nationaljournal.com/njmagazine/nj_20080719_6257.php"&gt;http://www.nationaljournal.com/njmagazine/nj_20080719_6257.php&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;9.&amp;nbsp; Voted no on defining unborn child as eligible for SCHIP a program that gives funds to states in order to provide health insurance to families with children.&lt;br /&gt;&lt;br /&gt;SOURCE: &lt;a href="http://www.ncregister.com/site/article/15942"&gt;http://www.ncregister.com/site/article/15942&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;10.&amp;nbsp; He opposed the federal marriage amendment in 2006 and also favors repealing the 1996 Defense of Marriage Act, which gives a state the right not to recognize same-sex marriages performed in another state.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;SOURCE: &lt;a href="http://www.nationaljournal.com/njmagazine/nj_20080719_6257.php"&gt;http://www.nationaljournal.com/njmagazine/nj_20080719_6257.php&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;from: &lt;a href="http://catholicvote.com/"&gt;http://catholicvote.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17855063-5007103512395655506?l=elegantdevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elegantdevelopment.blogspot.com/feeds/5007103512395655506/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=17855063&amp;postID=5007103512395655506' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/5007103512395655506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/5007103512395655506'/><link rel='alternate' type='text/html' href='http://elegantdevelopment.blogspot.com/2008/10/obama-vs-christians.html' title='Obama vs. Christians'/><author><name>Wasatch Wizard</name><uri>http://www.blogger.com/profile/07858015938543437007</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00828643655769295472'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17855063.post-2905112575576240306</id><published>2008-10-03T10:21:00.000-07:00</published><updated>2008-10-03T10:23:39.452-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hack'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><title type='text'>PowerCommands for Visual Studio 2008</title><content type='html'>&lt;div style="font-family: inherit;"&gt;PowerCommands for Visual Studio 2008 is definitely one of the best plug-ins available for Visual Studio..&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;a href="http://draft.blogger.com/goog_1223054466359"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;a href="http://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=PowerCommands&amp;amp;ReleaseId=559"&gt;http://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=PowerCommands&amp;amp;ReleaseId=559&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;Includes things like: &lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;/div&gt;&lt;li style="font-family: inherit;"&gt;Undo closed window&lt;/li&gt;&lt;br /&gt;&lt;div style="font-family: inherit;"&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;/div&gt;&lt;li style="font-family: inherit;"&gt;Collapse all projects &lt;/li&gt;&lt;br /&gt;&lt;div style="font-family: inherit;"&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;/div&gt;&lt;li style="font-family: inherit;"&gt;Copy path&lt;/li&gt;&lt;br /&gt;&lt;div style="font-family: inherit;"&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;/div&gt;&lt;li style="font-family: inherit;"&gt;Email CodeSnippet&lt;/li&gt;&lt;br /&gt;&lt;div style="font-family: inherit;"&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;/div&gt;&lt;li style="font-family: inherit;"&gt;Insert GUID from right-click menu&lt;/li&gt;&lt;br /&gt;&lt;div style="font-family: inherit;"&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;/div&gt;&lt;li style="font-family: inherit;"&gt;Copy and paste project references!&lt;/li&gt;&lt;br /&gt;&lt;div style="font-family: inherit;"&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;/div&gt;&lt;li style="font-family: inherit;"&gt;Open containing folder&lt;/li&gt;&lt;br /&gt;&lt;div style="font-family: inherit;"&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;/div&gt;&lt;li style="font-family: inherit;"&gt;Open command prompt&lt;/li&gt;&lt;br /&gt;&lt;div style="font-family: inherit;"&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;/div&gt;&lt;li style="font-family: inherit;"&gt;Unload project&lt;/li&gt;&lt;br /&gt;&lt;div style="font-family: inherit;"&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;/div&gt;&lt;li style="font-family: inherit;"&gt;Sort using statements / also removes un-used ones&lt;/li&gt;&lt;br /&gt;&lt;div style="font-family: inherit;"&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;/div&gt;&lt;li style="font-family: inherit;"&gt;And more..&lt;/li&gt;&lt;br /&gt;&lt;div style="font-family: inherit;"&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17855063-2905112575576240306?l=elegantdevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elegantdevelopment.blogspot.com/feeds/2905112575576240306/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=17855063&amp;postID=2905112575576240306' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/2905112575576240306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/2905112575576240306'/><link rel='alternate' type='text/html' href='http://elegantdevelopment.blogspot.com/2008/10/powercommands-for-visual-studio-2008.html' title='PowerCommands for Visual Studio 2008'/><author><name>Wasatch Wizard</name><uri>http://www.blogger.com/profile/07858015938543437007</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00828643655769295472'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17855063.post-2762620762072319168</id><published>2008-09-11T07:20:00.000-07:00</published><updated>2008-09-11T10:29:16.557-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hack'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><title type='text'>Integrating TortoiseSVN with Visual Studio</title><content type='html'>Going back to using a file explorer separately for managing RCS, after using TFS built into Visual Studio has been a little irritating. That's not because I prefer TFS, because I don't. In fact, I hope I never have to go back to TFS again - at least until it doesn't crash continually and take minutes to perform actions that should take only seconds. And, of course TFS would have to actually perform the actions I request of it too. (But that's another post.)&lt;br /&gt;&lt;br /&gt;Nonetheless I've quickly become tired of switching between &lt;a href="http://www.ghisler.com/" title="My preference for a Windows file explorer"&gt;Total Commander&lt;/a&gt; and Visual Studio just to do updates and commits. I was about to resurrect my old CVS batch files again when I found an excellent set of scripts to enable TortoiseSVN from within Visual Studio.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://garrys-brain.blogspot.com/2007/07/tortoisesvn-and-visual-studio.html"&gt;http://garrys-brain.blogspot.com/2007/07/tortoisesvn-and-visual-studio.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I have not tried all of the features yet, only the basics. But those have worked without any problems at all.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17855063-2762620762072319168?l=elegantdevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elegantdevelopment.blogspot.com/feeds/2762620762072319168/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=17855063&amp;postID=2762620762072319168' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/2762620762072319168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/2762620762072319168'/><link rel='alternate' type='text/html' href='http://elegantdevelopment.blogspot.com/2008/09/integrating-tortoisesvn-with-visual.html' title='Integrating TortoiseSVN with Visual Studio'/><author><name>Wasatch Wizard</name><uri>http://www.blogger.com/profile/07858015938543437007</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00828643655769295472'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17855063.post-8888307879714833374</id><published>2007-09-12T22:15:00.001-07:00</published><updated>2008-07-01T02:32:07.350-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GMail'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><title type='text'>Letter to Google</title><content type='html'>First off, let me just say how fantastic the GMail web interface is. For my style and usage patterns, it can't be beat. I have used a two folder system in Outlook for four to five years now, since I gave up on trying to keep things organized into folders (and Google Desktop provided a search mechanism that worked for my emails). And, the conversation view is wonderful! I also think the Google Apps for Domains suite of functionality and tools is superb.&lt;br /&gt;&lt;br /&gt;So, naturally, I have all of my domains running on Google Apps for Domains and all email pointed to my one standard GMail account.&lt;br /&gt;&lt;br /&gt;But, there's a problem. I have missed several important emails during the last month, two of which has caused some missed deadlines with my own MicroISV. Not good.&lt;br /&gt;&lt;br /&gt;To be honest, I didn't think much about it until tonight when on the phone, my partner and I, were discussing some tasks that had to be done this morning and tonight, when I hadn't received either sets of emails. Very not good.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So, I logged in to the Apps account directly and found that the only emails stopped in the SPAM filter are 12 emails from my business partner spanning the last 30 days.. (Out of all emails I receive from him, the twelve trapped in the last month were probably the most important ones he sent, but that's a different story.) That also explained several disconnects we've had. &lt;br /&gt;&lt;br /&gt;What is also really strange about this, is that I've gotten emails from the Apps account, forwarded to my standard account, then trapped as SPAM (rightfully so) in my standard account. So, what gives.. Gmail is forwarding SPAM, but trapping  &lt;br /&gt;&lt;br /&gt;Anyway, I'm hoping to find a way to completely turn off SPAM filtering on my forwarded Gmail account so I won't have this problem again. Is that possible? Or at least a whitelist protection?&lt;br /&gt;&lt;br /&gt;My business partner is ready to go back to hosting our own email server again, including purchasing Exchange 2007. I'm hoping to stay with the great Gmail web interface, but... only if I can ensure this type of thing won't happen again.&lt;br /&gt;&lt;br /&gt;Please help?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17855063-8888307879714833374?l=elegantdevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elegantdevelopment.blogspot.com/feeds/8888307879714833374/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=17855063&amp;postID=8888307879714833374' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/8888307879714833374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/8888307879714833374'/><link rel='alternate' type='text/html' href='http://elegantdevelopment.blogspot.com/2007/09/letter-to-google.html' title='Letter to Google'/><author><name>Wasatch Wizard</name><uri>http://www.blogger.com/profile/07858015938543437007</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00828643655769295472'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17855063.post-3603366983260406491</id><published>2008-02-07T08:15:00.000-07:00</published><updated>2008-04-22T20:18:39.870-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hardware'/><title type='text'>My IRAM drive finally running!</title><content type='html'>&lt;p&gt;I finally got my IRAM drive running on my new work machine. I use it exclusively for my TFS local folders in Visual Studio 2005 and 2008 Team Editions. It literally cut my compile time in half. From about 3 minutes 10 seconds to 1 minute 30 seconds. Wow is all I can think to say. Oh, except it's about time. I've only had four IRAM drives for about 5-6 months now and no machine to use them on.&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:18483055-3a2a-490f-b54d-083d54a0e159" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Hardware" rel="tag"&gt;Hardware&lt;/a&gt;,&lt;a href="http://technorati.com/tags/IRAM" rel="tag"&gt;IRAM&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17855063-3603366983260406491?l=elegantdevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elegantdevelopment.blogspot.com/feeds/3603366983260406491/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=17855063&amp;postID=3603366983260406491' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/3603366983260406491'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/3603366983260406491'/><link rel='alternate' type='text/html' href='http://elegantdevelopment.blogspot.com/2008/02/my-iram-drive-finally-running.html' title='My IRAM drive finally running!'/><author><name>Wasatch Wizard</name><uri>http://www.blogger.com/profile/07858015938543437007</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00828643655769295472'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17855063.post-6851687621442456621</id><published>2007-08-17T21:43:00.000-07:00</published><updated>2007-08-17T20:33:06.007-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><title type='text'>Just had a funny thought...</title><content type='html'>I was just thinking how much I love JavaScript and how it has been my favorite language/platform for years. People who consider themselves 'real' developers have always given me a hard time because of it. That and "you can use it just like an OOP language, but it's not &lt;span style="font-style:italic;"&gt;really&lt;/span&gt; one"! Haha! Who cares if it only &lt;span style="font-style:italic;"&gt;acts&lt;/span&gt; like it!?&lt;br /&gt;&lt;br /&gt;How could you not love it? It's so dynamic - you can do anything you want with it!&lt;br /&gt;&lt;br /&gt;It's funny that everyone is getting excited about the DLR in upcoming .Net releases. And, "it's so cool, because it supports dynamic language extensions to C#." Hehehe.. Well, at least the rest of the world is finally starting to catch up to me.. 8^)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17855063-6851687621442456621?l=elegantdevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elegantdevelopment.blogspot.com/feeds/6851687621442456621/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=17855063&amp;postID=6851687621442456621' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/6851687621442456621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/6851687621442456621'/><link rel='alternate' type='text/html' href='http://elegantdevelopment.blogspot.com/2007/08/just-had-funny-thought.html' title='Just had a funny thought...'/><author><name>Wasatch Wizard</name><uri>http://www.blogger.com/profile/07858015938543437007</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00828643655769295472'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17855063.post-2676852773623078584</id><published>2007-08-17T21:27:00.000-07:00</published><updated>2007-08-17T20:27:44.167-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><title type='text'>Important differences between the JavaScript null and undefined</title><content type='html'>I'm cleaning up some old code today primarily consisting of JavaScript and a bit of C# (ASP.net). I'm &lt;span style="font-style:italic;"&gt;trying&lt;/span&gt; to make the code faster and more easily understood. &lt;br /&gt;&lt;br /&gt;I thought I'd clean up the code used when working with elements on the page. Generally, this consists of an assignment from the DOM to a local JS variable and then an if statement to verify the object was found.&lt;br /&gt;&lt;br /&gt;Now, some people will claim that it isn't necessary to perform the check (assuming you are checking during onload or after) because it is highly unlikely that only part of the web page will be downloaded. I agree that it is unlikely and quite frankly if only a portion of the page gets downloaded you're going much more important problems to worry about than a few JavaScript error dialogs. But, nevertheless, I still feel it is a good practice to check for null objects.&lt;br /&gt;&lt;br /&gt;I have always done a simple check as follows:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;var obj = document.getElementById("myobject");&lt;br /&gt;if (obj)&lt;br /&gt;&amp;nbsp;&amp;nbsp; obj.style.display = "block";&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;However, I know many web developers who go a little further:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;var obj = document.getElementById("myobject");&lt;br /&gt;if (null != obj &amp;&amp; "undefined" != typeof(obj))&lt;br /&gt;&amp;nbsp;&amp;nbsp; obj.style.display = "block";&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;I generally only check for &lt;cod&gt;undefined&lt;/code&gt; when checking if a method parameter exists or not.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;function myFunc(id, e)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;var obj = document.getElementById(id);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (obj)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ("undefined" != e &amp;&amp; null != e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.innerHTML = "An error occurred: " + e;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Does it matter? What do you do? What's the difference between null and undefined?&lt;br /&gt;&lt;br /&gt;Well, so the difference between null and undefined are very simple, yet very important. null is actually an object in JavaScript. undefined is a value for objects that don't exist or variables that have not yet been assigned to.&lt;br /&gt;&lt;br /&gt;Checking for null is simple:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;if (obj) // the object exists&lt;br /&gt;if (null != obj) // the object exists&lt;br /&gt;if (!obj) // the object is null&lt;br /&gt;if (null == obj) // the object is null&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Checking for undefined is just as simple*:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;// test as an object&lt;br /&gt;if (undefined != obj) // the object is defined&lt;br /&gt;if (undefined == obj) // the object is undefined&lt;br /&gt;// test as a string&lt;br /&gt;if ("undefined" != typeof(obj)) // the object is defined&lt;br /&gt;if ("undefined" == typeof(obj)) // the object is undefined&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;*Please note&lt;/span&gt;, however that a lot of people make the simple mistake of testing the wrong thing with regards to undefined. There are two ways to test it, as a string or as an object. Look closely at the two different types of examples above, so you don't accidentally mix them up! (Which I've only done about a bajillion times!)&lt;br /&gt;&lt;br /&gt;And, don't forget that just because an object is &lt;span style="font-style:italic;"&gt;not&lt;/span&gt; undefined, does not mean that it is non-null as well. In other words a null object is still an object therefore it is defined. That make sense?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Well, in my cleaning up I decided to revisit the whole thing and noticed like all maturing web applications there are many variations and uses of these throughout our code. I needed to know for sure, however, what is returned by getElementById (and getElementsByName) when the object or objects are not found. And, also what is the best, cleanest way to test those objects.&lt;br /&gt;&lt;br /&gt;So, I wrote a few tests:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;var obj = document&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.getElementById("this-elem-doesnt-exist");&lt;br /&gt;if (!obj)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert("!obj");&lt;br /&gt;if (obj)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert("obj");&lt;br /&gt;if (null == obj)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert("null == obj");&lt;br /&gt;if (null != obj)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert("null != obj");&lt;br /&gt;if (undefined == obj)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert("undefined == obj");&lt;br /&gt;if (undefined != obj)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert("undefined != obj");&lt;br /&gt;if ("undefined" == typeof(obj))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert("\"undefined\" == typeof(obj)");&lt;br /&gt;if ("undefined" != typeof(obj))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert("\"undefined\" != typeof(obj)");&lt;br /&gt;if (undefined == typeof(obj))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert("undefined == typeof(obj)");&lt;br /&gt;if (undefined != typeof(obj))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert("undefined != typeof(obj)");&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;input type="button" value="click to test" onclick="return test1()"/&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;function test1()&lt;br /&gt;{&lt;br /&gt;var obj = document.getElementById("this-elem-doesnt-exist");&lt;br /&gt;if (!obj)&lt;br /&gt; alert("!obj");&lt;br /&gt;if (obj)&lt;br /&gt; alert("obj");&lt;br /&gt;if (null == obj)&lt;br /&gt; alert("null == obj");&lt;br /&gt;if (null != obj)&lt;br /&gt; alert("null != obj");&lt;br /&gt;if (undefined == obj)&lt;br /&gt; alert("undefined == obj");&lt;br /&gt;if (undefined != obj)&lt;br /&gt; alert("undefined != obj");&lt;br /&gt;if ("undefined" == typeof(obj))&lt;br /&gt; alert("\"undefined\" == typeof(obj)");&lt;br /&gt;if ("undefined" != typeof(obj))&lt;br /&gt; alert("\"undefined\" != typeof(obj)");&lt;br /&gt;if (undefined == typeof(obj))&lt;br /&gt; alert("undefined == typeof(obj)");&lt;br /&gt;if (undefined != typeof(obj))&lt;br /&gt; alert("undefined != typeof(obj)");&lt;br /&gt;}&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Now, let's run the same tests against an object that we know exists:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;var obj = document&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.getElementById("this-elem-exists");&lt;br /&gt;if (!obj)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert("!obj");&lt;br /&gt;if (obj)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert("obj");&lt;br /&gt;if (null == obj)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert("null == obj");&lt;br /&gt;if (null != obj)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert("null != obj");&lt;br /&gt;if (undefined == obj)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert("undefined == obj");&lt;br /&gt;if (undefined != obj)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert("undefined != obj");&lt;br /&gt;if ("undefined" == typeof(obj))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert("\"undefined\" == typeof(obj)");&lt;br /&gt;if ("undefined" != typeof(obj))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert("\"undefined\" != typeof(obj)");&lt;br /&gt;if (undefined == typeof(obj))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert("undefined == typeof(obj)");&lt;br /&gt;if (undefined != typeof(obj))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert("undefined != typeof(obj)");&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;input type="button" value="click to test" onclick="return test2()"/&gt;&lt;br /&gt;&lt;input type="hidden" id="this-elem-exists" value=""/&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;function test2()&lt;br /&gt;{&lt;br /&gt;var obj = document.getElementById("this-elem-exists");&lt;br /&gt;if (!obj)&lt;br /&gt; alert("!obj");&lt;br /&gt;if (obj)&lt;br /&gt; alert("obj");&lt;br /&gt;if (null == obj)&lt;br /&gt; alert("null == obj");&lt;br /&gt;if (null != obj)&lt;br /&gt; alert("null != obj");&lt;br /&gt;if (undefined == obj)&lt;br /&gt; alert("undefined == obj");&lt;br /&gt;if (undefined != obj)&lt;br /&gt; alert("undefined != obj");&lt;br /&gt;if ("undefined" == typeof(obj))&lt;br /&gt; alert("\"undefined\" == typeof(obj)");&lt;br /&gt;if ("undefined" != typeof(obj))&lt;br /&gt; alert("\"undefined\" != typeof(obj)");&lt;br /&gt;if (undefined == typeof(obj))&lt;br /&gt; alert("undefined == typeof(obj)");&lt;br /&gt;if (undefined != typeof(obj))&lt;br /&gt; alert("undefined != typeof(obj)");&lt;br /&gt;}&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Based on the results, I really think that all you should have to do is a simple check as in the first example. So, I'm changing our code to look nice and clean using just a simple if (obj), unless there is a need to check if it's undefined.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17855063-2676852773623078584?l=elegantdevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elegantdevelopment.blogspot.com/feeds/2676852773623078584/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=17855063&amp;postID=2676852773623078584' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/2676852773623078584'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/2676852773623078584'/><link rel='alternate' type='text/html' href='http://elegantdevelopment.blogspot.com/2007/08/important-differences-between.html' title='Important differences between the JavaScript null and undefined'/><author><name>Wasatch Wizard</name><uri>http://www.blogger.com/profile/07858015938543437007</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00828643655769295472'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17855063.post-6113928170507109505</id><published>2007-08-16T17:49:00.000-07:00</published><updated>2007-08-16T17:00:16.343-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Regular Expressions'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>Targeting Firefox, IE 7, and IE 6 (and older) browsers via CSS</title><content type='html'>&lt;style type="text/css"&gt;.source-code { font-family: courier new, mono; padding:16px 3px 28px 3px; } .source-code .iden { color: #00d; } .source-code .keyw { color: #f00; } .source-code .comment { color: #0a0; }&lt;br /&gt;&lt;/style&gt;  &lt;p&gt;The tip for today's post&amp;nbsp;is applying different styles to IE 7, IE 6 and older, and all the other browsers out there without having custom script or changing out style sheets. It’s simple too! &lt;/p&gt;  &lt;table cellspacing="0" cellpadding="4" border="0" unselectable="on"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;1)&lt;/td&gt; &lt;td&gt;First, create your normal style, which of course applies to all browsers:&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&amp;nbsp;&lt;/td&gt; &lt;td class="source-code"&gt;&lt;span class="keyw"&gt;padding&lt;/span&gt;: 2&lt;span class="iden"&gt;px&lt;/span&gt; 6&lt;span class="iden"&gt;px&lt;/span&gt; 2&lt;span class="iden"&gt;px&lt;/span&gt; 6&lt;span class="iden"&gt;px&lt;/span&gt;;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;2)&lt;/td&gt; &lt;td&gt;Then, create the style you’d like to apply only to Internet Explorer 7:&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&amp;nbsp;&lt;/td&gt; &lt;td class="source-code"&gt;#&lt;span class="keyw"&gt;padding&lt;/span&gt;: 1&lt;span class="iden"&gt;px&lt;/span&gt; 6&lt;span class="iden"&gt;px&lt;/span&gt; 1&lt;span class="iden"&gt;px&lt;/span&gt; 6&lt;span class="iden"&gt;px&lt;/span&gt;; &lt;/td&gt; &lt;tr&gt; &lt;td&gt;3)&lt;/td&gt; &lt;td&gt;Now, create the style to apply only to Internet Explorer 6 and older:&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&amp;nbsp;&lt;/td&gt; &lt;td class="source-code"&gt;&lt;span class="comment"&gt;/* _padding: 3px 4px 3px 4px; */&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;   &lt;p&gt;There you have it! Now you can target the three main browsers: IE 6, IE 7, and everyone else.  &lt;p&gt;Technically, step 2 doesn’t only apply to IE 7, but really applies to all Internet Explorer browsers. In other words, if you wanted to target &lt;i&gt;all&lt;/i&gt; IE browsers only steps 1 and 2 are needed.  &lt;p&gt;I don’t remember where I found this. I believe parts came from a couple of different sources, but anyway, it’s a great hack – especially when used together.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17855063-6113928170507109505?l=elegantdevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elegantdevelopment.blogspot.com/feeds/6113928170507109505/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=17855063&amp;postID=6113928170507109505' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/6113928170507109505'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/6113928170507109505'/><link rel='alternate' type='text/html' href='http://elegantdevelopment.blogspot.com/2007/08/targeting-firefox-ie-7-and-ie-6-and.html' title='Targeting Firefox, IE 7, and IE 6 (and older) browsers via CSS'/><author><name>Wasatch Wizard</name><uri>http://www.blogger.com/profile/07858015938543437007</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00828643655769295472'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17855063.post-6003024793962535211</id><published>2007-07-17T17:32:00.000-07:00</published><updated>2007-08-06T12:00:53.980-07:00</updated><title type='text'>Getting things done!?</title><content type='html'>&lt;p&gt;I recently purchased the book Getting Things Done, by David Allen. I've just started reading it and I'm surprised how similar my own personal method is to GTD. I have done some things for many years because they worked. This book is sure helping me to understand why. &lt;/p&gt; &lt;p&gt;There are some major differences however. Some things I like better in GTD, but some of the things are tailored just for me -&amp;nbsp;that I have proven in use over and over again. Again, that may just be for myself, though.&lt;/p&gt; &lt;p&gt;I'll post the differences between my system and GTD once I've finished the book..&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17855063-6003024793962535211?l=elegantdevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elegantdevelopment.blogspot.com/feeds/6003024793962535211/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=17855063&amp;postID=6003024793962535211' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/6003024793962535211'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/6003024793962535211'/><link rel='alternate' type='text/html' href='http://elegantdevelopment.blogspot.com/2007/07/getting-things-done.html' title='Getting things done!?'/><author><name>Wasatch Wizard</name><uri>http://www.blogger.com/profile/07858015938543437007</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00828643655769295472'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17855063.post-449399569130947479</id><published>2007-07-07T21:56:00.000-07:00</published><updated>2007-08-06T11:57:52.024-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Politics'/><title type='text'>Great quote from Ann Coulter</title><content type='html'>&lt;p&gt;Although, I'm always irritated by good bloggers posting their own feelings regarding politics, because they are usually wrong, I just couldn't resist posting one myself. This is from Ann Coulter at &lt;a title="http://www.humanevents.com/article.php?id=21404" href="http://www.humanevents.com/article.php?id=21404"&gt;http://www.humanevents.com/article.php?id=21404&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;"With so many felons being Democrats, the party might want to think about changing its mascot from a donkey to a jailbird." - Ann Coulter (&lt;a href="http://www.humanevents.com/article.php?id=21404"&gt;link&lt;/a&gt;)&lt;/p&gt; &lt;p&gt;Interesting article too.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17855063-449399569130947479?l=elegantdevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elegantdevelopment.blogspot.com/feeds/449399569130947479/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=17855063&amp;postID=449399569130947479' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/449399569130947479'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/449399569130947479'/><link rel='alternate' type='text/html' href='http://elegantdevelopment.blogspot.com/2007/07/great-quote-from-ann-coulter.html' title='Great quote from Ann Coulter'/><author><name>Wasatch Wizard</name><uri>http://www.blogger.com/profile/07858015938543437007</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00828643655769295472'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17855063.post-6651535756161337381</id><published>2007-08-04T11:50:00.000-07:00</published><updated>2007-08-06T11:51:44.623-07:00</updated><title type='text'>How many blogs are you subscribed to?</title><content type='html'>&lt;p&gt;Reading blogs take too much time. There have always only been a few that I actually read, frequently. But, most of them, even long time favorites (such as &lt;a href="http://scobleizer.wordpress.com/feed"&gt;Scobleizer&lt;/a&gt;) just seem to take too much time to read.&lt;/p&gt; &lt;p&gt;I have found myself unsubscribing from blogs more and more. Not that I ever had a whole lot to begin with. At the highest point I maybe had 60 subscribed to in my reader. I just don't want to spend the time reading blogs, where most of it is what I consider fluff. Currently, I have about 35 subscriptions, but only about 15 are really active with at least 2 or more posts a week. Of course, some like MAKE and Engadget have dozens and more each day.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;Being an IT and Dev Generalist, I am involved in so many different technologies. I would like to get the synopsis of each area without having to slowly go through all of the (seemingly) countless posts about the things I'm not interested in. I want to go to a web site and be able to read in 10 minutes or less each day the current buzz about the subjects I'm interested in. It would of course keep track of what I last looked at. If I wanted more detail (and had time for such a thing) I could follow links for more, etc.&lt;/p&gt; &lt;p&gt;I would also like it to remind me, say, once a month to look at certain topics. Things like check out the latest health-related articles on MSN Health or check up on what my local politicians are currently going on about.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;I'm thinking the user interface should be similar to this:&lt;/p&gt; &lt;hr size="1"&gt;  &lt;h3&gt;Information Technology&lt;/h3&gt; &lt;p&gt;&lt;strong&gt;Windows Home Server&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="color:#c0c0c0;"&gt;No news to report | Saved for later (2)&lt;/span&gt;&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;Windows Scripting&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;u&gt;New blog posts&lt;/u&gt; (3) | &lt;u&gt;New articles&lt;/u&gt; (6) | Saved for later (2)&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;Windows Mobile&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;u&gt;New blog posts&lt;/u&gt; (4) | No new articles&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;Development&lt;/h3&gt; &lt;p&gt;&lt;strong&gt;Ruby&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;u&gt;Blog posts&lt;/u&gt; (11) | &lt;u&gt;New articles&lt;/u&gt; (4)&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;C# / .Net&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;u&gt;Blog posts&lt;/u&gt; (11) | &lt;u&gt;New articles&lt;/u&gt; (4)&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;Hardware &amp; Hobbies Engineering&lt;/h3&gt; &lt;p&gt;&lt;strong&gt;Robotics&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;New blogs posts (3) | No new articles&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;HAM Radio&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;No new blogs | No new articles&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;Commodore 64&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;No new blogs | No new articles&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;Politics&lt;/h3&gt; &lt;p&gt;&lt;strong&gt;Ann Coulter / Human Events&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;New blogs posts (3) | New articles (1)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17855063-6651535756161337381?l=elegantdevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elegantdevelopment.blogspot.com/feeds/6651535756161337381/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=17855063&amp;postID=6651535756161337381' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/6651535756161337381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/6651535756161337381'/><link rel='alternate' type='text/html' href='http://elegantdevelopment.blogspot.com/2007/08/how-many-blogs-are-you-subscribed-to.html' title='How many blogs are you subscribed to?'/><author><name>Wasatch Wizard</name><uri>http://www.blogger.com/profile/07858015938543437007</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00828643655769295472'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17855063.post-2090390527870430454</id><published>2007-07-13T10:41:00.001-07:00</published><updated>2007-07-13T11:33:28.064-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Google Maps'/><title type='text'>Google Maps stopped working a few days ago</title><content type='html'>&lt;p&gt;We ran into a problem this last Monday (7/9/07) where the Google Maps stopped working on some of our page. After figuring out why some pages were working and some weren't it turns out that Google made a change to their API.&lt;/p&gt; &lt;p&gt;Basically, you must now call &lt;strong&gt;&lt;span style="font-family:Consolas;"&gt;map.setCenter()&lt;/span&gt;&lt;/strong&gt; to initialize the map before calling any of the other methods that set preferences to it such as &lt;strong&gt;&lt;span style="font-family:Consolas;"&gt;map.enableDragging()&lt;/span&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;span style="font-family:Consolas;"&gt;map.enableDoubleClickZoom()&lt;/span&gt;&lt;/strong&gt;. &lt;/p&gt; &lt;p&gt;Actually, the only one that I noticed that caused the map to not display &lt;span style="font-style: italic;"&gt;at all &lt;/span&gt;was &lt;span style="font-family:Consolas;"&gt;&lt;strong&gt;&lt;span style="font-family:Courier New;"&gt;map.enableDragging()&lt;/span&gt;&lt;span style="font-family:Georgia;"&gt;.&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17855063-2090390527870430454?l=elegantdevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elegantdevelopment.blogspot.com/feeds/2090390527870430454/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=17855063&amp;postID=2090390527870430454' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/2090390527870430454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/2090390527870430454'/><link rel='alternate' type='text/html' href='http://elegantdevelopment.blogspot.com/2007/07/google-maps-stopped-working-few-days.html' title='Google Maps stopped working a few days ago'/><author><name>Wasatch Wizard</name><uri>http://www.blogger.com/profile/07858015938543437007</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00828643655769295472'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17855063.post-5437270979488306060</id><published>2007-03-06T20:58:00.000-07:00</published><updated>2007-04-17T11:35:07.803-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Use Reflection to compare Class properties with Enum element names</title><content type='html'>&lt;style&gt; span.source { color:#023; font-family: Consolas, Courier New, San-Serif; font-size: 10pt; } span.source .keyword { color: #0000ff; } span.source .stringLiteral { color: rgb(163, 21, 21); } span.source .userType { color: rgb(43, 145, 175); } span.source .operator { color: #0000aa; } span.source .comment { color: #00ff00; } span.source .indentation { padding-left: 22px; }&lt;/style&gt;&lt;br /&gt;The following code demonstrates how to use Reflection to simply your code; making it easier to read and understand, and remove code for potential bugs.&lt;br /&gt;&lt;br /&gt;The "normal" way of assigning/comparing Enum elements with class properties. In this example, the code must be changed every time you change the user class or the DataField enum. That's a major pain in the neck!&lt;br /&gt;&lt;span class="source"&gt;&lt;br /&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="userType"&gt;User&lt;/span&gt;&lt;br /&gt;{&lt;div class="indentation"&gt; &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;string&lt;/span&gt; FirstName;&lt;br /&gt; &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;string&lt;/span&gt; LastName;&lt;br /&gt; &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;string&lt;/span&gt; EmailAddress;&lt;br /&gt; &lt;span class="keyword"&gt;public&lt;/span&gt; User() { }&lt;br /&gt;&lt;/div&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;enum&lt;/span&gt; &lt;span class="userType"&gt;DataField&lt;/span&gt;&lt;br /&gt;{&lt;div class="indentation"&gt; FirstName,&lt;br /&gt; LastName,&lt;br /&gt; EmailAddress,&lt;br /&gt;&lt;/div&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="keyword"&gt;string&lt;/span&gt; value = &lt;span class="stringLiteral"&gt;""&lt;/span&gt;;&lt;br /&gt;&lt;span class="keyword"&gt;switch&lt;/span&gt; (field.DataField)&lt;br /&gt;{&lt;div class="indentation"&gt; &lt;span class="keyword"&gt;case&lt;/span&gt; &lt;span class="userType"&gt;DataField&lt;/span&gt;.FirstName: value = currentUser.FirstName;&lt;br /&gt; &lt;span class="indentation keyword"&gt;break&lt;/span&gt;;&lt;br /&gt; &lt;span class="keyword"&gt;case&lt;/span&gt; &lt;span class="userType"&gt;DataField&lt;/span&gt;.LastName: value = currentUser.LastName;&lt;br /&gt; &lt;span class="indentation keyword"&gt;break&lt;/span&gt;;&lt;br /&gt; &lt;span class="keyword"&gt;case&lt;/span&gt; &lt;span class="userType"&gt;DataField&lt;/span&gt;.EmailAddress: value = currentUser.EmailAddress;&lt;br /&gt; &lt;span class="indentation keyword"&gt;break&lt;/span&gt;;&lt;br /&gt; &lt;span class="keyword"&gt;default&lt;/span&gt;: value = &lt;span class="stringLiteral"&gt;""&lt;/span&gt;;&lt;br /&gt; &lt;span class="indentation keyword"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;/div&gt;}&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Using the switch statement above, you'd have to modify it whenever you add more properties of your User class..&lt;br /&gt;&lt;br /&gt;But, by using the following code, you won't ever have to modify the switch statement because it isn't even needed anymore.&lt;br /&gt;&lt;span class="source"&gt;&lt;br /&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="userType"&gt;User&lt;/span&gt;&lt;br /&gt;{&lt;div class="indentation"&gt; &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;int&lt;/span&gt; PlanType;&lt;br /&gt;&lt;br /&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;string&lt;/span&gt; FirstName;&lt;br /&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;string&lt;/span&gt; LastName;&lt;br /&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;string&lt;/span&gt; EmailAddress;&lt;br /&gt;&lt;br /&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;string&lt;/span&gt; Address;&lt;br /&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;string&lt;/span&gt; City;&lt;br /&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;string&lt;/span&gt; State;&lt;br /&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;string&lt;/span&gt; PostalCode;&lt;br /&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;string&lt;/span&gt; Country;&lt;br /&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;string&lt;/span&gt; PhoneNumber;&lt;br /&gt;&lt;br /&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;string&lt;/span&gt; CreditCardName;&lt;br /&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;string&lt;/span&gt; CreditCardType;&lt;br /&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;string&lt;/span&gt; CreditCardNumber;&lt;br /&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;string&lt;/span&gt; CreditCardExpirationMonth;&lt;br /&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;string&lt;/span&gt; CreditCardExpirationYear;&lt;br /&gt;&lt;br /&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; User() { }&lt;br /&gt;&lt;/div&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;enum&lt;/span&gt; &lt;span class="userType"&gt;DataField&lt;/span&gt;&lt;br /&gt;{&lt;div class="indentation"&gt;Unknown,&lt;br /&gt;PlanType,&lt;br /&gt;FirstName,&lt;br /&gt;LastName,&lt;br /&gt;EmailAddress,&lt;br /&gt;Address,&lt;br /&gt;City,&lt;br /&gt;State,&lt;br /&gt;PostalCode,&lt;br /&gt;Country,&lt;br /&gt;PhoneNumber,&lt;br /&gt;CreditCardName,&lt;br /&gt;CreditCardType,&lt;br /&gt;CreditCardNumber,&lt;br /&gt;CreditCardExpirationMonth,&lt;br /&gt;CreditCardExpirationYear&lt;br /&gt;&lt;/div&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="keyword"&gt;string&lt;/span&gt; value = &lt;span class="stringLiteral"&gt;""&lt;/span&gt;;&lt;br /&gt;&lt;span class="userType"&gt;FieldInfo&lt;/span&gt;&lt;span class="operator"&gt;[]&lt;/span&gt; properties = currentUser.GetType().GetFields();&lt;br /&gt;&lt;span class="keyword"&gt;for&lt;/span&gt; (&lt;span class="keyword"&gt;int&lt;/span&gt; i &lt;span class="operator"&gt;=&lt;/span&gt; 0; i &lt;span class="operator"&gt;&amp;lt;&lt;/span&gt; properties.Length; i&lt;span class="operator"&gt;++&lt;/span&gt;)&lt;br /&gt;{&lt;div class="indentation"&gt; &lt;span class="keyword"&gt;if&lt;/span&gt; (properties[i].Name &lt;span class="operator"&gt;==&lt;/span&gt; field.DataField.ToString())&lt;br /&gt;{&lt;div class="indentation"&gt; &lt;span class="userType"&gt;Object&lt;/span&gt; obj = properties[i].GetValue(currentUser);&lt;br /&gt;&lt;span class="keyword"&gt;if&lt;/span&gt; (&lt;span class="keyword"&gt;null&lt;/span&gt; != obj)&lt;br /&gt;&lt;div class="indentation"&gt; value = (&lt;span class="keyword"&gt;string&lt;/span&gt;)obj;&lt;/div&gt;&lt;span class="keyword"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;/div&gt;}&lt;br /&gt;&lt;/div&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Of course, you'll still have to ensure that the &lt;code&gt;DataField&lt;/code&gt; enum and the &lt;code&gt;User&lt;/code&gt; class properties are kept in sync, but you don't ever have to modify your &lt;code&gt;for&lt;/code&gt; loop. That's cool!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17855063-5437270979488306060?l=elegantdevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elegantdevelopment.blogspot.com/feeds/5437270979488306060/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=17855063&amp;postID=5437270979488306060' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/5437270979488306060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/5437270979488306060'/><link rel='alternate' type='text/html' href='http://elegantdevelopment.blogspot.com/2007/03/use-reflection-to-compare-class.html' title='Use Reflection to compare Class properties with Enum element names'/><author><name>Wasatch Wizard</name><uri>http://www.blogger.com/profile/07858015938543437007</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00828643655769295472'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17855063.post-8876647043414254908</id><published>2007-03-28T10:21:00.000-07:00</published><updated>2007-04-17T10:45:04.850-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Output name/values of an Enum</title><content type='html'>&lt;style&gt; span.source { color: #023; font-family: Consolas, Courier New, San-Serif; font-size: 10pt; } span.source .keyword { color: #0000ff; } span.source .stringLiteral { color: rgb(163, 21, 21); } span.source .userType { color: rgb(43, 145, 175); } span.source .operator { color: #0000aa; } span.source .indent1 { padding-left:22px; } &lt;/style&gt;&lt;br /&gt;I took the time a while ago to figure out the best way to output each name and value in an Enum. I just keep using the code and have been looking in recent projects looking for the code to re-use in a new project. So, I thought I’d share the love..&lt;br /&gt;&lt;br /&gt;This code will output the name and value of each element in the MyEnum object.&lt;br /&gt;&lt;br /&gt;&lt;span class="source"&gt;&lt;br /&gt;&lt;span class="keyword"&gt;string&lt;/span&gt;[] names = &lt;span class="userType"&gt;Enum&lt;/span&gt;.GetNames(&lt;span class="keyword"&gt;typeof&lt;/span&gt;(MyEnum));&lt;br /&gt;&lt;span class="userType"&gt;Array&lt;/span&gt; values = &lt;span class="userType"&gt;Enum&lt;/span&gt;.GetValues(&lt;span class="keyword"&gt;typeof&lt;/span&gt;(MyEnum));&lt;br /&gt;&lt;span class="keyword"&gt;for&lt;/span&gt; (&lt;span class="keyword"&gt;int&lt;/span&gt; i &lt;span class="operator"&gt;=&lt;/span&gt; 0; i &lt;span class="operator"&gt;&amp;lt;&lt;/span&gt; names.Length; i++)&lt;br /&gt;{&lt;br /&gt;&lt;span class="indent1 userType"&gt;Console&lt;/span&gt;.WriteLine(&lt;span class="keyword"&gt;string&lt;/span&gt;.Format(&lt;span class="stringLiteral"&gt;"{0} = {1}"&lt;/span&gt;, names[i], values.GetValue(i)));&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I think Reflection is probably the most overlooked and under-appreciated assembly in the whole .Net framework.  Don’t you just love it?  8^)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17855063-8876647043414254908?l=elegantdevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elegantdevelopment.blogspot.com/feeds/8876647043414254908/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=17855063&amp;postID=8876647043414254908' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/8876647043414254908'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/8876647043414254908'/><link rel='alternate' type='text/html' href='http://elegantdevelopment.blogspot.com/2007/03/output-namevalues-of-enum.html' title='Output name/values of an Enum'/><author><name>Wasatch Wizard</name><uri>http://www.blogger.com/profile/07858015938543437007</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00828643655769295472'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17855063.post-8092578772018818136</id><published>2007-03-09T15:32:00.000-07:00</published><updated>2007-03-26T21:32:20.569-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Vista'/><category scheme='http://www.blogger.com/atom/ns#' term='Shortcut'/><title type='text'>Windows Vista Command-Prompt from Here</title><content type='html'>I stumbled upon a nice feature of Windows Vista Explorer. If you right-click on a folder in Explorer, it will provide you with a different set of options. One of them is "Open Command Window Here," that opens a DOS prompt with the selected folder as the default path. That is cool, since the Windows XP Command-Prompt Here PowerToy was invaluable.&lt;br /&gt;&lt;br /&gt;UPDATED: After looking at it again, I noticed that there is one other additional item that is present when holding the Shift key down: "Copy As Path," which simply copies that folder's complete path into the Clipboard. Cool!&lt;br /&gt;&lt;br /&gt;Here's a screen shot:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_RDJEOHTGP8U/RgidW68y7eI/AAAAAAAAAAw/vgIqUXtzpYM/s1600-h/right-click-dos-prompt.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp3.blogger.com/_RDJEOHTGP8U/RgidW68y7eI/AAAAAAAAAAw/vgIqUXtzpYM/s400/right-click-dos-prompt.jpg" alt="" id="BLOGGER_PHOTO_ID_5046456399575576034" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17855063-8092578772018818136?l=elegantdevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elegantdevelopment.blogspot.com/feeds/8092578772018818136/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=17855063&amp;postID=8092578772018818136' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/8092578772018818136'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/8092578772018818136'/><link rel='alternate' type='text/html' href='http://elegantdevelopment.blogspot.com/2007/03/windows-vista-command-prompt-from-here.html' title='Windows Vista Command-Prompt from Here'/><author><name>Wasatch Wizard</name><uri>http://www.blogger.com/profile/07858015938543437007</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00828643655769295472'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_RDJEOHTGP8U/RgidW68y7eI/AAAAAAAAAAw/vgIqUXtzpYM/s72-c/right-click-dos-prompt.jpg' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17855063.post-4595457524508839179</id><published>2007-02-26T10:11:00.000-07:00</published><updated>2007-03-19T14:56:11.171-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Google Docs and Spreadsheets'/><title type='text'>Wish list for Google Docs &amp; Spreadsheets</title><content type='html'>To build upon my previous post about why &lt;a href="http://elegantdevelopment.blogspot.com/2007/02/why-google-docs-spreadsheets-doesnt.html"&gt;Google Docs &amp; Spreadsheets doesn't work&lt;/a&gt;, here is a short list of features I would like to see implemented.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Custom Font Selection&lt;/span&gt;: I just gotta be able to change the look and feel of my documents or I won't use it. Fix it, okay!?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Desktop Docs &amp; Spreadsheets Sync&lt;/span&gt;: There must be a way to have these files automatically backed up to my local hard disk. I would prefer a mirroring solution, though. I'd like to be able to edit the same files locally or online via GD&amp;amp;S. Just add functionality to Google Desktop Search that will manage the synchronization process. Even better, why not add the functionality as a Backup Solution for desktop users, where those files just happen to be "backed up" (mirrored) to the same location that GD&amp;S uses.&lt;br /&gt;&lt;br /&gt;Added Bonus: A Windows shell extension to allow dropping all of my files into a single GD&amp;amp;S folder. The files would be kept locally (in that folder), but those files would also be mirrored with GD&amp;S online. I'm thinking something similar to how &lt;a href="http://www.viksoe.dk/code/gmail.htm"&gt;Gmail Drive&lt;/a&gt; works (&lt;a href="http://richard.jones.name/google-hacks/gmail-filesystem/gmail-filesystem.html"&gt;Linux&lt;/a&gt; version, &lt;a href="http://gdisk.sourceforge.net/"&gt;Mac OSX&lt;/a&gt; version).&lt;br /&gt;&lt;br /&gt;Super-duper Added Bonus: Even more cool than that would be to have the (same) shell extension render the file view to look like GD&amp;amp;S online. That would be way cool and super usable!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Note to Google: I volunteer to beta test these for you!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17855063-4595457524508839179?l=elegantdevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elegantdevelopment.blogspot.com/feeds/4595457524508839179/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=17855063&amp;postID=4595457524508839179' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/4595457524508839179'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/4595457524508839179'/><link rel='alternate' type='text/html' href='http://elegantdevelopment.blogspot.com/2007/02/wish-list-for-google-docs-spreadsheets.html' title='Wish list for Google Docs &amp; Spreadsheets'/><author><name>Wasatch Wizard</name><uri>http://www.blogger.com/profile/07858015938543437007</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00828643655769295472'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17855063.post-8001441388174923051</id><published>2007-03-03T21:46:00.000-07:00</published><updated>2007-03-19T14:54:04.281-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hardware'/><category scheme='http://www.blogger.com/atom/ns#' term='Idea'/><title type='text'>Universal Charging Pad</title><content type='html'>I was thinking how nice it would be to get rid of all of my power cables and USB cables that are being used to charge up all of my devices. That would be very cool, indeed!&lt;br /&gt;&lt;br /&gt;So, I was thinking why not make a "Universal Charging Pad" that you can simply set your device onto and it would charge up. It works simply enough. Some products have already done similar things, such as my Sonicare toothbrush. But, think how nice it would be to set all of your many devices of various sizes (and voltages) onto a single, think mouse-pad-looking-thing to get charged up. No cables, no mess. That'd be cool!&lt;br /&gt;&lt;br /&gt;By the way, the Universal Charging Pad copyright is now for sale.. 8^)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17855063-8001441388174923051?l=elegantdevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elegantdevelopment.blogspot.com/feeds/8001441388174923051/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=17855063&amp;postID=8001441388174923051' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/8001441388174923051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/8001441388174923051'/><link rel='alternate' type='text/html' href='http://elegantdevelopment.blogspot.com/2007/03/universal-charging-pad.html' title='Universal Charging Pad'/><author><name>Wasatch Wizard</name><uri>http://www.blogger.com/profile/07858015938543437007</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00828643655769295472'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17855063.post-4835997505173012762</id><published>2007-03-19T14:13:00.000-07:00</published><updated>2007-03-19T14:41:00.298-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hack'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Vista'/><title type='text'>The Windows Vista UAC</title><content type='html'>Everyone has probably already turned off the UAC, but I hadn't until today. I left those annoying popup dialogs, because I actually like the features it provides; not for me, but for when my kids are using my computer. And, let's be honest, once you had everything installed that you normally use, the popup dialog isn't really that annoying anymore.&lt;br /&gt;&lt;br /&gt;Today I found a way to disable the UAC dialogs for only Administrators. That is cool! I haven't seen that done yet, so I tried it out and it works good! You can &lt;a href="http://www.howtogeek.com/howto/windows-vista/disable-user-account-controluac-for-administrators-only/"&gt;look here&lt;/a&gt; for the instructions to perform this tip, courtesy of &lt;a href="http://www.howtogeek.com/"&gt;HowToGeek.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Alternatively, you can create a plain-text file on your computer, name it with a .REG extension and put the following into it.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new;"&gt;   Windows Registry Editor Version 5.00&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;"ConsentPromptBehaviorAdmin"=dword:00000000&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Then, run that file. This registry key location was also courtesy of HowToGeek.com.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17855063-4835997505173012762?l=elegantdevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elegantdevelopment.blogspot.com/feeds/4835997505173012762/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=17855063&amp;postID=4835997505173012762' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/4835997505173012762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17855063/posts/default/4835997505173012762'/><link rel='alternate' type='text/html' href='http://elegantdevelopment.blogspot.com/2007/03/windows-vista-uac.html' title='The Windows Vista UAC'/><author><name>Wasatch Wizard</name><uri>http://www.blogger.com/profile/07858015938543437007</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00828643655769295472'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>