<?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' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3066698846289958752</id><updated>2012-02-11T20:37:19.149-08:00</updated><category term='Visual Studio'/><category term='Oracle'/><category term='Data Dude'/><category term='Sql Server'/><title type='text'>Techniana</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://techniana.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3066698846289958752/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://techniana.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Perry Tribolet</name><uri>http://www.blogger.com/profile/07837250650589844167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>23</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3066698846289958752.post-4337552725002147435</id><published>2010-08-19T11:54:00.000-07:00</published><updated>2010-08-19T12:22:30.142-07:00</updated><title type='text'>PowerShell, Scripts and Cmd.exe</title><content type='html'>PowerShell's designers don't seem to be overly concerned about including intuitiveness as a feature. &amp;nbsp;Consider what it takes to run a PowerShell script from the cmd.exe prompt. Bet&lt;br /&gt;&lt;br /&gt;c:\&amp;gt; Powershell blah blah&lt;br /&gt;&lt;br /&gt;doesn't do what you would think it would do. PowerShell expects "blah blah" to be code written in Powershell. &amp;nbsp;the canonical example is the following:&lt;br /&gt;&lt;br /&gt;c:\&amp;gt;&amp;nbsp;Powershell 2+2&lt;br /&gt;4&lt;br /&gt;&lt;br /&gt;Get it? &amp;nbsp;Do you ever find yourself typing "Powershell blah blah" at the command line? I didn't think so. &amp;nbsp;PowerShell&amp;nbsp;is a scripting language, so you might be expecting&lt;br /&gt;&lt;br /&gt;c:\&amp;gt;&amp;nbsp;Powershell script.ps1&lt;br /&gt;&lt;br /&gt;to run a script named script.ps1. Well if so, you would be wrong. PowerShell instead expects "script.ps1" to be a&amp;nbsp;PowerShell command, which it obviously isn't. &amp;nbsp;The solution, for some unexplained reason, is to add an ampersand in quotation marks. Thus,&lt;br /&gt;&lt;br /&gt;c:\&amp;gt;&amp;nbsp;Powershell "&amp;amp;" script.ps1&lt;br /&gt;&lt;br /&gt;BTW, it's more conventional to put the script reference in quotation marks as well. In other words,&lt;br /&gt;&lt;br /&gt;&amp;gt; Powershell "&amp;amp; script.ps1"&lt;br /&gt;&lt;br /&gt;According to the error message you receive if you type&lt;br /&gt;&lt;br /&gt;c:\&amp;gt;&amp;nbsp;Powershell "&amp;amp; blah blah"&lt;br /&gt;&lt;br /&gt;the quoted ampersand tells PowerShell that what comes afterward is one of four things:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;cmdlet&lt;/li&gt;&lt;li&gt;function&lt;/li&gt;&lt;li&gt;script file&lt;/li&gt;&lt;li&gt;operable program&lt;/li&gt;&lt;/ul&gt;Apparently, this error message is the only official instruction from Microsoft regarding the ampersand switch.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3066698846289958752-4337552725002147435?l=techniana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techniana.blogspot.com/feeds/4337552725002147435/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3066698846289958752&amp;postID=4337552725002147435' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3066698846289958752/posts/default/4337552725002147435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3066698846289958752/posts/default/4337552725002147435'/><link rel='alternate' type='text/html' href='http://techniana.blogspot.com/2010/08/powershell-scripts-and-cmdexe.html' title='PowerShell, Scripts and Cmd.exe'/><author><name>Perry Tribolet</name><uri>http://www.blogger.com/profile/07837250650589844167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3066698846289958752.post-2192631368026802252</id><published>2010-07-23T11:59:00.000-07:00</published><updated>2010-07-23T11:59:46.991-07:00</updated><title type='text'>Changing .NET App Properties/Settings at Runtime</title><content type='html'>Visual Studio* provides an application settings (aka properties) feature for console, library or windows applications.  Creating and editing application settings at design time is straight-forward and can be managed conveniently thru VS's GUI.&lt;br /&gt;&lt;br /&gt;But what if you need to change the settings at run-time? The answer is anything but obvious.  The settings are contained in a class called "Settings," which derives from System.Configuration.ApplicationSettingsBase. &amp;nbsp;You could of course rewrite the code in the settings class, but then if you decide to make a change in VS's GUI all of your handiwork is immediately hosed.&lt;br /&gt;&lt;br /&gt;There's one adjustment you can make directly in the GUI that puts you a step closer to your goal. &amp;nbsp;At the top of the Settings Designer screen, is a drop down box titled "Accessor Modifier." &amp;nbsp;There are two choices: the default is "Internal." The other choice is "Public." Choose "Public." As we'll see, this one alteration allows us to change the value of the properties in our code. &lt;br /&gt;&lt;br /&gt;The application expects there to be a static property called Default, of type Settings, in the class Settings. Default, the only instance of Settings that will be acknowledged by the app, is created for you automatically by VS.&amp;nbsp;&amp;nbsp;Default is essentially functioning as a singleton. Finally,&amp;nbsp;ApplicationSettingsBase&amp;nbsp;provides an indexer allowing us to reference the individual settings on Default.&lt;br /&gt;&lt;br /&gt;Here's an example:&lt;br /&gt;&lt;br /&gt;MyApp.Properties.Settings.Default["MyProperty"] = value;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3066698846289958752-2192631368026802252?l=techniana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techniana.blogspot.com/feeds/2192631368026802252/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3066698846289958752&amp;postID=2192631368026802252' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3066698846289958752/posts/default/2192631368026802252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3066698846289958752/posts/default/2192631368026802252'/><link rel='alternate' type='text/html' href='http://techniana.blogspot.com/2010/07/changing-net-app-propertiessettings-at.html' title='Changing .NET App Properties/Settings at Runtime'/><author><name>Perry Tribolet</name><uri>http://www.blogger.com/profile/07837250650589844167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3066698846289958752.post-2192577216322773682</id><published>2010-01-26T11:09:00.000-08:00</published><updated>2010-02-08T13:14:38.990-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><title type='text'>ORA-12154 TNS:could not resolve the connect identifier specified</title><content type='html'>Hey Oracle enthusiasts. Here's a fun one. I encounter this just about whenever I try to configure, unsuccessfully, TNSNames.ora for ODP.NET. Recently, I decided stopped worrying about TNS and put everything into the connection string, like so:&lt;br /&gt;&lt;br /&gt;&lt;span style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;Data Source=(DESCRIPTION= (ADDRESS_LIST=(ADDRESS=(&lt;wbr&gt;&lt;/wbr&gt;PROTOCOL=TCP)(HOST=LOCALHOST)(&lt;wbr&gt;&lt;/wbr&gt;PORT=1521))) (CONNECT_DATA=(SERVER=&lt;wbr&gt;&lt;/wbr&gt;DEDICATED)(SERVICE_NAME = orcl))); USER ID=whatever;PASSWORD=********;&lt;wbr&gt;&lt;/wbr&gt;"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial, sans-serif; font-size: small;"&gt;&lt;span style="border-collapse: collapse; font-size: 13px;"&gt;This works every time.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial, sans-serif; font-size: small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;It just seems as though TNS isn't worth the trouble.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3066698846289958752-2192577216322773682?l=techniana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techniana.blogspot.com/feeds/2192577216322773682/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3066698846289958752&amp;postID=2192577216322773682' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3066698846289958752/posts/default/2192577216322773682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3066698846289958752/posts/default/2192577216322773682'/><link rel='alternate' type='text/html' href='http://techniana.blogspot.com/2010/01/ora-12154-tnscould-not-resolve-connect.html' title='ORA-12154 TNS:could not resolve the connect identifier specified'/><author><name>Perry Tribolet</name><uri>http://www.blogger.com/profile/07837250650589844167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3066698846289958752.post-2559342873346028866</id><published>2009-12-16T11:57:00.000-08:00</published><updated>2009-12-16T13:01:43.386-08:00</updated><title type='text'>Backing Up Oracle, Easily</title><content type='html'>As a developer I have a need to replicate environments. As I now work regularly with Oracle, my environment-maintenance duties should include duplicating Oracle databases across various machines. But how in the world do you do that? &lt;br /&gt;&lt;br /&gt;It's been a real eye-opener to research what's involved with Oracle administration. I've come to the conclusion that the Oracle company doesn't really bother itself with things like quickstarts.   Sadly, all their documentation is written in documentation-ese. What a struggle.&lt;br /&gt;&lt;br /&gt;A few days ago I broke down and tackled the Oracle restoration challenge. I finally restored my first Oracle database today, and I thought I'd document how to do it, for the benefit of others. Essentially, I copied files over from the old server to the new one. FYI, this is what as known as a "cold" backup and recovery because the databases are shutdown when the activity occurs.&lt;br /&gt;&lt;br /&gt;1. First, run these commands in sqlplus or Sql Developer to find out which files need to be copied:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;select name from v$datafile; -- this provides the datafiles &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;select name from v$controlfile; --this provides the control files&lt;br /&gt;2. Note the redo files. They are in the same directory as the datafiles.&lt;br /&gt;3. Now log into the database to be replicated as sysdba&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$&gt;sqlplus "/ as sysdba"&lt;br /&gt;4. And issue the "shutdown abort" command&lt;br /&gt;5. Similarly on the new server, issue the "shutdown abort" command&lt;br /&gt;5. Copy all the files referred to in items 1, 2, and 3 above from the server to be replicated to the corresponding locations on the new server&lt;br /&gt;6. Back in sqlplus on the server to be replicated, issue the "restart" command&lt;br /&gt;7. Do the same for the new server&lt;br /&gt;&lt;br /&gt;Congratulations! You should be up and running on the new server by now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3066698846289958752-2559342873346028866?l=techniana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techniana.blogspot.com/feeds/2559342873346028866/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3066698846289958752&amp;postID=2559342873346028866' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3066698846289958752/posts/default/2559342873346028866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3066698846289958752/posts/default/2559342873346028866'/><link rel='alternate' type='text/html' href='http://techniana.blogspot.com/2009/12/backing-up-oracle-easily.html' title='Backing Up Oracle, Easily'/><author><name>Perry Tribolet</name><uri>http://www.blogger.com/profile/07837250650589844167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3066698846289958752.post-7070087414907944267</id><published>2009-10-28T14:23:00.000-07:00</published><updated>2009-10-28T14:23:57.524-07:00</updated><title type='text'>Google, My Friend</title><content type='html'>It's astonishing to me how well Google distinguishes itself in anticipating its customers' needs. I couldn't remember the file name for the Task Manager program. I only knew that it was some abbreviation of TaskManager. &lt;br /&gt;&lt;br /&gt;I tried doing a search on "task manager command line" or something like that receiving nothing but frustration.  But then remembering Google's "Did you mean . . .?" feature. I typed "cmd tskmngr" into Google's search box. There it was. &lt;br /&gt;&lt;br /&gt;&lt;span class=spell style="color:#cc0000"&gt;Did you mean: &lt;/span&gt;&lt;a href="/search?hl=en&amp;amp;rlz=1C1GGLS_enUS291US303&amp;amp;ei=GoToSq3mD9PmlAfJrIGOCA&amp;amp;sa=X&amp;amp;oi=spell&amp;amp;resnum=0&amp;amp;ct=result&amp;amp;cd=1&amp;amp;ved=0CA4QBSgA&amp;amp;q=cmd+taskmgr&amp;amp;spell=1"class=spell&gt;cmd &lt;b&gt;&lt;i&gt;taskmgr&lt;/i&gt;&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Simple. Effortless.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3066698846289958752-7070087414907944267?l=techniana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techniana.blogspot.com/feeds/7070087414907944267/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3066698846289958752&amp;postID=7070087414907944267' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3066698846289958752/posts/default/7070087414907944267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3066698846289958752/posts/default/7070087414907944267'/><link rel='alternate' type='text/html' href='http://techniana.blogspot.com/2009/10/google-my-friend.html' title='Google, My Friend'/><author><name>Perry Tribolet</name><uri>http://www.blogger.com/profile/07837250650589844167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3066698846289958752.post-6423842885000555131</id><published>2009-10-28T14:06:00.000-07:00</published><updated>2009-10-28T14:06:40.033-07:00</updated><title type='text'>How Again Do You Get Data Out of a Refcursor in Sql Developer?</title><content type='html'>There appears to be no way for me to memorize how to run a stored procedure in Sql Developer that uses a refcursor. So I'm putting an example here. That way I can refer to it any time I want.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;variable CV_1 REFCURSOR;&lt;br /&gt;declare V_INTUSERID number;&lt;br /&gt;BEGIN&lt;br /&gt;  V_INTUSERID := 1;&lt;br /&gt;  spProc1(V_INTUSERID,:CV_1);&lt;br /&gt;END;&lt;br /&gt;PRINT CV_1;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3066698846289958752-6423842885000555131?l=techniana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techniana.blogspot.com/feeds/6423842885000555131/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3066698846289958752&amp;postID=6423842885000555131' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3066698846289958752/posts/default/6423842885000555131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3066698846289958752/posts/default/6423842885000555131'/><link rel='alternate' type='text/html' href='http://techniana.blogspot.com/2009/10/how-again-do-you-get-data-out-of.html' title='How Again Do You Get Data Out of a Refcursor in Sql Developer?'/><author><name>Perry Tribolet</name><uri>http://www.blogger.com/profile/07837250650589844167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3066698846289958752.post-8934737251397973807</id><published>2009-10-07T08:29:00.000-07:00</published><updated>2009-10-07T08:46:53.550-07:00</updated><title type='text'>Visual Studio Shortcut for Using Directives</title><content type='html'>My current vote for top Visual Studio shortcut goes to "Shift-Alt-F10." &amp;nbsp;This little beauty will bring up the "Options to help bind the selected item" dialog which will allow you to command the UI to inject the appropriate "Using" directive at the top of a class. Trying to bring up this dialog with the mouse is tricky and time-consuming. Save those precious brain cells for something else.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_TyfoHDL02pM/SsyzgvIQSYI/AAAAAAAAAbM/QKKbtya0NLA/s1600-h/Shift-Alt-F10.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="264" src="http://1.bp.blogspot.com/_TyfoHDL02pM/SsyzgvIQSYI/AAAAAAAAAbM/QKKbtya0NLA/s400/Shift-Alt-F10.bmp" width="600" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3066698846289958752-8934737251397973807?l=techniana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techniana.blogspot.com/feeds/8934737251397973807/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3066698846289958752&amp;postID=8934737251397973807' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3066698846289958752/posts/default/8934737251397973807'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3066698846289958752/posts/default/8934737251397973807'/><link rel='alternate' type='text/html' href='http://techniana.blogspot.com/2009/10/visual-studio-shortcut-for-using.html' title='Visual Studio Shortcut for Using Directives'/><author><name>Perry Tribolet</name><uri>http://www.blogger.com/profile/07837250650589844167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_TyfoHDL02pM/SsyzgvIQSYI/AAAAAAAAAbM/QKKbtya0NLA/s72-c/Shift-Alt-F10.bmp' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3066698846289958752.post-9002036458019358402</id><published>2009-10-07T08:07:00.000-07:00</published><updated>2009-10-07T08:16:23.401-07:00</updated><title type='text'>"Add Reference" Dialog Delays</title><content type='html'>Today I decided to reduce the impact of an annoying problem with Visual Studio--the length of time it takes to initially bring up the "Add Reference" dialog. It can take a minute! I run into this delay constantly because I seem to almost always need to add a reference to System.Configuration to every project. My approach was to create a custom project template with the reference already included. Here are the steps I took:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Navigate to "C:\program files\microsoft visual studio 9.0\common7\IDE\ProjectTemplates\CSharp\Windows\1033"&lt;/li&gt;&lt;li&gt;Copied the template ConsoleApplication.zip&lt;/li&gt;&lt;li&gt;Navigate to My Documents\Visual Studio 2008\Templates\ProjectTemplates\Visual C#&lt;/li&gt;&lt;li&gt;Pasted ConsoleApplication.zip&lt;/li&gt;&lt;li&gt;Opened up the zip with "Open with &amp;gt; Compressed (zipped) folders" and dragged "consoleapplication.csproj" onto the desktop&lt;/li&gt;&lt;li&gt;At line 45 added&lt;/li&gt;&lt;div style="background: white; color: black; font-family: Courier New; font-size: 10pt;"&gt;&lt;div style="background-color: #f9f9f9; margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Reference&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Include&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;System.Configuration&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;       &lt;/div&gt;&lt;/div&gt;&lt;li&gt;Saved the proj file&lt;/li&gt;&lt;li&gt;Opened up the zip with Winzip (or use 7zip) and dragged in the new version of "consoleapplication.csproj"&lt;/li&gt;&lt;li&gt;Closed winzip (or 7zip)&lt;/li&gt;&lt;/ul&gt;The new project template is ready to use!&lt;br /&gt;&lt;br /&gt;The official documentation from Microsoft is &lt;a href="http://msdn.microsoft.com/en-us/library/y3kkate1(VS.80).aspx"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3066698846289958752-9002036458019358402?l=techniana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techniana.blogspot.com/feeds/9002036458019358402/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3066698846289958752&amp;postID=9002036458019358402' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3066698846289958752/posts/default/9002036458019358402'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3066698846289958752/posts/default/9002036458019358402'/><link rel='alternate' type='text/html' href='http://techniana.blogspot.com/2009/10/add-reference-dialog-delays.html' title='&quot;Add Reference&quot; Dialog Delays'/><author><name>Perry Tribolet</name><uri>http://www.blogger.com/profile/07837250650589844167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3066698846289958752.post-6814785976148728715</id><published>2009-10-06T13:26:00.000-07:00</published><updated>2009-10-06T13:30:19.501-07:00</updated><title type='text'>Executing Console Commands with PowerShell</title><content type='html'>I'm just starting to master PowerShell . . and I emphasize the word "starting". &amp;nbsp;Frankly, I'm disappointed with the learning curve required. PowerShell doesn't seem to be optimized, yet, for quick learning, despite that it piggy-backs off of .NET.&lt;br /&gt;&lt;br /&gt;Here's a tip. Don't throw away those useful scraps of "DOS" commands you've been carrying around for many years. &amp;nbsp;You can reuse them inside of PowerShell. Here's an example:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;p style="margin: 0px;background-color: #F9F9F9;"&gt;&amp;nbsp;cmd /c&amp;nbsp; &amp;lt;PathToCommand&amp;gt; arg0 arg1 argEtc&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3066698846289958752-6814785976148728715?l=techniana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techniana.blogspot.com/feeds/6814785976148728715/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3066698846289958752&amp;postID=6814785976148728715' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3066698846289958752/posts/default/6814785976148728715'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3066698846289958752/posts/default/6814785976148728715'/><link rel='alternate' type='text/html' href='http://techniana.blogspot.com/2009/10/executing-console-commands-with.html' title='Executing Console Commands with PowerShell'/><author><name>Perry Tribolet</name><uri>http://www.blogger.com/profile/07837250650589844167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3066698846289958752.post-3970070094696932523</id><published>2009-10-06T12:51:00.000-07:00</published><updated>2009-10-06T13:06:44.645-07:00</updated><title type='text'>Getting Started with the 7Zip Command Line</title><content type='html'>7Zip's command line tool has umpty-um options. Many of them are very useful. But if you are looking only for a command line version of the Windows' "Send to &amp;gt; Compressed (zipped) Folder" command, then you can get by with merely the following:&lt;br /&gt;&lt;br /&gt;&lt;div style="background: white; color: black; font-family: Courier New; font-size: 10pt;"&gt;&lt;div style="background-color: #f9f9f9; margin: 0px;"&gt;&amp;nbsp;7z a -tzip &amp;lt;ZippedFileName&amp;gt;.zip &amp;lt;FolderName&amp;gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3066698846289958752-3970070094696932523?l=techniana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techniana.blogspot.com/feeds/3970070094696932523/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3066698846289958752&amp;postID=3970070094696932523' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3066698846289958752/posts/default/3970070094696932523'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3066698846289958752/posts/default/3970070094696932523'/><link rel='alternate' type='text/html' href='http://techniana.blogspot.com/2009/10/getting-started-with-7zip-command-line.html' title='Getting Started with the 7Zip Command Line'/><author><name>Perry Tribolet</name><uri>http://www.blogger.com/profile/07837250650589844167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3066698846289958752.post-8191118150630431359</id><published>2009-10-01T08:18:00.000-07:00</published><updated>2009-10-01T08:18:30.373-07:00</updated><title type='text'>Using C Sample Code in MSDN</title><content type='html'>Here's a simple tip for Windows C (and C++) programmers. There's a wealth of C code samples in MSDN. Unfortunately, many of those I've seen and used suffer from the same&amp;nbsp;deficiency: they not unicode friendly and therefore not compatible with recent versions of Visual Studio. It's relatively easy to fix, however. Substitute the _tmain function for main and for _tmain's second parameter use "_TCHAR* argv[]" instead of "char *argv[]."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3066698846289958752-8191118150630431359?l=techniana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techniana.blogspot.com/feeds/8191118150630431359/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3066698846289958752&amp;postID=8191118150630431359' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3066698846289958752/posts/default/8191118150630431359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3066698846289958752/posts/default/8191118150630431359'/><link rel='alternate' type='text/html' href='http://techniana.blogspot.com/2009/10/using-c-sample-code-in-msdn.html' title='Using C Sample Code in MSDN'/><author><name>Perry Tribolet</name><uri>http://www.blogger.com/profile/07837250650589844167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3066698846289958752.post-1483701559910869635</id><published>2009-09-16T12:47:00.000-07:00</published><updated>2009-09-16T13:04:57.184-07:00</updated><title type='text'>GOTO May Be Considered Helpful</title><content type='html'>As it turns out, at least one legitimate use exists for the notorious GOTO statement: breaking out of nested loops. Knowing from first-hand experience the problems that could be caused by "goto programming", I hadn't written a goto in 25 years. Recently, however, when trying to a write function with nested loops, it dawned on me that the most elegant solution would indeed involve a goto, at least when using C#. In fact, Microsoft's &lt;a href="http://msdn.microsoft.com/en-us/library/13940fs2.aspx"&gt;C# reference guide&lt;/a&gt; specifically recommends using a "goto" when exiting an inner loop, I later found out. (Maybe I ought to be reading Microsoft's online docs more often.)&lt;br /&gt;&lt;br /&gt;In reviewing Steve McConnell's Code Complete (Second Edition), as I always do when confronting fundamental coding challenges, I was surprised to find only the vaguest of advice regarding "goto"--never say never, use your head, etc. Earlier in his book, McConnell does mention a Java-only approach. Java, which doesn't implement goto, actually has the nifty solution of named blocks, allowing you to end a break statement with the name of a block. I think this is superior than using a goto, but Java seems to be the only language with this feature.&lt;br /&gt;&lt;br /&gt;Another author I consulted in this regard was Jeff Atwood. Atwood also describes beneficial situations for &lt;a href="http://www.codinghorror.com/blog/archives/000982.html"&gt;using goto&lt;/a&gt;, but in the only in the context of an "early return," rather than as a solution specifically for exiting nested loops. On the other hand,&amp;nbsp; I really like Atwood's description of "return" and "exit" as being merely tightly scoped goto's.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3066698846289958752-1483701559910869635?l=techniana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techniana.blogspot.com/feeds/1483701559910869635/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3066698846289958752&amp;postID=1483701559910869635' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3066698846289958752/posts/default/1483701559910869635'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3066698846289958752/posts/default/1483701559910869635'/><link rel='alternate' type='text/html' href='http://techniana.blogspot.com/2009/09/goto-may-be-considered-helpful.html' title='GOTO May Be Considered Helpful'/><author><name>Perry Tribolet</name><uri>http://www.blogger.com/profile/07837250650589844167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3066698846289958752.post-4704780232620405958</id><published>2009-09-10T11:57:00.000-07:00</published><updated>2009-09-10T12:05:54.685-07:00</updated><title type='text'>Loading Image Resources</title><content type='html'>Here's sample code to load an image resource file, which works even if the resource file is not in the executable assembly, but in a referenced assembly.&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;p style="margin: 0px;background-color: #F9F9F9;"&gt;&lt;span style="color: #2b91af;"&gt;Bitmap&lt;/span&gt; bmp = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Bitmap&lt;/span&gt;(&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Reflection.&lt;span style="color: #2b91af;"&gt;Assembly&lt;/span&gt;.GetAssembly(&lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;pick_a_class&lt;/span&gt;)).&lt;/p&gt;&lt;p style="margin: 0px;background-color: #F9F9F9;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; GetManifestResourceStream(&lt;span style="color: #a31515;"&gt;"Dll.Path.Image.jpg"&lt;/span&gt;));&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;pick_a_class is the name of any class in the relevant assembly.&lt;br /&gt;&lt;br /&gt;The resource name may not be obvious. Here's code to determine the exact names of the various resources:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;p style="margin: 0px;background-color: #F9F9F9;"&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;[] all = System.Reflection.&lt;span style="color: #2b91af;"&gt;Assembly&lt;/span&gt;.GetAssembly(&lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;pick_a_class&lt;/span&gt;)).&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; GetManifestResourceNames();&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3066698846289958752-4704780232620405958?l=techniana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techniana.blogspot.com/feeds/4704780232620405958/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3066698846289958752&amp;postID=4704780232620405958' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3066698846289958752/posts/default/4704780232620405958'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3066698846289958752/posts/default/4704780232620405958'/><link rel='alternate' type='text/html' href='http://techniana.blogspot.com/2009/09/loading-image-resource.html' title='Loading Image Resources'/><author><name>Perry Tribolet</name><uri>http://www.blogger.com/profile/07837250650589844167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3066698846289958752.post-5959647986362712741</id><published>2009-09-08T12:54:00.000-07:00</published><updated>2009-09-08T13:42:27.207-07:00</updated><title type='text'>Manipulating Xml with C#</title><content type='html'>&lt;div&gt;I'm pretty fond of the &lt;a href="http://msdn.microsoft.com/en-us/library/system.xml.linq.xdocument.aspx"&gt;XDocument&lt;/a&gt; class.  XDocument lets you have your way with XML without requiring convoluted syntax, especially when used in conjunction with lambda expressions. Here's an example to change the value of an attribute on nodes that were found through a search criterion.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;p style="margin: 0px;background-color: #F9F9F9;"&gt;&lt;span style="color: #2b91af;"&gt;XDocument&lt;/span&gt; xDoc = &lt;span style="color: #2b91af;"&gt;XDocument&lt;/span&gt;.Load(&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;StringReader&lt;/span&gt;(&lt;/p&gt;&lt;p style="margin: 0px;background-color: #F9F9F9;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #a31515;"&gt;@"&amp;lt;Customers&amp;gt;&amp;lt;Customer ID=""99"" Description=""Just another customer""&amp;gt;&amp;lt;/Customer&amp;gt;&amp;lt;/Customers&amp;gt;"&lt;/span&gt;));&lt;/p&gt;&lt;p style="margin: 0px;"&gt;xDoc.Descendants(&lt;span style="color: #a31515;"&gt;"Customer"&lt;/span&gt;).ToList().&lt;/p&gt;&lt;p style="margin: 0px;background-color: #F9F9F9;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ForEach&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (e =&amp;gt;&lt;/p&gt;&lt;p style="margin: 0px;background-color: #F9F9F9;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (e.Attribute(&lt;span style="color: #a31515;"&gt;"ID"&lt;/span&gt;).Value == &lt;span style="color: #a31515;"&gt;"99"&lt;/span&gt;)&lt;/p&gt;&lt;p style="margin: 0px;background-color: #F9F9F9;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; { e.Attribute(&lt;span style="color: #a31515;"&gt;"Description"&lt;/span&gt;).Value = &lt;span style="color: #a31515;"&gt;"Our best customer"&lt;/span&gt;; }&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&lt;p style="margin: 0px;background-color: #F9F9F9;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3066698846289958752-5959647986362712741?l=techniana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techniana.blogspot.com/feeds/5959647986362712741/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3066698846289958752&amp;postID=5959647986362712741' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3066698846289958752/posts/default/5959647986362712741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3066698846289958752/posts/default/5959647986362712741'/><link rel='alternate' type='text/html' href='http://techniana.blogspot.com/2009/09/manipulating-xml-with-c.html' title='Manipulating Xml with C#'/><author><name>Perry Tribolet</name><uri>http://www.blogger.com/profile/07837250650589844167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3066698846289958752.post-1903301022716028212</id><published>2009-06-10T11:25:00.000-07:00</published><updated>2009-06-10T12:47:50.003-07:00</updated><title type='text'>Hiding ASP.NET Configuration Files from VSS</title><content type='html'>&lt;div&gt;All I wanted to do was to keep a few ASP.NET web site files from being &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;versioned&lt;/span&gt;&lt;/span&gt; by Visual &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Sourcesafe&lt;/span&gt;&lt;/span&gt;.  Seemed like a reasonable request.  I'm talking about deployment specific configuration files with things like server names in them that are referenced in web.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;config&lt;/span&gt;&lt;/span&gt; using the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;configSource&lt;/span&gt;&lt;/span&gt; attribute.  This approach is necessary for real world scenarios, where, for instance, a production server would not know what to do with the name of a database which is located only on my &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;dev&lt;/span&gt;&lt;/span&gt; box.  Unfortunately neither Visual Studio (current version 2008) nor &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;VSS&lt;/span&gt;&lt;/span&gt; knows how to ignore any ASP.NET files.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;I wonder what does everyone else does? I've met few ASP.NET developers who actually know about the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;configSource&lt;/span&gt;&lt;/span&gt; attribute. And I suspect that the few that do probably struggle originally as I have with an occasional mishap and then turn to batch scripts like as I have done for many months now.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There must be a better way, I mumbled to myself this morning. So a-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;Googlin&lt;/span&gt;' I went. Through a quick search,  I've &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;encountered&lt;/span&gt; several blog posts suggesting a hack on the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;vssscc&lt;/span&gt;&lt;/span&gt; file for the solution. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;Suppposedly&lt;/span&gt;&lt;/span&gt; you can add a line like "EXCLUDED_FILE0" = "&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;filename&lt;/span&gt;&lt;/span&gt;" and reset the "NUMBER_OF_EXCLUDED_FILES" line. There's only one catch; it doesn't work.  There went 30 minutes down the drain.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After more extensive searching, I was able to find an awkward but workable solution, from a post on a slightly different topic, which is to set the machine specific files as "hidden" in Windows. Never used that feature of Windows before!  Never had a need to.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;There you are. Easy, right.  Yeah, it's easy all right, once you know.  Hard if you don't know. I can't decide: Is it surprising that  productivity insights are about the hardest thing in software development to Google for, or is really not surprising at all?  After all, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;internet&lt;/span&gt;&lt;/span&gt; "knowledge" seems to be mostly the blind-leading-the-blind.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;It took me months to buckle-down and hunt for a solution to this annoying problem. I'm really glad I finally got around to it. I certainly hope, however, that in the future my futility-o-meter &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_12"&gt;becomes&lt;/span&gt; more sensitive and I don't wait as long when I run into productivity snags.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3066698846289958752-1903301022716028212?l=techniana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techniana.blogspot.com/feeds/1903301022716028212/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3066698846289958752&amp;postID=1903301022716028212' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3066698846289958752/posts/default/1903301022716028212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3066698846289958752/posts/default/1903301022716028212'/><link rel='alternate' type='text/html' href='http://techniana.blogspot.com/2009/06/hiding-aspnet-configuration-files-from.html' title='Hiding ASP.NET Configuration Files from VSS'/><author><name>Perry Tribolet</name><uri>http://www.blogger.com/profile/07837250650589844167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3066698846289958752.post-4432156233827959606</id><published>2009-05-30T09:02:00.000-07:00</published><updated>2009-05-30T10:52:41.983-07:00</updated><title type='text'>Sorry. We Get the Support Documentation We Deserve</title><content type='html'>We programmers love to mumble to ourselves in abject silence about how poorly a commercial framework, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;api&lt;/span&gt;&lt;/span&gt;, server app, etc is documented.  Though such complaints might be understandable, I suspect that the lack of effective documentation is many instances at least partly a function of apathy on the part of the user base.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Recently, I ran into perhaps the vauguest and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;cryptic&lt;/span&gt; Oracle error messages of all time: "ORA-01461 can bind a LONG value only for insert into a LONG column." &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Huh? LONG? LONG is a defunct data type. Hey Oracle, what I really need to know is which column? And which table? And what exactly is meant by a "LONG value?" It's just a string characters.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Eventually I figured out that the offending insert statement referred to a column that was &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;varchar&lt;/span&gt;&lt;/span&gt;2(4000 characters).  But my string only had 2020 characters. So I should be good. Right?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Turns out Oracle has a built-in global limitation of 4000 bytes, not characters, for a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;varchar&lt;/span&gt;&lt;/span&gt;2. See &lt;a href="http://download.oracle.com/docs/cd/B19306_01/server.102/b14220/datatype.htm#CNCPT012"&gt;http://download.oracle.com/docs/cd/B19306_01/server.102/b14220/datatype.htm#CNCPT01&lt;/a&gt;. Even if you specify 4000 characters, the 4000 byte limit overrides. Depending on the encoding a character can be and usually is greater than one byte.  Characters are typically 2 bytes. So my 2020-character string &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_4"&gt;actually&lt;/span&gt; occupies 4040 bytes. Thus, my insert was over the global limit.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But why does the error message use the term LONG? The LONG data type can be up to 2 gigabytes.  Evidently, this error message dates back to yesteryear when the only way to upload a character string longer than 4000 bytes to a table was to use a LONG column. Today, you can use a bunch of different LOB &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_5"&gt;data types&lt;/span&gt;, instead of LONG.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here's what really burns me: Googling "ORA-01461" provided no answers.  &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;Hmmm&lt;/span&gt;&lt;/span&gt;. What's up with that, my fellow Oracle programmers? Okay, so Oracle is not connecting the error message with the likely context in which you would see error message. Yes, that sucks. But what about our responsibilities? I haven't run across anyone on the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;interwebs&lt;/span&gt;&lt;/span&gt; complaining about how utterly lame and useless this error message is. If we don't complain with specificity and articulation, don't expect old-line software vendors such as Oracle to give a hoot.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3066698846289958752-4432156233827959606?l=techniana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techniana.blogspot.com/feeds/4432156233827959606/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3066698846289958752&amp;postID=4432156233827959606' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3066698846289958752/posts/default/4432156233827959606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3066698846289958752/posts/default/4432156233827959606'/><link rel='alternate' type='text/html' href='http://techniana.blogspot.com/2009/05/sometimes-we-get-support-documentation.html' title='Sorry. We Get the Support Documentation We Deserve'/><author><name>Perry Tribolet</name><uri>http://www.blogger.com/profile/07837250650589844167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3066698846289958752.post-2616367151912139193</id><published>2009-05-14T12:15:00.000-07:00</published><updated>2009-05-14T12:21:02.509-07:00</updated><title type='text'>Variables in Sql Developer</title><content type='html'>Ever find yourself having to remember how to to use variables in Oracle's handy tool Sql Developer? Me, I can never remember.  That's why this post is here. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There are two types of variables in the Oracle world: substitution variables and bind variables. It's important to remember that you can't use substitution variables in Sql Developer, but you can use bind variables. The syntax for bind variables is the following:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;variable custno number&lt;/div&gt;&lt;div&gt;exec : custno := 99&lt;/div&gt;&lt;div&gt;Select * from customer where customerId = : custno;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now I'll remember.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3066698846289958752-2616367151912139193?l=techniana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techniana.blogspot.com/feeds/2616367151912139193/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3066698846289958752&amp;postID=2616367151912139193' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3066698846289958752/posts/default/2616367151912139193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3066698846289958752/posts/default/2616367151912139193'/><link rel='alternate' type='text/html' href='http://techniana.blogspot.com/2009/05/variables-in-sql-developer.html' title='Variables in Sql Developer'/><author><name>Perry Tribolet</name><uri>http://www.blogger.com/profile/07837250650589844167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3066698846289958752.post-6404384085303054280</id><published>2009-04-23T14:11:00.001-07:00</published><updated>2009-09-10T12:08:07.841-07:00</updated><title type='text'>.Net Code Converters</title><content type='html'>Once in a while I find a useful code sample written in VB.Net.  Today I needed some code that essentially does the work of OracleCommandBuilder.DeriveParameters, but with some modifications. I found a code sample for just such a class, posted by someone named David Browne at &lt;a href="http://www.dotnetmonster.com/Uwe/Forum.aspx/dotnet-ado-net/116/Returning-Stored-Procedure-Parameters"&gt;http://www.dotnetmonster.com/Uwe/Forum.aspx/dotnet-ado-net/116/Returning-Stored-Procedure-Parameters&lt;/a&gt;. Unfortunately, Mr. Browne's code is in VB.Net, whereas I'm in the middle of writing an app in my preferred language, C#.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The best code converter I've found thus far is from Telerik at &lt;a href="http://converter.telerik.com/"&gt;http://converter.telerik.com&lt;/a&gt;. What's key about this converter is that it gives you very helpful translation error reporting for the inevitable copy-and-paste glitches that accompany any sizeable snippet gleaned from the web, such as inappropriate link breaks.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3066698846289958752-6404384085303054280?l=techniana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techniana.blogspot.com/feeds/6404384085303054280/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3066698846289958752&amp;postID=6404384085303054280' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3066698846289958752/posts/default/6404384085303054280'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3066698846289958752/posts/default/6404384085303054280'/><link rel='alternate' type='text/html' href='http://techniana.blogspot.com/2009/04/net-code-converters.html' title='.Net Code Converters'/><author><name>Perry Tribolet</name><uri>http://www.blogger.com/profile/07837250650589844167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3066698846289958752.post-1507808170279707142</id><published>2009-01-03T16:46:00.000-08:00</published><updated>2009-04-23T14:21:21.993-07:00</updated><title type='text'>Edit and Continue vs. Lambda Expressions</title><content type='html'>Microsoft &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;giveth&lt;/span&gt; and Microsoft &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;taketh&lt;/span&gt; away.  One of the amazing gifts of .Net 3.5  is lambda expressions. Once you start using them, it's hard to stop. Unfortunately, lambda expressions are not &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_2"&gt;compatible&lt;/span&gt; with another innovation: Visual Studio's Edit and Continue (or &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;EnC&lt;/span&gt;).  If you try to edit code with lambda expression while debugging in VS you get the following:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;"Modifying a 'method' which contains a lambda expression will prevent the debug session from continuing while Edit and Continue is enabled."&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;According to this &lt;a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1837812&amp;amp;SiteID=1"&gt;post&lt;/a&gt;,  &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;EnC&lt;/span&gt; is also incompatible with anonymous methods, a limitation present since .Net 2.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3066698846289958752-1507808170279707142?l=techniana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techniana.blogspot.com/feeds/1507808170279707142/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3066698846289958752&amp;postID=1507808170279707142' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3066698846289958752/posts/default/1507808170279707142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3066698846289958752/posts/default/1507808170279707142'/><link rel='alternate' type='text/html' href='http://techniana.blogspot.com/2009/01/edit-and-continue-vs-lambda-expressions.html' title='Edit and Continue vs. Lambda Expressions'/><author><name>Perry Tribolet</name><uri>http://www.blogger.com/profile/07837250650589844167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3066698846289958752.post-8880721679650294609</id><published>2008-08-15T14:13:00.000-07:00</published><updated>2008-08-15T16:22:36.073-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sql Server'/><category scheme='http://www.blogger.com/atom/ns#' term='Data Dude'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><title type='text'>Data Dude Has Trouble Diffing Views, Stored Procedures, and Functions</title><content type='html'>&lt;a href="http://msdn.microsoft.com/en-us/vsts2008/products/bb933747.aspx"&gt;Data Dude&lt;/a&gt;'s schema compare feature is a technical wonderment . . . when it works. It seems to be fine when comparing databases to each other. Unfortunately, when comparing a data dude "project" to a database created independently from Data Dude, Data Dude seems think that there is extra whitespace in its cached copy of the ddl for the database's view, function and stored procedure ddl.  What's going on here?  It turns out that Data Dude is very picky about what is considers properly written ddl definitions. Data Dude wants you to allow it to write all the ddl to the database!  Thus if you have created your database objects in SQL Server Management Studio you'll have to resync going from the Data Dude project back to the database after importing the schema from the database--a full round trip. You should be careful about backing up, as always.&lt;br /&gt;&lt;br /&gt;It's a shame such a great tool has such a lame bug.&lt;br /&gt;&lt;br /&gt;Note: Data Dude is the nickname for the Microsoft project formally known as &lt;a href="http://msdn.microsoft.com/en-us/vsts2008/products/bb933747.aspx"&gt;Visual Studio Team System 2008 Database Edition&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3066698846289958752-8880721679650294609?l=techniana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techniana.blogspot.com/feeds/8880721679650294609/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3066698846289958752&amp;postID=8880721679650294609' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3066698846289958752/posts/default/8880721679650294609'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3066698846289958752/posts/default/8880721679650294609'/><link rel='alternate' type='text/html' href='http://techniana.blogspot.com/2008/08/data-dude-has-trouble-diffing-views.html' title='Data Dude Has Trouble Diffing Views, Stored Procedures, and Functions'/><author><name>Perry Tribolet</name><uri>http://www.blogger.com/profile/07837250650589844167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3066698846289958752.post-5989777129704889752</id><published>2008-07-30T13:45:00.000-07:00</published><updated>2008-07-30T14:36:44.515-07:00</updated><title type='text'>Adding a File to a Setup Project in Visual Studio</title><content type='html'>I've had serious installer trouble after adding a C# project's content file to a Visual Studio Setup project. Try as I might, each time I tried to use a content-file output from another project I got a failed install. Repeated attempts to install gave me an erroneous error saying the service was already installed. This was because the failed install left an orphaned registry entry. Wonderful.  I had to use "sc delete" to get rid the registry entry.&lt;br /&gt;&lt;br /&gt;Lesson learned: just right click on the installer and select "add file."  I referenced a file in the other project in this manner and the installer project created a relative reference. Should do the trick.&lt;br /&gt;&lt;br /&gt;The reason for adding a content file to the install was to allow a perl script to be executed by the application.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3066698846289958752-5989777129704889752?l=techniana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techniana.blogspot.com/feeds/5989777129704889752/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3066698846289958752&amp;postID=5989777129704889752' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3066698846289958752/posts/default/5989777129704889752'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3066698846289958752/posts/default/5989777129704889752'/><link rel='alternate' type='text/html' href='http://techniana.blogspot.com/2008/07/adding-file-to-setup-project-in-visual.html' title='Adding a File to a Setup Project in Visual Studio'/><author><name>Perry Tribolet</name><uri>http://www.blogger.com/profile/07837250650589844167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3066698846289958752.post-9123406272768624888</id><published>2008-07-30T10:31:00.000-07:00</published><updated>2008-07-30T11:13:27.858-07:00</updated><title type='text'>SharePoint UI Madness</title><content type='html'>For most user-level activities, SharePoint's UI has typically been adequate.  The administrative features, however, continue to sport UI problems that are world class.  Someday I'll get around to making a list of my absolute most hated UI blunders in SharePoint. I think it would be best to wait for a day when I'm already in a bad mood because some of these problems seriously perturb me.&lt;br /&gt;&lt;br /&gt;Today I had to deal with one that really got me going: adding and editing user accounts for a SharePoint site.  You would think that the link to that functionality would just jump out at you once you navigate to site admin (called "settings" in SharePoint-speak) . Nope.  The appropriate link appears exclusively in the left sidebar of the "people" page for your site.  First navigate to the settings page of your site by using the "Site Actions" dropdown in the upper right hand corner of the page. Then click on "People and Group" link under the "User and Permissions" list. On the ensuing page,  People.aspx, look to the left nav for the bolded words "All People."  Once you click this link, you'll see all the "people."  Thus, in getting to this page, to do something really basic, we've gone through three different navigation schemes!&lt;br /&gt;&lt;br /&gt;Below is a screen shot showing the "All People" link.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_TyfoHDL02pM/SJCqH7sZ3jI/AAAAAAAAAJs/b1GS-5rkXC8/s1600-h/All+people.bmp"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_TyfoHDL02pM/SJCqH7sZ3jI/AAAAAAAAAJs/b1GS-5rkXC8/s400/All+people.bmp" alt="" id="BLOGGER_PHOTO_ID_5228866220636888626" 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/3066698846289958752-9123406272768624888?l=techniana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techniana.blogspot.com/feeds/9123406272768624888/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3066698846289958752&amp;postID=9123406272768624888' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3066698846289958752/posts/default/9123406272768624888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3066698846289958752/posts/default/9123406272768624888'/><link rel='alternate' type='text/html' href='http://techniana.blogspot.com/2008/07/sharepoint-ui-madness.html' title='SharePoint UI Madness'/><author><name>Perry Tribolet</name><uri>http://www.blogger.com/profile/07837250650589844167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_TyfoHDL02pM/SJCqH7sZ3jI/AAAAAAAAAJs/b1GS-5rkXC8/s72-c/All+people.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3066698846289958752.post-4259951777917960751</id><published>2007-08-15T12:05:00.000-07:00</published><updated>2007-08-23T20:03:54.395-07:00</updated><title type='text'>Parsing Command Line Parameters in VC++</title><content type='html'>One of the most confounding things in the C/C++ programming world is the unnaturalness of C-style "strings." I put quotation marks around "strings," because when you're C-stylin', your dealing actually with arrays of chars, not string-like objects. Chances are if you're coding in C++ what you really want are STL strings, not arrays of chars.  This confusing situation is a much bigger problem for novices than old hands, but in either case it's still a bit awkward.  Unless you're also using .NET (CLI), arrays of chars are unavoidable when parsing command line parameters--a feature that most sophisticated applications require.&lt;br /&gt;&lt;br /&gt;If you're using VC++ (versions VC++2003, VC++2005, or VC++2008) as your IDE, your "main" function, which is actually "t_main" in VC++, confronts you not with char* but _TCHAR*, making things even more cryptic. (The "t" and "T" characters refer to the configurability of VC++2008 to handle unicode or not, depending whether the _UNICODE is defined at compilation.  But you knew that.) I'm really puzzled about not yet seeing a book author take on this common chore.  You could have a pretty annoying Google-session trying get sample code to parse command line parameters with this version of the main function.&lt;br /&gt;&lt;br /&gt;Most Google group queries I found on this topic tend to focus on conversion functions.  Though I almost always love a clever, succinct function to do my dirty work, in this case I may pass, because it only takes a few lines of memorable code to slip the chars into a handy vector of strings. In this case, we use wstring (for "wide string") instead of string. The do-while below adds a de-referenced pointer to wchar_t (the "wide" version of char)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    wstring a_wstring;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    do a_wstring += *argv[i];&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    while(*argv[i]++);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The key thing to realize is that wstring knows what do with char's.&lt;br /&gt;&lt;br /&gt;Here's a short program that stores the parameters in a vector and also displays them to the&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    #include "stdafx.h"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    #include &lt;iostream&gt;&lt;/iostream&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    #include &lt;string&gt;&lt;/string&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    #include &lt;vector&gt;&lt;/vector&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    using namespace std;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    int _tmain(int argc, _TCHAR* argv[])&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        vector&lt;wstring&gt; args;&lt;/wstring&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        for(int i =0;i&amp;lt;argc;i++)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        wstring a_wstring;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        do a_wstring += *argv[i];&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        while(*argv[i]++);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        args.push_back(a_wstring);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        cout &lt;&lt; i&lt;&lt;"\n";&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        wcout &lt;&lt; args[i] &lt;&lt; "\n";&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        return 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You should be able to do just about whatever you want with the parameters after putting them into a vector of wstrings.&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3066698846289958752-4259951777917960751?l=techniana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techniana.blogspot.com/feeds/4259951777917960751/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3066698846289958752&amp;postID=4259951777917960751' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3066698846289958752/posts/default/4259951777917960751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3066698846289958752/posts/default/4259951777917960751'/><link rel='alternate' type='text/html' href='http://techniana.blogspot.com/2007/08/parsing-command-line-parameters-in.html' title='Parsing Command Line Parameters in VC++'/><author><name>Perry Tribolet</name><uri>http://www.blogger.com/profile/07837250650589844167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>
