<?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-6802992731660752198</id><updated>2012-01-27T15:55:08.632-08:00</updated><category term='install'/><category term='VBScript'/><category term='annoyances'/><category term='setup'/><category term='Microsoft'/><category term='SQL binary varchar ascii text'/><category term='Email'/><category term='VirtualBox'/><category term='SQL Server'/><category term='Visual Studio 2005'/><category term='hash'/><category term='fonts'/><category term='DataGrid'/><category term='virus malware microsoft windows'/><category term='VB.NET'/><category term='Windows'/><category term='date'/><category term='Widescreen Monitors'/><category term='compare files'/><category term='marquee'/><category term='continuous scroller'/><category term='Flash'/><category term='Hosting'/><category term='General'/><category term='IE7 Unicode Entities Character'/><category term='jargon'/><category term='SQL Duplicates'/><category term='web server'/><category term='conditional compilation vb.net c#'/><category term='Facebook'/><category term='IFrame Javascript'/><category term='Verification'/><category term='prototype.js'/><category term='jQuery'/><category term='MySQL'/><category term='flash online sketching'/><category term='GridView'/><category term='CAPTCHA'/><category term='file compare'/><category term='ASP'/><category term='UML'/><category term='Stored Procedures'/><category term='Code Generation Settings'/><category term='RegEx'/><category term='format'/><category term='MySpace'/><category term='VB'/><category term='PHP'/><category term='Optimized Code Generation setting'/><category term='ApplicationBlocks'/><category term='sql'/><category term='collations'/><category term='scroller'/><category term='AJAX JavaScript'/><category term='OOP'/><category term='hash code'/><category term='&quot;social networking&quot;'/><category term='T-SQL'/><category term='JavaScript'/><category term='SoftwareTesting Testing'/><category term='continuous marquee'/><category term='web design'/><category term='Windows Forms Designer'/><category term='Excel'/><title type='text'>Iteratively Perfecting</title><subtitle type='html'>A Software Developer's notes along the way</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Henry</name><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>83</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6802992731660752198.post-4930206967354006574</id><published>2012-01-12T14:48:00.001-08:00</published><updated>2012-01-12T14:48:48.836-08:00</updated><title type='text'>JQuery Version check</title><content type='html'>In web dev tools console (for whatever browser you are using), just issue the following command:&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint lang-js" style="background-color: white; border-bottom-style: none; border-color: initial; border-image: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 3px; border-right-style: none; border-top-style: none; border-width: initial; color: #333333; line-height: 20px; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em; text-align: left;"&gt;&lt;span class="pln" style="color: black;"&gt;$&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;().&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;jquery&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&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/6802992731660752198-4930206967354006574?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/4930206967354006574/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=4930206967354006574' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/4930206967354006574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/4930206967354006574'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2012/01/jquery-version-check.html' title='JQuery Version check'/><author><name>almostlost</name><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-6802992731660752198.post-821096934513475037</id><published>2011-11-30T11:50:00.001-08:00</published><updated>2012-01-26T10:45:25.515-08:00</updated><title type='text'>LINQ to SQL HA HA HA</title><content type='html'>When contemplating the motivation for doing away with the impedance created between an Object Oriented app and a Relational Database, and thus ultimately LINQ and Entity Framework, I would struggle to feel convinced (I'm equally comfortable writing T-SQL in Management Studio as I am writing VB and C# in Visual Studio).&lt;br /&gt;&lt;br /&gt;If anything stood out in my mind as inconvenient, it would certainly be the tedious and redundant variable/field names when writing queries. &amp;nbsp;I was always adept at solving such problems with a good text editor at my side that could use vertical highlighting and Regular Expressions (such as Textpad), so this wasn't that big a deal. &amp;nbsp;But nonetheless, I found (and am still finding) the 2008 SQL Server Management Studio's Intellisense capabilities (FINALLY!!) to be amazingly helpful. &amp;nbsp;So helpful that, if I did have any desires to lower the impedance between a OOP architected app and an RDBMS, the 2008 tool would have satisfied it.&lt;br /&gt;&lt;br /&gt;So, this is the irony. &amp;nbsp;The tool's improvements were released the SAME TIME as the company (Microsoft) was pushing LINQ to SQL and Entity Framework. &lt;br /&gt;&lt;br /&gt;And this seems a bit absurd to me.&lt;br /&gt;&lt;br /&gt;But wait, there's more...&lt;span style="background-color: white; font-family: 'Lucida Grande', 'Trebuchet MS', Verdana, Helvetica, Arial, sans-serif; font-size: 13px; line-height: 17px; text-align: left;"&gt;&lt;a href="http://blogs.msdn.com/b/adonet/archive/2008/10/29/update-on-linq-to-sql-and-linq-to-entities-roadmap.aspx"&gt;“LINQ to SQL is dead!”&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-821096934513475037?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/821096934513475037/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=821096934513475037' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/821096934513475037'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/821096934513475037'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2011/11/linq-to-sql-ha-ha-ha.html' title='LINQ to SQL HA HA HA'/><author><name>almostlost</name><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-6802992731660752198.post-9157525515392171270</id><published>2011-09-26T15:54:00.000-07:00</published><updated>2011-09-26T15:54:48.782-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DataGrid'/><category scheme='http://www.blogger.com/atom/ns#' term='GridView'/><title type='text'>1.x DataGrid, 2.0 GridView, Declarative Syntax in HTML portion...</title><content type='html'>"&lt;span class="Apple-style-span" style="font-family: 'Segoe UI', Verdana, Arial; font-size: 13px;"&gt;In Microsoft ASP.NET 1.x, one of the most commonly used ASP.NET Web controls is the&amp;nbsp;&lt;strong&gt;DataGrid&lt;/strong&gt;. The&amp;nbsp;&lt;strong&gt;DataGrid&lt;/strong&gt;&amp;nbsp;control makes displaying data on an ASP.NET page a breeze: simply drag and drop the&amp;nbsp;&lt;strong&gt;DataGrid&lt;/strong&gt;&amp;nbsp;onto your ASP.NET page, specify the columns and formatting, and write just a few lines of source code to retrieve and bind the data to the&amp;nbsp;&lt;strong&gt;DataGrid&lt;/strong&gt;. With a bit more effort and code, you could enable the end user to page, sort, and even edit the data within the&amp;nbsp;&lt;strong&gt;DataGrid&lt;/strong&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Segoe UI', Verdana, Arial; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Segoe UI', Verdana, Arial; font-size: 13px;"&gt;While the&amp;nbsp;&lt;strong&gt;DataGrid&lt;/strong&gt;&amp;nbsp;was a huge improvement over pre-ASP.NET techniques for displaying data, it still suffered some limitations. For starters, binding any data to a&amp;nbsp;&lt;strong&gt;DataGrid&lt;/strong&gt;&amp;nbsp;required some code writing, and often repetitive code at that. Furthermore, utilizing any of the&amp;nbsp;&lt;strong&gt;DataGrid&lt;/strong&gt;'s more advanced features—handling deletes, allowing for editing of the underlying data, providing pagination, or sorting support—required additional code and time. Granted, the code for many of these additions was not terribly complex or lengthy, but any time code is written the possibility of new bugs, typos, or errors is introduced.&lt;br /&gt;&lt;br /&gt;ASP.NET 2.0 fixes the problems of the&amp;nbsp;&lt;strong&gt;DataGrid&lt;/strong&gt;&amp;nbsp;through a set of data source controls designed to encapsulate data that can be bound to data Web controls, and a replacement for the&amp;nbsp;&lt;strong&gt;DataGrid&lt;/strong&gt;—the&amp;nbsp;&lt;strong&gt;GridView&lt;/strong&gt;&amp;nbsp;control. To access data in ASP.NET 1.x, developers had to write code; with the data source controls, however, data can be accessed through declarative syntax in the HTML portion of the ASP.NET Web page. Like other ASP.NET controls, the data source controls can be added to a page by simply dragging and dropping them from the Microsoft Visual Studio Toolbox onto the ASP.NET page Design view. Additionally, the specific data to retrieve can be specified entirely through the Design view. Once a data source control has been configured, it can be bound to a data Web control, such as the&amp;nbsp;&lt;strong&gt;GridView&lt;/strong&gt;, by setting the data Web control's&amp;nbsp;&lt;strong&gt;DataSourceID&lt;/strong&gt;&amp;nbsp;property to the&amp;nbsp;&lt;strong&gt;ID&lt;/strong&gt;&amp;nbsp;of the data source control. That's all there is to it—no code necessary!"&lt;br /&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa479340.aspx"&gt;http://msdn.microsoft.com/en-us/library/aa479340.aspx&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-9157525515392171270?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/9157525515392171270/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=9157525515392171270' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/9157525515392171270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/9157525515392171270'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2011/09/1x-datagrid-20-gridview-declarative.html' title='1.x DataGrid, 2.0 GridView, Declarative Syntax in HTML portion...'/><author><name>almostlost</name><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-6802992731660752198.post-7940475689255163253</id><published>2011-09-20T10:47:00.000-07:00</published><updated>2011-09-20T10:47:43.163-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IFrame Javascript'/><title type='text'>Basic IFrame Use with JavaScript</title><content type='html'>Here is the simplest example:&lt;br /&gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;lt;iframe id="smedly" src="http://www.google.com"&amp;gt;&amp;lt;/iframe&amp;gt;&lt;br /&gt;&amp;lt;input type="button" onclick="dothis();" value="Yahoo"&amp;gt;&lt;br /&gt;&amp;lt;script&amp;gt;&lt;br /&gt;function dothis(){&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;document.getElementById('smedly').setAttribute('src','http://www.yahoo.com');&lt;br /&gt;}&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&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/6802992731660752198-7940475689255163253?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/7940475689255163253/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=7940475689255163253' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/7940475689255163253'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/7940475689255163253'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2011/09/basic-iframe-use-with-javascript.html' title='Basic IFrame Use with JavaScript'/><author><name>almostlost</name><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-6802992731660752198.post-6298317092340643082</id><published>2011-08-05T18:19:00.000-07:00</published><updated>2011-08-05T18:19:37.710-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>jQuery toggleClass with Visibility</title><content type='html'>I'm not sure why jQuery uses the CSS property "display" to toggle hide and show, since "display" when set to "none" (which jQuery.hide() does) removes the space it takes up, and if you have elements adjacent, they're going to move around.&lt;br /&gt;&lt;br /&gt;The workaround is to use toggleClass with a class you create which is used exclusively for setting "visibility" to "hidden" (instead of "visible").  When an element is "hidden", it is still there taking up space, keeping other elements properly aligned, it just is invisible.&lt;br /&gt;&lt;br /&gt;The typical example of the use case is when you have a blank area that when hovered over displays some tool icons, or a delete X.&lt;br /&gt;&lt;br /&gt;However, you might run into a confusing problem if you try this without giving the element to be toggled on and off the invisible class to begin with.  &lt;br /&gt;Ex.:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;//style&lt;br /&gt;.hidden{&lt;br /&gt;     visibility: hidden;&lt;br /&gt;}&lt;br /&gt;//HTML&lt;br /&gt;&amp;lt;span class='hidden del'&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt;......&lt;br /&gt;//jQuery&lt;br /&gt;$('.editbay').hover(function(){&lt;br /&gt;    $(this).find('span').toggleClass('hidden');&lt;br /&gt;});&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-6298317092340643082?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/6298317092340643082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=6298317092340643082' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/6298317092340643082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/6298317092340643082'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2011/08/jquery-toggleclass-with-visibility.html' title='jQuery toggleClass with Visibility'/><author><name>almostlost</name><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-6802992731660752198.post-5704988340288248290</id><published>2011-07-29T00:17:00.001-07:00</published><updated>2011-07-29T00:21:44.107-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><title type='text'>Firebug musts</title><content type='html'>for(x in console)&lt;br /&gt;{&lt;br /&gt;console.log(console[x].name)&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;console.dir(console);&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-5704988340288248290?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/5704988340288248290/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=5704988340288248290' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/5704988340288248290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/5704988340288248290'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2011/07/firebug-musts.html' title='Firebug musts'/><author><name>almostlost</name><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-6802992731660752198.post-1160162126020154650</id><published>2010-11-14T04:50:00.000-08:00</published><updated>2010-11-14T05:00:07.446-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='CAPTCHA'/><category scheme='http://www.blogger.com/atom/ns#' term='Email'/><category scheme='http://www.blogger.com/atom/ns#' term='Verification'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Forms Designer'/><title type='text'>PHP: Effortless CAPTCHA</title><content type='html'>Include the following code in your form action reciever:&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&lt;div style="background-color: #fce5cd;"&gt;&amp;lt;?&lt;/div&gt;&lt;div style="background-color: #fce5cd;"&gt;$verif_box = $_POST["verif_box"];&lt;/div&gt;&lt;div style="background-color: #fce5cd;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(md5($verif_box).'a4xn' == $_COOKIE['tntcon']){&lt;/div&gt;&lt;div style="background-color: #fce5cd;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //they got the CAPTCHA correct&lt;/div&gt;&lt;div style="background-color: #fce5cd;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; setcookie('tntcon',''); &lt;/div&gt;&lt;div style="background-color: #fce5cd;"&gt;&amp;nbsp;&amp;nbsp; }else{&lt;/div&gt;&lt;div style="background-color: #fce5cd;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //they did not get CAPTCHA correct&lt;/div&gt;&lt;div style="background-color: #fce5cd;"&gt;&amp;nbsp;&amp;nbsp; }&lt;/div&gt;&lt;div style="background-color: #fce5cd;"&gt;?&amp;gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here is a snippet of the part of the form that displays the CAPTCHA:&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: #f6b26b;"&gt;&amp;lt;tr&amp;gt;&lt;/div&gt;&lt;div style="background-color: #f6b26b;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: #f6b26b;"&gt;&amp;lt;td valign="top"&amp;gt;Type number you see:&amp;lt;/td&amp;gt;&amp;lt;td valign="top"&amp;gt;&lt;/div&gt;&lt;div style="background-color: #f6b26b;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: #f6b26b;"&gt;&amp;lt;input name="verif_box" type="text" id="verif_box" style="padding:2px; border:1px solid #CCCCCC; width:180px; height:14px;font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px;"/&amp;gt;&lt;/div&gt;&lt;div style="background-color: #f6b26b;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: #f6b26b;"&gt;&amp;lt;img src="verificationImage.php?&amp;lt;?php echo rand(0,9999);?&amp;gt;" alt="verification image, type it in the box" width="50" height="24" align="absbottom" /&amp;gt;&amp;lt;br /&amp;gt;&lt;/div&gt;&lt;div style="background-color: #f6b26b;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: #f6b26b;"&gt;&amp;lt;!-- if the variable "wrong_code" is sent from previous page then display the error field --&amp;gt;&lt;/div&gt;&lt;div style="background-color: #f6b26b;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: #f6b26b;"&gt;&amp;lt;?php if(isset($_GET['wrong_code'])){?&amp;gt;&lt;/div&gt;&lt;div style="background-color: #f6b26b;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: #f6b26b;"&gt;&amp;lt;div style="border:1px solid #990000; background-color:#D70000; color:#FFFFFF; padding:4px; padding-left:6px;width:295px;"&amp;gt;Wrong verification code&amp;lt;/div&amp;gt;&amp;lt;br /&amp;gt; &lt;/div&gt;&lt;div style="background-color: #f6b26b;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: #f6b26b;"&gt;&amp;lt;?php ;}?&amp;gt;&lt;/div&gt;&lt;div style="background-color: #f6b26b;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: #f6b26b;"&gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;        &lt;/div&gt;&lt;div style="background-color: #f6b26b;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: #f6b26b;"&gt;&amp;lt;INPUT TYPE="SUBMIT" NAME="submit" VALUE="Submit"&amp;gt;&lt;/div&gt;&lt;div style="background-color: #f6b26b;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: #f6b26b;"&gt;&amp;lt;/td&amp;gt;&lt;/div&gt;&lt;div style="background-color: #f6b26b;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: #f6b26b;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Contents of verificationImage.php:&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;div style="background-color: #fce5cd;"&gt;// ----------------------------------------- &lt;/div&gt;&lt;div style="background-color: #fce5cd;"&gt;//&amp;nbsp; The Web Help .com&lt;/div&gt;&lt;div style="background-color: #fce5cd;"&gt;// ----------------------------------------- &lt;/div&gt;&lt;div style="background-color: #fce5cd;"&gt;&amp;lt;?&lt;/div&gt;&lt;div style="background-color: #fce5cd;"&gt;header('Content-type: image/jpeg');&lt;/div&gt;&lt;div style="background-color: #fce5cd;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: #fce5cd;"&gt;$width = 50;&lt;/div&gt;&lt;div style="background-color: #fce5cd;"&gt;$height = 24;&lt;/div&gt;&lt;div style="background-color: #fce5cd;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: #fce5cd;"&gt;$my_image = imagecreatetruecolor($width, $height);&lt;/div&gt;&lt;div style="background-color: #fce5cd;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: #fce5cd;"&gt;imagefill($my_image, 0, 0, 0xFFFFFF);&lt;/div&gt;&lt;div style="background-color: #fce5cd;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: #fce5cd;"&gt;// add noise&lt;/div&gt;&lt;div style="background-color: #fce5cd;"&gt;for ($c = 0; $c &amp;lt; 40; $c++){&lt;/div&gt;&lt;div style="background-color: #fce5cd;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $x = rand(0,$width-1);&lt;/div&gt;&lt;div style="background-color: #fce5cd;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $y = rand(0,$height-1);&lt;/div&gt;&lt;div style="background-color: #fce5cd;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; imagesetpixel($my_image, $x, $y, 0x000000);&lt;/div&gt;&lt;div style="background-color: #fce5cd;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/div&gt;&lt;div style="background-color: #fce5cd;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: #fce5cd;"&gt;$x = rand(1,10);&lt;/div&gt;&lt;div style="background-color: #fce5cd;"&gt;$y = rand(1,10);&lt;/div&gt;&lt;div style="background-color: #fce5cd;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: #fce5cd;"&gt;$rand_string = rand(1000,9999);&lt;/div&gt;&lt;div style="background-color: #fce5cd;"&gt;imagestring($my_image, 5, $x, $y, $rand_string, 0x000000);&lt;/div&gt;&lt;div style="background-color: #fce5cd;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: #fce5cd;"&gt;setcookie('tntcon',(md5($rand_string).'a4xn'));&lt;/div&gt;&lt;div style="background-color: #fce5cd;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: #fce5cd;"&gt;imagejpeg($my_image);&lt;/div&gt;&lt;div style="background-color: #fce5cd;"&gt;imagedestroy($my_image);&lt;/div&gt;&lt;div style="background-color: #fce5cd;"&gt;?&amp;gt;&lt;/div&gt;&lt;div style="background-color: #fce5cd;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-1160162126020154650?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/1160162126020154650/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=1160162126020154650' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/1160162126020154650'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/1160162126020154650'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2010/11/php-effortless-captcha.html' title='PHP: Effortless CAPTCHA'/><author><name>Henry</name><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><entry><id>tag:blogger.com,1999:blog-6802992731660752198.post-1843886526618575072</id><published>2010-11-14T04:41:00.000-08:00</published><updated>2010-11-14T04:41:31.001-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='RegEx'/><title type='text'>PHP: The Ultimate E-mail Verification Routine</title><content type='html'>&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;function validEmail($email)&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;{&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;$isValid = true;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;$atIndex = strrpos($email, "@");&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (is_bool($atIndex) &amp;amp;&amp;amp; !$atIndex)&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;$isValid = false;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;else&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;$domain = substr($email, $atIndex+1);&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;$local = substr($email, 0, $atIndex);&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;$localLen = strlen($local);&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;$domainLen = strlen($domain);&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if ($localLen &amp;lt; 1 || $localLen &amp;gt; 64)&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #e69138;"&gt;// local part length exceeded&lt;/span&gt;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;$isValid = false;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;else if ($domainLen &amp;lt; 1 || $domainLen &amp;gt; 255)&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #e69138;"&gt;// domain part length exceeded&lt;/span&gt;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;$isValid = false;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;else if ($local[0] == '.' || $local[$localLen-1] == '.')&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #e69138;"&gt;// local part starts or ends with '.'&lt;/span&gt;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;$isValid = false;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;else if (preg_match('/\\.\\./', $local))&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &lt;span style="color: #e69138;"&gt;&amp;nbsp;// local part has two consecutive dots&lt;/span&gt;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;$isValid = false;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;else if (!preg_match('/^[A-Za-z0-9\\-\\.]+$/', $domain))&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #e69138;"&gt;// character not valid in domain part&lt;/span&gt;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;$isValid = false;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;else if (preg_match('/\\.\\./', $domain))&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #e69138;"&gt;// domain part has two consecutive dots&lt;/span&gt;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;$isValid = false;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;else if&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;(!preg_match('/^(\\\\.|[A-Za-z0-9!#%&amp;amp;`_=\\/$\'*+?^{}|~.-])+$/',&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;str_replace("\\\\","",$local)))&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #e69138;"&gt;// character not valid in local part unless &lt;/span&gt;&lt;/span&gt;&lt;br style="color: #e69138; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="color: #e69138; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;// local part is quoted&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (!preg_match('/^"(\\\\"|[^"])+"$/',&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;str_replace("\\\\","",$local)))&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;$isValid = false;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if ($isValid &amp;amp;&amp;amp; !(checkdnsrr($domain,"MX") || checkdnsrr($domain,"A")))&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #e69138;"&gt;// domain not found in DNS&lt;/span&gt;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;$isValid = false;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; return $isValid;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;}&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-1843886526618575072?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/1843886526618575072/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=1843886526618575072' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/1843886526618575072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/1843886526618575072'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2010/11/php-ultimate-e-mail-verification.html' title='PHP: The Ultimate E-mail Verification Routine'/><author><name>Henry</name><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-6802992731660752198.post-6218306515856655487</id><published>2010-11-14T04:31:00.000-08:00</published><updated>2010-11-14T04:31:58.768-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>PHP and MySql  Basics: Insert Query</title><content type='html'>&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;//open conn to db&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="color: blue;"&gt;mysql_connect&lt;/span&gt;('dbhostserver','dbusername','password') or die("Failure to connect to db");&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="color: blue;"&gt;mysql_select_db&lt;/span&gt;('dbname');&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;$as_value1 = &lt;span style="color: blue;"&gt;addslashes&lt;/span&gt;($_POST['value1']); &lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="background-color: #f3f3f3; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;$tr_value1 = &lt;span style="color: blue;"&gt;trim&lt;/span&gt;($as_value1);&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;$as_value2 = &lt;span style="color: blue;"&gt;addslashes&lt;/span&gt;($_POST['value2']); &lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;$tr_value2 = &lt;span style="color: blue;"&gt;trim&lt;/span&gt;($as_value2); &lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;$query = "INSERT INTO table(value1, value2) VALUES ('$tr_value1', '$tr_value2')";&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;$result = &lt;span style="color: blue;"&gt;mysql_query&lt;/span&gt;($query);&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;if(&lt;span style="color: blue;"&gt;mysql_affected_rows&lt;/span&gt;()==1){&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; $message = "Successfully added to db.";&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;}else{&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; $message = "Could not add to db.";&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&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/6802992731660752198-6218306515856655487?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/6218306515856655487/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=6218306515856655487' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/6218306515856655487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/6218306515856655487'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2010/11/php-and-mysql-basics-insert-query.html' title='PHP and MySql  Basics: Insert Query'/><author><name>Henry</name><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-6802992731660752198.post-6576295535084597666</id><published>2010-11-14T04:22:00.000-08:00</published><updated>2010-11-14T04:35:17.632-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>PHP Basics: Connect to MySql and Query</title><content type='html'>&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;//open conn to db&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;mysql_connect&lt;/span&gt;('dbhostserver','dbusername','password') or die("Failure to connect to db");&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;mysql_select_db&lt;/span&gt;('dbname');&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;$query = "SELECT stuff FROM tablename";&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;$result = &lt;span style="color: blue;"&gt;mysql_query&lt;/span&gt;($query);&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;while($name_row = &lt;span style="color: blue;"&gt;mysql_fetch_row&lt;/span&gt;($result)){&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;print&lt;/span&gt;("$name_row[0]&amp;lt;BR&amp;gt;\n");&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-6576295535084597666?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/6576295535084597666/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=6576295535084597666' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/6576295535084597666'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/6576295535084597666'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2010/11/php-basics-connect-to-mysql-and-query.html' title='PHP Basics: Connect to MySql and Query'/><author><name>Henry</name><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-6802992731660752198.post-6377860220239395883</id><published>2010-11-11T11:07:00.001-08:00</published><updated>2010-11-11T11:30:28.730-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='T-SQL'/><title type='text'>Transact SQL (T-SQL) Basics</title><content type='html'>&lt;span style="font-weight:bold;"&gt;DECLARE and SET Varibales&lt;/span&gt;&lt;br /&gt;DECLARE @Mojo int&lt;br /&gt;SET @Mojo = 1&lt;br /&gt;SELECT @Mojo = Column FROM Table WHERE id=1&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;IF / ELSE IF / ELSE Statement&lt;/span&gt;&lt;br /&gt;IF @Mojo &lt; 1&lt;br /&gt;   BEGIN&lt;br /&gt;                'do something&lt;br /&gt;   END&lt;br /&gt;ELSE IF @Mojo = 1&lt;br /&gt;  BEGIN&lt;br /&gt;                'do something&lt;br /&gt;   END&lt;br /&gt;ELSE&lt;br /&gt;   BEGIN&lt;br /&gt;                'do something&lt;br /&gt;   END&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;CASE Statement&lt;/span&gt;&lt;br /&gt;SELECT Day = CASE &lt;br /&gt;    WHEN (DateAdded IS NULL) THEN 'Unknown'&lt;br /&gt;    WHEN (DateDiff(day, DateAdded, getdate()) = 0) THEN 'Today'&lt;br /&gt;    WHEN (DateDiff(day, DateAdded, getdate()) = 1) THEN 'Yesterday'&lt;br /&gt;    WHEN (DateDiff(day, DateAdded, getdate()) = -1) THEN 'Tomorrow'&lt;br /&gt;    ELSE DATENAME(dw , DateAdded) &lt;br /&gt;END&lt;br /&gt;FROM Table&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-6377860220239395883?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/6377860220239395883/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=6377860220239395883' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/6377860220239395883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/6377860220239395883'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2010/11/transact-sql-t-sql-basics.html' title='Transact SQL (T-SQL) Basics'/><author><name>almostlost</name><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-6802992731660752198.post-3470944475806611189</id><published>2010-11-11T11:01:00.000-08:00</published><updated>2010-11-11T11:06:12.935-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Duplicates'/><title type='text'>SQL: Finding DUPLICATES</title><content type='html'>For some odd reason, I have it stuck in my mind that you need to use JOINS to find duplicates (maybe it was something that Access made you do way back in the day).  I know there is SOMETHING out there that seems like it would be very easy to do in SQL but in fact involves duplicating the table in an alias.  But finding duplicates isn't it.  &lt;br /&gt;&lt;br /&gt;SELECT username, &lt;br /&gt; COUNT(username) AS NumberOfOccurences&lt;br /&gt;FROM users&lt;br /&gt;GROUP BY username&lt;br /&gt;HAVING ( COUNT(username) &gt; 1 )&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-3470944475806611189?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/3470944475806611189/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=3470944475806611189' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/3470944475806611189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/3470944475806611189'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2010/11/sql-finding-duplicates.html' title='SQL: Finding DUPLICATES'/><author><name>almostlost</name><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-6802992731660752198.post-6470808757863373641</id><published>2010-10-26T13:16:00.000-07:00</published><updated>2010-10-26T13:16:29.337-07:00</updated><title type='text'>Trying Out Amazon Associates</title><content type='html'>For the first time I'm going to try and monetize this site.  &lt;iframe src="http://rcm.amazon.com/e/cm?t=iterativel-20&amp;o=1&amp;p=8&amp;l=bpl&amp;asins=0596520832&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr" style="align:left;padding-top:5px;width:131px;height:245px;padding-right:10px;"align="left" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;iframe src="http://rcm.amazon.com/e/cm?t=iterativel-20&amp;o=1&amp;p=8&amp;l=bpl&amp;asins=0596526849&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr" style="align:left;padding-top:5px;width:131px;height:245px;padding-right:10px;"align="left" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-6470808757863373641?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/6470808757863373641/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=6470808757863373641' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/6470808757863373641'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/6470808757863373641'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2010/10/trying-out-amazon-associates.html' title='Trying Out Amazon Associates'/><author><name>Henry</name><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-6802992731660752198.post-6387271165699405282</id><published>2010-10-20T09:19:00.000-07:00</published><updated>2010-10-20T09:22:59.327-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>Old School WScript to Make Files Read-Write</title><content type='html'>If you frequently need to change the file attributes of one or more files from "Read Only" to "Read and Write" on Windows (like I have to do when dealing with the limitation of Visual SourceSafe), this quickie script will do the trick.  Create a .vbs file with the following:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Set objFSO = CreateObject("Scripting.FileSystemObject")&lt;br /&gt;Dim arrayFileObjects(1)&lt;br /&gt;set arrayFileObjects(0) = objFSO.GetFile("C:\BudgetTracker\App.config")&lt;br /&gt;set arrayFileObjects(1) =  objFSO.GetFile("C:\ApeSim\App.config")&lt;br /&gt;&lt;br /&gt;for counter = 0 to ubound(arrayFileObjects)&lt;br /&gt;   if arrayFileObjects(counter).Attributes AND 1 then&lt;br /&gt;        'read-only, so set to read/write&lt;br /&gt;         arrayFileObjects(counter).Attributes =  arrayFileObjects(counter).Attributes XOR 1&lt;br /&gt;         Wscript.echo ("one changed")&lt;br /&gt;   else&lt;br /&gt;       Wscript.echo ("one already ok")&lt;br /&gt;   End If&lt;br /&gt; &lt;br /&gt;next&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-6387271165699405282?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/6387271165699405282/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=6387271165699405282' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/6387271165699405282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/6387271165699405282'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2010/10/old-school-wscript-to-make-files-read.html' title='Old School WScript to Make Files Read-Write'/><author><name>almostlost</name><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-6802992731660752198.post-7256787689027998860</id><published>2010-10-19T12:14:00.001-07:00</published><updated>2010-10-19T12:20:36.032-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB.NET'/><title type='text'>VB.NET, DB Nulls, and strings</title><content type='html'>If you are dealing with a database that isn't enforcing "no nulls" then you may frequently get nulls back when you are expecting a string.  Although you could do this:&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;if dr.Item("middle_name") is DBNull.Value then&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" &gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" &gt;&lt;span class="Apple-style-span" &gt;txtMiddleName.Text = "&lt;/span&gt;"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It is easier to just write:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" &gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" &gt;txtMiddleName.Text = dr.Item("middle_name")&lt;/span&gt;&lt;span class="Apple-style-span"&gt;.&lt;/span&gt;&lt;span class="Apple-style-span" &gt;ToString&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;because adding "ToString" will convert nulls to "" empty strings.&lt;/div&gt;&lt;div&gt;If you omit the "ToString", any nulls will generate an error (converting a Null to a String).&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/6802992731660752198-7256787689027998860?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/7256787689027998860/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=7256787689027998860' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/7256787689027998860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/7256787689027998860'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2010/10/vbnet-db-nulls-and-strings.html' title='VB.NET, DB Nulls, and strings'/><author><name>almostlost</name><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-6802992731660752198.post-6865651472723016644</id><published>2010-10-18T11:13:00.000-07:00</published><updated>2010-10-18T11:22:17.297-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><title type='text'>INSERT with SELECT</title><content type='html'>The syntax for inserting a new row (or record) into a table using data from a select is not very intuitive.&lt;br /&gt;&lt;br /&gt;The INSERT syntax is:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;INSERT tblFred(field1, field2, field3) VALUES( 'ape', 436, 0)&lt;br /&gt;&lt;/span&gt;or if you are insert values for all columns in order:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;INSERT tblFRED VALUES (23, 'ape', 436, 0)&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;But to use the INSERT with a SELECT, you omit the VALUES( ) phrase:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;INSERT tblFred(field1, field2, field3) SELECT fieldA, fieldB, fieldC FROM tblSmedly&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;or&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;INSERT tblFred SELECT * FROM tblSmedly&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-6865651472723016644?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/6865651472723016644/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=6865651472723016644' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/6865651472723016644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/6865651472723016644'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2010/10/insert-with-select.html' title='INSERT with SELECT'/><author><name>almostlost</name><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-6802992731660752198.post-2645289283729795570</id><published>2010-10-15T17:40:00.001-07:00</published><updated>2010-10-15T17:40:55.194-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><title type='text'>Which edition of SQL Server 2005 is that?</title><content type='html'>SELECT  SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-2645289283729795570?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/2645289283729795570/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=2645289283729795570' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/2645289283729795570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/2645289283729795570'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2010/10/which-edition-of-sql-server-2005-is.html' title='Which edition of SQL Server 2005 is that?'/><author><name>almostlost</name><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-6802992731660752198.post-3534493524128821461</id><published>2010-10-12T10:28:00.000-07:00</published><updated>2010-10-12T10:37:00.042-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><category scheme='http://www.blogger.com/atom/ns#' term='format'/><category scheme='http://www.blogger.com/atom/ns#' term='date'/><title type='text'>UNIX Date Format for SQL Server</title><content type='html'>UNIX date times are most often stored as seconds from midnight, January 1, 1970.  If you are running into a date format that looks like, for example, "1286790650" or "1141541097", a ten digit number,  it is most likely a UNIX time stamp. (also see &lt;a href="http://en.wikipedia.org/wiki/Unix_time"&gt;http://en.wikipedia.org/wiki/Unix_time&lt;/a&gt; ).&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here's how to convert on SQL Server:&lt;/div&gt;&lt;div&gt;dateadd(ss, 1234567890, '1970-01-01')&lt;/div&gt;&lt;div&gt;where  12345678790 is your date given in UNIX time stamp format.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is also why 11:31 pm (in the UK) was so exciting on February 13, 2009.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-3534493524128821461?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/3534493524128821461/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=3534493524128821461' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/3534493524128821461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/3534493524128821461'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2010/10/unix-date-format-for-sql-server.html' title='UNIX Date Format for SQL Server'/><author><name>almostlost</name><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-6802992731660752198.post-1707592388011308345</id><published>2010-09-10T15:28:00.000-07:00</published><updated>2010-09-10T15:28:06.050-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>Mungled SQL Server instances</title><content type='html'>So, you have before you a box that has seen its share of SQL Server instances over the years, had its security settings and various broadcast settings changed inconsistently, and you just want to get a handle on what you have.  To get the instance names, do a search for the "perf-*.ini" files in the various database folders (i.e., "MSSQL.1").&lt;br /&gt;&lt;br /&gt;For example, in:&lt;br /&gt;C:\Program Files\Microsoft SQL Server\MSSQL.1\Binn&lt;br /&gt;if the instance used for this database was "SMEDLY" then you'll find:&lt;br /&gt;"perf-SMEDLYsqlctr.ini"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-1707592388011308345?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/1707592388011308345/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=1707592388011308345' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/1707592388011308345'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/1707592388011308345'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2010/09/mungled-sql-server-instances.html' title='Mungled SQL Server instances'/><author><name>Henry</name><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-6802992731660752198.post-394375916098220826</id><published>2010-09-08T14:25:00.000-07:00</published><updated>2010-09-08T14:33:50.508-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RegEx'/><title type='text'>Regular Expression Search and Replace</title><content type='html'>Using &lt;a href="http://www.textpad.com/" target="_blank"&gt;Textpad&lt;/a&gt;'s implementation of RegEx, the following will find all closing HTML/XML tags and add a carriage return after them:&lt;br /&gt;&lt;p&gt;search: &amp;nbsp;&amp;lt;/[^&amp;gt;]*&amp;gt;&lt;br /&gt;replace: \0 \n&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Same thing, to create a carriage return before starting tags:&lt;br /&gt;&lt;br /&gt;&lt;p&gt;search: &amp;nbsp;&amp;lt;[^&amp;gt;]*&amp;gt;&lt;br /&gt;replace: \n \0&lt;br /&gt;&lt;p&gt;This really helps when you are trying to view HTML that has been machine generated and appears in a single line.&lt;br /&gt;&lt;p&gt;Where &lt;a href="http://www.textpad.com/" target="_blank"&gt;Textpad&lt;/a&gt; uses the backslash (\) for the replacement sytax, other implementations of RegEx use the percent symbol (%).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-394375916098220826?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/394375916098220826/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=394375916098220826' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/394375916098220826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/394375916098220826'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2010/09/regular-expression-search-and-replace.html' title='Regular Expression Search and Replace'/><author><name>Henry</name><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-6802992731660752198.post-2566977792853704283</id><published>2010-09-03T14:58:00.001-07:00</published><updated>2010-09-03T15:01:34.462-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB'/><title type='text'>My First Code Project Article</title><content type='html'>Couldn't afford the time to do something full out, but at least I finally went ahead and put something up there.  &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.codeproject.com/KB/vb/vsourcesafecommentssearch.aspx"&gt;Searching Revision History Comments in Visual SourceSafe - CodeProject&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;My alias on Code Project is patrickpage.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-2566977792853704283?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/2566977792853704283/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=2566977792853704283' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/2566977792853704283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/2566977792853704283'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2010/09/my-first-code-project-article.html' title='My First Code Project Article'/><author><name>almostlost</name><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-6802992731660752198.post-9058177810837450384</id><published>2010-08-27T15:06:00.000-07:00</published><updated>2010-08-27T15:08:56.459-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fonts'/><title type='text'>List of Fonts Installed on PC</title><content type='html'>Important for Flash and Photoshop work, especially when moving to a different machine, where you might want to compare what's installed.&lt;br /&gt;&lt;br /&gt;run: cmd&lt;br /&gt;dir c:\windows\fonts &gt; fontlist.txt&lt;br /&gt;&lt;br /&gt;Yes, it is &lt;span style="font-style: italic;"&gt;that&lt;/span&gt; easy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-9058177810837450384?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/9058177810837450384/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=9058177810837450384' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/9058177810837450384'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/9058177810837450384'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2010/08/list-of-fonts-installed-on-pc.html' title='List of Fonts Installed on PC'/><author><name>almostlost</name><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-6802992731660752198.post-7454592695556886293</id><published>2010-08-27T13:58:00.001-07:00</published><updated>2010-08-27T14:00:53.622-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jargon'/><title type='text'>Jargon, or A Rose is a Rose...</title><content type='html'>Adobe calls 'em &lt;span style="font-weight: bold;"&gt;listeners&lt;/span&gt;, Microsoft calls 'em &lt;span style="font-weight: bold;"&gt;delegates &lt;/span&gt;or &lt;span style="font-weight: bold;"&gt;handlers&lt;/span&gt;, ANSI C++ programmers would recognize "&lt;span style="font-weight: bold;"&gt;callback function&lt;/span&gt;", and Java programmers would say "huh?"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-7454592695556886293?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/7454592695556886293/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=7454592695556886293' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/7454592695556886293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/7454592695556886293'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2010/08/jargon-or-rose-is-rose.html' title='Jargon, or A Rose is a Rose...'/><author><name>almostlost</name><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-6802992731660752198.post-2294602418977859088</id><published>2010-08-03T10:30:00.000-07:00</published><updated>2010-08-03T10:44:36.265-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><category scheme='http://www.blogger.com/atom/ns#' term='install'/><category scheme='http://www.blogger.com/atom/ns#' term='collations'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><category scheme='http://www.blogger.com/atom/ns#' term='setup'/><title type='text'>Installing SQL Server 2005: Collation</title><content type='html'>I had to make sure I had the collation settings set exactly as they were in a production instance of SQL Server.  In the past, SQL Server gave you a single list of collation settings - code orders to pick from.  I think the default was:&lt;br /&gt;&lt;br /&gt;"SQL_Latin1_General_Cp1_CI_AI" ("sort order id" 54).&lt;br /&gt;&lt;br /&gt;But since SQL Server 2005, the preferred way to set collation is now modular:  you first select a "Collation designator" (i.e., alphabet) and  then specify the "sort order" by selecting from various checkboxes:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;binary &lt;/li&gt;&lt;li&gt; case-sensitve&lt;/li&gt;&lt;li&gt; accent-sensitive&lt;/li&gt;&lt;li&gt; binary-code point&lt;/li&gt;&lt;li&gt; kana sensitive&lt;/li&gt;&lt;li&gt; width-sensitive  &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;So I had to figure out what the old collation setting string (in my case, "&lt;span style="font-weight: bold;"&gt;SQL Latin1_Cp1_CI_AS&lt;/span&gt;") meant, in this regard.  As is kind of obvious, it contains the sort order settings as abbreviations.  But just to make sure:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Code Page&lt;/span&gt;&lt;br /&gt;   Specifies a one- to four-digit number that identifies the code page used by the collation. CP1 specifies code page 1252, for all other code pages the complete code page number is specified. For example, CP1251 specifies code page 1251 and CP850 specifies code page 850.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Case Sensitivity&lt;/span&gt;&lt;br /&gt;CI specifies case-insensitive, CS specifies case-sensitive.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Accent Sensitivity&lt;/span&gt;&lt;br /&gt;AI specifies accent-insensitive, AS specifies accent-sensitive.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-2294602418977859088?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/2294602418977859088/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=2294602418977859088' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/2294602418977859088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/2294602418977859088'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2010/08/installing-sql-server-2005-collation.html' title='Installing SQL Server 2005: Collation'/><author><name>almostlost</name><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-6802992731660752198.post-3964218502130768973</id><published>2010-06-20T02:49:00.000-07:00</published><updated>2010-06-20T02:59:24.313-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AJAX JavaScript'/><title type='text'>Ajax before there was Ajax</title><content type='html'>Asynchronous Client-Server Interaction:&lt;br /&gt;Hidden frame, using top/parent frame's variables to retain scope == HMLHTTPRequest (so long as the returned HTML is not significantly larger than the returned XML would be)&lt;br /&gt;&lt;br /&gt;So long as the majority of server requests is nearly instantaneous, where "waiting for the user to pick something" is orders of magnitude more time consuming than processing the decision (which seemed to be true in 99.99% of all cases)...&lt;br /&gt;&lt;br /&gt;The client was notified by the hidden frame calling (onload) a function in the parent/top frame.  No big deal.  In fact, is not this more efficient than weighing down the client script with the duty of monitoring/listening ....?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-3964218502130768973?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/3964218502130768973/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=3964218502130768973' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/3964218502130768973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/3964218502130768973'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2010/06/ajax-before-there-was-ajax.html' title='Ajax before there was Ajax'/><author><name>almostlost</name><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-6802992731660752198.post-6420707424171889737</id><published>2010-06-20T02:38:00.000-07:00</published><updated>2010-06-20T02:48:05.971-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jargon'/><title type='text'>Constituent Parts</title><content type='html'>...and so begins my Useful Phrases page, kind of like the Good Jargon side of Jargon. Maybe I'll have a Good Jargon page and Bad Jargon page. Or a Useful Jargon....you get the point.&lt;br /&gt;&lt;br /&gt;Jargon is tremendously important.  Can't be overstated.  It signals to other parties that you already understand (supposedly) a whole bunch o' stuff, per each Jargon uttered.  For the most part, in day to day life, I've seen it as a Bad Thing...it seems to have more drawbacks than benefits in what I've witnessed. Specifically, when switching back and forth between different programmer cultures (Windows vs. Linux, VB vs Java, etc), it is a major hindrance and causes more confusion than necessary. Often it seems Microsoft has deliberately adopted its own terms for Jargon that would otherwise be common between the two camps. &lt;br /&gt;&lt;br /&gt;But I'm trying to adopt a more positive outlook on the matter.  In either case, Jargon is Very Helpful when it comes to Documentation, in particular, making documentation Brief.&lt;br /&gt;&lt;br /&gt;The other great benefit to Jargon is in exposing the genealogy of concepts. Much Jargon in programming is from upper level Mathematics, or Electrical Engineering.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-6420707424171889737?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/6420707424171889737/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=6420707424171889737' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/6420707424171889737'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/6420707424171889737'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2010/06/constituent-parts.html' title='Constituent Parts'/><author><name>almostlost</name><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-6802992731660752198.post-1532919688061959087</id><published>2010-06-03T13:19:00.000-07:00</published><updated>2010-06-03T13:34:31.147-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL binary varchar ascii text'/><title type='text'>Retrieving text stored as an Image data type in SQL Server</title><content type='html'>So, you have an old database that relies on the Image data type to story rich text, and within the confines of SQL Management Studio, you want to read the contents.  Turns out that the Image data type cannot convert to a varchar directly, like some of the newer binary data types can.&lt;br /&gt;&lt;br /&gt;So you have to first translate it to binary and &lt;i&gt;then&lt;/i&gt; convert that to varchar.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;SELECT CONVERT(VARCHAR(8000),CONVERT(VARBINARY(8000),notepad_textimage)) from notepad&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Incidentally, to get the size of the image data, use DATALENGTH (instead of LEN).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-1532919688061959087?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/1532919688061959087/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=1532919688061959087' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/1532919688061959087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/1532919688061959087'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2010/06/retrieving-text-stored-as-image-data.html' title='Retrieving text stored as an Image data type in SQL Server'/><author><name>almostlost</name><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-6802992731660752198.post-8024447273568594419</id><published>2010-05-26T13:56:00.000-07:00</published><updated>2010-05-26T14:07:07.982-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='virus malware microsoft windows'/><title type='text'>Mark Russinovich, Sysinternals and Malware</title><content type='html'>A very well-known tool used by those who administer their own or others computers is &lt;a href="http://technet.microsoft.com/en-us/sysinternals/bb842062.aspx"&gt;Sysinternals&lt;/a&gt;.  What I didn't know is that these tools were created pretty much by a single author.  What's more is that this author, &lt;a href="http://blogs.technet.com/markrussinovich/"&gt;Mark &lt;/a&gt;&lt;a href="http://en.wikipedia.org/wiki/Mark_Russinovich"&gt;Russinovich&lt;/a&gt;, is a great speaker, and his presentations are a must watch for anyone interested in the inner workings of Windows. I appreciate his attitude (perhaps because it is devoid of just that, "attitude") and I could listen to his presentations all day.  &lt;br /&gt;&lt;br /&gt;The presentation that got me started on him is &lt;a href="http://www.microsoft.com/emea/spotlight/sessionh.aspx?videoid=359"&gt;Advanced Malware Cleaning&lt;/a&gt;, but there are other similar presentation that focus on other tools in the Sysinternals suite available from that location.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-8024447273568594419?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/8024447273568594419/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=8024447273568594419' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/8024447273568594419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/8024447273568594419'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2010/05/mark-russinovich-sysinternals-and.html' title='Mark Russinovich, Sysinternals and Malware'/><author><name>almostlost</name><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-6802992731660752198.post-5607587363646135428</id><published>2010-05-24T15:40:00.000-07:00</published><updated>2010-05-24T15:57:34.088-07:00</updated><title type='text'>Thoughts on Alternative Narrative of Social Networking Phenomenon</title><content type='html'>Perhaps its all about another desperate attempt to instantiate delusions of grandeur on the part of corporations.&lt;br /&gt;&lt;br /&gt;A learned lesson of the Web about 6-8 years ago was  no site can hope to capture users' sole attention. &lt;br /&gt;&lt;br /&gt;To be sure, portals always tried to be that "one site".  Granted, Yahoo goes back to the inception of the Web.  But the battle came to a head some years later, when there was a pile on to be "THE" portal of record.  But who won in the end? Google.  An empty page with a textbox to enter a search term.&lt;br /&gt;&lt;br /&gt;Corporations had a difficult time giving up on the hope of being "THE" site, and the mentality that users will spend, or care to spend, a vast amount of time on their site.  Related to this desire is a desire to be ON THE (potential) CUSTOMER'S MIND.  Mindshare.  Similarly, a need to MANAGE customers... to hang on to some kind of control.  Granted, its likely such CONTROL isn't even really necessary to succeed as provider of goods and services.  But corporate mentality and record keeping require it.&lt;br /&gt;&lt;br /&gt;So, having failed to be on the customers mind for the majority of the customer's online lifespan, corporations were seduced by the promise of SOCIAL NETWORKING as a means to be in the (potential) customer's online life....to manage and keep track of.  This imperative may in fact be the driver behind SOCIAL NETWORKING and the Web 2.0 interconnectedness pursuit.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-5607587363646135428?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/5607587363646135428/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=5607587363646135428' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/5607587363646135428'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/5607587363646135428'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2010/05/thoughts-on-alternative-narrative-of.html' title='Thoughts on Alternative Narrative of Social Networking Phenomenon'/><author><name>almostlost</name><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-6802992731660752198.post-221617487770637540</id><published>2010-05-19T13:29:00.000-07:00</published><updated>2010-05-19T14:59:25.240-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>SQLCMD</title><content type='html'>Here is a handy cheat sheet for Microsoft's &lt;a href="http://msdn.microsoft.com/en-us/library/ms162773.aspx"&gt;SQLCMD&lt;/a&gt;, when you don't have the luxury of SQL Server Management Studio.&lt;br /&gt;&lt;br /&gt;To run some sql and have results sent to "output.txt",on local server:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&gt;SQLCMD -S(local) -U sa -P changeme -q "use WONDERBEAN;select * from orders;" -o output.txt&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;To run some sql stored in "myScript.sql" and have results logged to "output.txt",&lt;br /&gt;on local server,with instance called "instanceSmedly":&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&gt;SQLCMD -S(local)\instanceSmedly -U sa -P changeme -i myScript.sql -o output.txt&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Typical use would be to do a restore.  Here is a handy example of some restore sql syntax:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;alter database WONDERBEAN SET single_user with rollback immediate;&lt;br /&gt;restore database WONDERBEAN from disk = 'C:\Users\Howard\Documents\WONDERBEAN_1_1_2010.bak' with replace,recovery;&lt;br /&gt;alter database WONDERBEAN set multi_user&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-221617487770637540?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/221617487770637540/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=221617487770637540' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/221617487770637540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/221617487770637540'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2010/05/sqlcmd.html' title='SQLCMD'/><author><name>almostlost</name><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-6802992731660752198.post-4924731664747800135</id><published>2010-05-19T11:26:00.000-07:00</published><updated>2010-05-19T11:32:32.799-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VirtualBox'/><title type='text'>Virtual Box</title><content type='html'>I've been digging Sun's free &lt;a href="http://www.virtualbox.org/"&gt;VirtualBox&lt;/a&gt; over Microsoft's Virtual PC, and not only because of the Snapshot branching functionality. &lt;br /&gt;&lt;br /&gt;Here is how to disable the time in the guest operating system from syncing with the hosts, which is great for testing various scenarios....&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;vboxmanage setextradata &lt;i&gt;vmname&lt;/i&gt; “VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled” “1″ &lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-4924731664747800135?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/4924731664747800135/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=4924731664747800135' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/4924731664747800135'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/4924731664747800135'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2010/05/virtual-box.html' title='Virtual Box'/><author><name>almostlost</name><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-6802992731660752198.post-3737289687787945783</id><published>2010-05-18T12:40:00.000-07:00</published><updated>2010-05-26T13:45:19.514-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='UML'/><title type='text'>Sequence Diagrams from UML</title><content type='html'>Recently I've been taking another look at UML.  Perhaps it was the result of talking to a software ARCHITECT for the first time in a while, or sub-consciously inserted from the news that &lt;a href="http://msdn.microsoft.com/en-us/library/bb385832(VS.100).aspx#DesignApplication"&gt;Visual Studio 2010&lt;/a&gt; will have some important UML features.&lt;br /&gt;&lt;br /&gt;Many of the projects I work on involve first familiarizing myself with legacy code.  To me this is almost always fascinating, like "This Old House".  I have rarely found two programmers who code the same way.  If there is similar architecture to something else I've come across, it almost always turns out to be auto-generated from Microsoft.&lt;br /&gt;&lt;br /&gt;I have improvised various note-taking schemes over the years, which is great in that it allows me flexibility to deal with the idiosyncracies of the particular project at hand.  On the other hand, one does long for some standards to be handed down.  This would be all the more important when working on an excavation as a team.&lt;br /&gt;&lt;br /&gt;So, I was delighted to become reacquainted with (because I'm sure I saw it somewhere before but didn't appreciate it) Ivar Jacobson's Sequence Diagrams.  When dealing with a highly optimized object oriented architecture that lacks any documentation whatsoever, this is exactly the kind of approach you'd want to take in dissecting some codebase.  Sure it was intended for design, but for my purposes, it is probably even more useful in reverse engineering. &lt;br /&gt;&lt;br /&gt;Yet, as it seems with all UML models, there is an enormous lack of creativity when it comes to the drawing of symbols.  I hope to find an implementation of Sequence Diagram models that has something more creative than a stick person.&lt;br /&gt;&lt;br /&gt;UPDATE:&lt;br /&gt;Just learned that the UML creation tools in Visual Studio 2010 only come with the Ultimate version, not either the Professional nor the Premium.  Bummer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-3737289687787945783?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/3737289687787945783/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=3737289687787945783' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/3737289687787945783'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/3737289687787945783'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2010/05/sequence-diagrams-from-uml.html' title='Sequence Diagrams from UML'/><author><name>almostlost</name><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-6802992731660752198.post-1371040663109045800</id><published>2010-03-26T09:50:00.000-07:00</published><updated>2010-03-26T10:24:52.259-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Immediate Window vs Command Window in Visual Studio</title><content type='html'>To issue a Visual Studio command in the &lt;span style="font-weight:bold;"&gt;Immediate &lt;/span&gt;window, you must preface the command with a greater than sign (&gt;). To enter multiple commands, switch to the &lt;span style="font-weight:bold;"&gt;Command &lt;/span&gt;window.&lt;br /&gt;&lt;br /&gt;The window used to enter the EvaluateStatement  command determines whether an equals sign (=) is interpreted as a &lt;span style="font-style:italic;"&gt;comparison &lt;/span&gt;operator or as an &lt;span style="font-style:italic;"&gt;assignment &lt;/span&gt;operator.&lt;br /&gt;&lt;br /&gt;In the &lt;span style="font-weight:bold;"&gt;Immediate &lt;/span&gt;window, an equals sign (=) is interpreted as an &lt;span style="font-style:italic;"&gt;assignment &lt;/span&gt;operator. &lt;br /&gt;&lt;br /&gt;In the &lt;span style="font-weight:bold;"&gt;Command &lt;/span&gt;window, by contrast, an equals sign (=) is interpreted as a &lt;span style="font-style:italic;"&gt;comparison &lt;/span&gt;operator. &lt;span style="font-weight:bold;"&gt;You cannot use assignment operations in the Command window. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Some useful commands:&lt;br /&gt;&gt;StopOutlining&lt;br /&gt;Collapses all collapsible section of code (classes, regions, etc.)&lt;br /&gt;&lt;br /&gt;&gt;toolbox&lt;br /&gt;opens the toolbox window&lt;br /&gt;&lt;br /&gt;&gt;help whatever&lt;br /&gt;opens up help for the keyword (in this case, whatever)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-1371040663109045800?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/1371040663109045800/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=1371040663109045800' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/1371040663109045800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/1371040663109045800'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2010/03/immediate-window-vs-command-window-in.html' title='Immediate Window vs Command Window in Visual Studio'/><author><name>almostlost</name><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-6802992731660752198.post-6659740171082142543</id><published>2010-03-19T14:44:00.000-07:00</published><updated>2010-03-19T15:17:49.032-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>Did you know...</title><content type='html'>SQL Server started supporting &lt;b&gt;multiple instances&lt;/b&gt; in the &lt;b&gt;2000&lt;/b&gt; edition.&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;SQL Server &lt;span style="font-weight:bold;"&gt;Express Editions&lt;/span&gt; always install as a &lt;span style="font-style:italic;"&gt;Named &lt;/span&gt;Instance, even if you only have one. The instance name, by default, is SQLEXPRESS. &lt;br /&gt;&lt;br /&gt;The MSDE Edition of SQL Server 2000 installs as a Default Instance.&lt;br /&gt;&lt;hr&gt;&lt;br /&gt; In SQL Server 2000, the TCP/IP port for a named Instance moves to 1434, and SQL Server 2000 directs the client to the proper Instance using SQL Server Resolution Protocol (SSRP).&lt;br /&gt;&lt;br /&gt;In SQL Server 2005, Microsoft introduced a new service called the SQL Browser. This service listens on UDP port 1434 and directs the connection to the proper dynamically chosen TCP/IP port.&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;Each named Instance has a different location for program files and data files that is different from that of the other Instances of SQL Server. In SQL Server &lt;span style="font-weight:bold;"&gt;2000&lt;/span&gt;, the directories look like this:&lt;br /&gt;&lt;br /&gt;executable/program files:&lt;br /&gt;\Program Files\Microsoft SQL Server\MSSQL$NameOfInstance\Binn&lt;br /&gt;data files:&lt;br /&gt;\Program Files\Microsoft SQL Server\MSSQL$NameOfInstance\Data&lt;br /&gt;&lt;br /&gt;In SQL Server &lt;span style="font-weight:bold;"&gt;2005 &lt;/span&gt;and higher, the files have a different structure. For the Default Instance:&lt;br /&gt;&lt;br /&gt;executable/program files:&lt;br /&gt;\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL &lt;br /&gt;data files:&lt;br /&gt;\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;The maximum number of Instances supported in SQL Server 2000 and 2005 is 16 for the standard editions and lower, and 50 for the Enterprise Editions in 2005 and even more in later versions and higher edition numbers&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-6659740171082142543?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/6659740171082142543/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=6659740171082142543' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/6659740171082142543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/6659740171082142543'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2010/03/did-you-know.html' title='Did you know...'/><author><name>almostlost</name><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-6802992731660752198.post-4563401053636017717</id><published>2010-03-19T12:16:00.000-07:00</published><updated>2010-03-19T12:18:29.322-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='annoyances'/><title type='text'>Annoyances</title><content type='html'>&lt;ul&gt;&lt;li&gt;Many Microsoft products: having both a "Settings..." and "Options..." choice on the menu&lt;/li&gt;&lt;li&gt;SQL Server's Mgt Studio: "Modify" and "Open table..." in the context menu (since "Open table..." is frequently used to MODIFY data). &amp;nbsp;"Modify" should be either "Schema" or "Modify table columns"....&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-4563401053636017717?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/4563401053636017717/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=4563401053636017717' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/4563401053636017717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/4563401053636017717'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2010/03/annoyances.html' title='Annoyances'/><author><name>Henry</name><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-6802992731660752198.post-5547314284239617749</id><published>2010-03-16T14:52:00.000-07:00</published><updated>2010-03-19T11:43:39.295-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><title type='text'>Database DE-normalization and Violating Simplicity Principles</title><content type='html'>Timothy Claason, at SQL Server Central, writes:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"Denormalization is not a design strategy. It is a design work-around. Well normalized databases represent a good design strategy, but can often lead to a great deal of complexity when it comes to support, maintenance, and new development. A well designed database can mean that, in order to get specific data you need, you need to go through 5, 10, or even more tables which represent the data you're looking for. Though there are many solutions to this dilemma,such as virtual tables (views), programmatic solutions, temporary tables, and more, I think it's important to not discount the value of well-placed denormalization in the database. &lt;strong&gt;The intent of this article is to consider some use cases for denormalization, and from those use cases, assert some generalizations about when and why to use denormalization&lt;/strong&gt;."&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.sqlservercentral.com/articles/denormalization/69484/#"&gt;Continued&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-5547314284239617749?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/5547314284239617749/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=5547314284239617749' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/5547314284239617749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/5547314284239617749'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2010/03/database-denormalization-and-violating.html' title='Database DE-normalization and Violating Simplicity Principles'/><author><name>Henry</name><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-6802992731660752198.post-3651938557079495735</id><published>2010-03-10T11:22:00.000-08:00</published><updated>2010-03-10T11:34:15.290-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='file compare'/><category scheme='http://www.blogger.com/atom/ns#' term='hash code'/><category scheme='http://www.blogger.com/atom/ns#' term='hash'/><category scheme='http://www.blogger.com/atom/ns#' term='compare files'/><title type='text'>File Hash Checker</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.deltronweb.com/hcovitz/resume/blog/uploaded_images/screenshotFileHashChecker-709472.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 200px; height: 99px;" src="http://www.deltronweb.com/hcovitz/resume/blog/uploaded_images/screenshotFileHashChecker-709467.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.deltronweb.com/hcovitz/resume/blog/uploaded_images/screenshotFileHashChecker-735900.jpg"&gt;&lt;/a&gt;&lt;a href="http://www.deltronweb.com/hcovitz/lab/FileHashCheckerSetup.zip"&gt;Download here&lt;/a&gt;   &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is a simple utility I wrote that displays the &lt;a href="http://en.wikipedia.org/wiki/Hash_function"&gt;hash code&lt;/a&gt; of one or two files, and then compares them to see if they are the same.  I used this to find duplicate image files (where the names of the files could be different).&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/6802992731660752198-3651938557079495735?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/3651938557079495735/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=3651938557079495735' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/3651938557079495735'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/3651938557079495735'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2010/03/file-hash-checker.html' title='File Hash Checker'/><author><name>Henry</name><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-6802992731660752198.post-8307132468349194587</id><published>2010-03-05T12:47:00.000-08:00</published><updated>2010-03-05T12:50:14.112-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='conditional compilation vb.net c#'/><title type='text'>Conditional Compilation</title><content type='html'>&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;#define test = true&lt;br /&gt;class TestClass {&lt;br /&gt;void test() {&lt;br /&gt;#if test&lt;br /&gt;// do something&lt;br /&gt;#else&lt;br /&gt;// do something else&lt;br /&gt;#endif&lt;br /&gt;}}&lt;br /&gt;&lt;br /&gt;Here's the equivalent code in VB.NET:&lt;br /&gt;&lt;br /&gt;#Const test = True&lt;br /&gt;Class TestClass&lt;br /&gt;Sub test()&lt;br /&gt;#If test&lt;br /&gt;'do something&lt;br /&gt;#Else&lt;br /&gt;'do something else&lt;br /&gt;#End If&lt;br /&gt;End Sub&lt;br /&gt;End Class&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;Here's the same but using the DEBUG constant which is automatically set by Visual Studio based on whether you are in debug mode:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;Class TestClass&lt;br /&gt;Sub test()&lt;br /&gt;#If DEBUG&lt;br /&gt;'do something&lt;br /&gt;#Else&lt;br /&gt;'do something else&lt;br /&gt;#End If&lt;br /&gt;End Sub&lt;br /&gt;End Class&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-8307132468349194587?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/8307132468349194587/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=8307132468349194587' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/8307132468349194587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/8307132468349194587'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2010/03/conditional-compilation.html' title='Conditional Compilation'/><author><name>Henry</name><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-6802992731660752198.post-2037024638654177397</id><published>2010-03-05T12:38:00.000-08:00</published><updated>2010-03-05T12:44:10.640-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SoftwareTesting Testing'/><title type='text'>Software Testing</title><content type='html'>&lt;span style="font-weight:bold;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;Unit Tests&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;The major benefits to be had from unit testing are&lt;br /&gt;&lt;br /&gt;1. It allows the developer test parts of an application without waiting for the other parts to be available.&lt;br /&gt;&lt;br /&gt;2. Exceptional conditions can be tested for the unit&lt;br /&gt;&lt;br /&gt;3. The debugging process is simplified by limiting the search for bugs to a small unit rather than the complete application.&lt;br /&gt;&lt;br /&gt;4. It helps avoid lengthy compile-build-debug cycles when debugging difficult problems.&lt;br /&gt;&lt;br /&gt;5. Detection and removal of defects can be done at a much lower cost.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight:bold;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;Integration Testing&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;The purpose of this kind of testing is to verify whether the major subsystems of the application are integrated. It helps in uncovering the errors that may arise due to conflicts between different units of an application. Integration testing is performed in different ways.&lt;br /&gt;&lt;br /&gt;Bottom Up Approach: The testing is commenced from the smallest subsystem and progresses up the hierarchy to cover the whole system. This methodology requires the developer to write a number of test driver programs that test the integration between the subsystems.&lt;br /&gt;&lt;br /&gt;Top down Approach: This begins at the top. The top level interfaces are first tested and then the smaller sub systems are examined. Stubs are written for modules that are not ready for testing.&lt;br /&gt;&lt;br /&gt;Umbrella Approach: The focus in this methodology is on testing the modules that have a high degree of user interaction. Stubs are used in place of process intensive modules. This enables the developer test the graphical user interface and improves the functionality of the interface.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Regression Testing&lt;/b&gt;&lt;br /&gt;Regression testing is performed whenever the program is modified. The process involves the rerun of all the tests mentioned in the preceding sections. It has two main goals:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Verification of known bugs that were corrected&lt;/li&gt;&lt;li&gt;Verification of new bugs.&lt;/li&gt;&lt;/ol&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;b&gt;Testing International Applications&lt;/b&gt;&lt;br /&gt;Applications created for international usage are to be tested by checking for the language, the country and dependencies. The following factors are to be considered when testing such applications:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Whether the application’s data and user interface conform to the locale’s standards for date, time, numeric values, currency, list separators and measurements.&lt;/li&gt;&lt;li&gt;Whether the application runs on different languages and culture variants.&lt;/li&gt;&lt;li&gt;If Unicode has not been used in the application the culture/locale code of the operating system will have to be set to the localized version of the application.&lt;/li&gt;&lt;li&gt;The Input data in the language should be supported by the localized version.&lt;/li&gt;&lt;li&gt;In this section of the lesson we have focused upon the testing of Windows applications. In the sections that follow we shall briefly look at tracing windows applications.&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-2037024638654177397?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/2037024638654177397/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=2037024638654177397' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/2037024638654177397'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/2037024638654177397'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2010/03/software-testing.html' title='Software Testing'/><author><name>Henry</name><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-6802992731660752198.post-8704863843506905237</id><published>2009-11-04T15:54:00.000-08:00</published><updated>2012-01-27T15:55:08.652-08:00</updated><title type='text'>ASP.NET MVC</title><content type='html'>Scott Mitchell says&lt;br /&gt;&lt;br /&gt;"&lt;span style="background-color: white; font-family: Verdana, Helvetica, sans-serif; font-size: 12px; line-height: 18px;"&gt;In a nutshell, ASP.NET MVC allows developers much finer control over the markup rendered by their web pages, a greater and clearer&amp;nbsp;&lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Separation_of_concerns" style="background-color: white; color: #336666; font-family: Verdana, Helvetica, sans-serif; font-size: 12px; line-height: 18px;"&gt;separation of concerns&lt;/a&gt;&lt;span style="background-color: white; font-family: Verdana, Helvetica, sans-serif; font-size: 12px; line-height: 18px;"&gt;, better testability, and cleaner, more&amp;nbsp;&lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Search_engine_optimization" style="background-color: white; color: #336666; font-family: Verdana, Helvetica, sans-serif; font-size: 12px; line-height: 18px;"&gt;SEO&lt;/a&gt;&lt;span style="background-color: white; font-family: Verdana, Helvetica, sans-serif; font-size: 12px; line-height: 18px;"&gt;-friendly URLs."&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: Verdana, Helvetica, sans-serif; font-size: 12px; line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: Verdana, Helvetica, sans-serif; font-size: 12px; line-height: 18px;"&gt;and in his first mention of jQuery&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: Verdana, Helvetica, sans-serif; font-size: 12px; line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: Verdana, Helvetica, sans-serif; font-size: 12px; line-height: 18px;"&gt;"&lt;/span&gt;&lt;span style="background-color: white; font-family: Verdana, Helvetica, sans-serif; font-size: 12px; line-height: 18px;"&gt;&amp;nbsp;jQuery can certainly be used in an ASP.NET application, although integrating client-side script into a Web Forms application can sometimes be a bit trying. JavaScript development fits more naturally with&amp;nbsp;&lt;/span&gt;&lt;a href="http://www.asp.net/mvc/" style="background-color: white; color: #336666; font-family: Verdana, Helvetica, sans-serif; font-size: 12px; line-height: 18px;"&gt;ASP.NET MVC&lt;/a&gt;&lt;span style="background-color: white; font-family: Verdana, Helvetica, sans-serif; font-size: 12px; line-height: 18px;"&gt;&amp;nbsp;applications; in fact, the ASP.NET MVC framework includes the jQuery libraries. "&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: Verdana, Helvetica, sans-serif; font-size: 12px; line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: Verdana, Helvetica, sans-serif; font-size: 12px; line-height: 18px;"&gt;(extracted from 4guysfromrolla.com)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-8704863843506905237?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/8704863843506905237/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=8704863843506905237' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/8704863843506905237'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/8704863843506905237'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2009/11/aspnet-mvc.html' title='ASP.NET MVC'/><author><name>almostlost</name><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-6802992731660752198.post-4768926052433379697</id><published>2009-02-05T13:58:00.000-08:00</published><updated>2009-02-05T15:20:12.238-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><title type='text'>Javascript Error trapping</title><content type='html'>&lt;code&gt;&lt;br /&gt;onerror=handleErr;&lt;br /&gt;var noErrors = true;&lt;br /&gt;&lt;br /&gt;function handleErr(msg,url,l)&lt;br /&gt;{&lt;br /&gt; if(noErrors){&lt;br /&gt;  txt="There was an error detected.\n\n";&lt;br /&gt;  txt+="Error: " + msg + "\n";&lt;br /&gt;  txt+="URL: " + url + "\n";&lt;br /&gt;  txt+="Line: " + l + "\n\n";&lt;br /&gt;  txt+="Click OK to continue.\n\n";&lt;br /&gt;  alert(txt);&lt;br /&gt;  noErrors = false;&lt;br /&gt;  return true;&lt;br /&gt; }&lt;br /&gt; else{&lt;br /&gt;  return true;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-4768926052433379697?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/4768926052433379697/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=4768926052433379697' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/4768926052433379697'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/4768926052433379697'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2009/02/javascript-error-trapping.html' title='Javascript Error trapping'/><author><name>Henry</name><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-6802992731660752198.post-6279309865828791119</id><published>2008-10-13T10:31:00.000-07:00</published><updated>2008-10-13T10:32:40.096-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>Attaching SQL Server .mdb without .ldf file</title><content type='html'>If you're using SQL Server 2005:&lt;br /&gt;create a database of equal size to the one you're trying to attach&lt;br /&gt;shutdown the server&lt;br /&gt;swap in the old mdf file&lt;br /&gt;bring up the server and let the database attempt to be recovered and then go into suspect mode&lt;br /&gt;put the database into emergency mode with ALTER DATABASE&lt;br /&gt;run DBCC CHECKDB (dbname, REPAIR_ALLOW_DATA_LOSS) which will rebuild the log and run full repair&lt;br /&gt;Your database will be available again but you'll have lost data and the data won't be transactionally consistent - see the following blog posts:&lt;br /&gt;https://blogs.msdn.com/sqlserverstorageengine/archive/2006/06/15/632398.aspx&lt;br /&gt;https://blogs.msdn.com/sqlserverstorageengine/archive/2006/06/16/633645.aspx&lt;br /&gt;https://blogs.msdn.com/sqlserverstorageengine/archive/2006/06/18/636105.aspx&lt;br /&gt;If you're on SQL Server 2000, you can still do this but you'll need to use the undocumented DBCC REBUILD_LOG at your own risk. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=630182&amp;SiteID=1"&gt;original post on MSDN&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-6279309865828791119?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/6279309865828791119/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=6279309865828791119' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/6279309865828791119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/6279309865828791119'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2008/10/attaching-sql-server-mdb-without-ldf.html' title='Attaching SQL Server .mdb without .ldf file'/><author><name>Henry</name><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-6802992731660752198.post-2964274877773041288</id><published>2008-10-01T10:42:00.000-07:00</published><updated>2012-01-26T12:32:26.802-08:00</updated><title type='text'>ASP.NET Visual Studio Project Types</title><content type='html'>(thru 2008)&lt;br /&gt;"&lt;span style="color: #44525e; font-family: 'Segoe UI', Tahoma, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 18px;"&gt;&amp;nbsp;Visual Studio supports two modes of project management: Web Site Projects and Web Application Projects. Web Site Projects lack a project file, whereas Web Application Projects mimic the project architecture in Visual Studio .NET 2002/2003 - they include a project file and compile the project's source code into a single assembly, which is placed in the&amp;nbsp;&lt;/span&gt;&lt;code style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #800039; font-family: Consolas, monospace; font-size: 13px; line-height: 18px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;/bin&lt;/code&gt;&lt;span style="color: #44525e; font-family: 'Segoe UI', Tahoma, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 18px;"&gt;&amp;nbsp;folder. Visual Studio 2005 initially only supported Web Site Projects, although the&amp;nbsp;&lt;/span&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa730880(vs.80).aspx" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #7912b5; font-family: 'Segoe UI', Tahoma, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 18px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;"&gt;Web Application Project model&lt;/a&gt;&lt;span style="color: #44525e; font-family: 'Segoe UI', Tahoma, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 18px;"&gt;&amp;nbsp;was reintroduced with Service Pack 1; Visual Studio 2008 offers both project models. "&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #44525e; font-family: 'Segoe UI', Tahoma, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 18px;"&gt;- Scott Mitchell&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #44525e; font-family: 'Segoe UI', Tahoma, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #44525e; font-family: 'Segoe UI', Tahoma, Arial, Helvetica, sans-serif; font-size: x-small;"&gt;&lt;span style="line-height: 18px;"&gt;Useful, related links:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://blogs.msdn.com/b/webdevtools/archive/2009/10/29/converting-a-web-site-project-to-a-web-application-project.aspx"&gt;Converting a Web Site Project to a Web Application Project&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ie/dd547590.aspx"&gt;Web Application Projects versus Web Site Projects&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ie/dd394698.aspx"&gt;ASP.NET Web Application Project Deployment Overview&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-2964274877773041288?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/2964274877773041288/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=2964274877773041288' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/2964274877773041288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/2964274877773041288'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2012/01/aspnet-visual-studio-project-types.html' title='ASP.NET Visual Studio Project Types'/><author><name>almostlost</name><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-6802992731660752198.post-5098207985787949181</id><published>2008-08-13T12:30:00.000-07:00</published><updated>2008-08-13T12:31:22.196-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><title type='text'>Flash Frame by Frame Animation</title><content type='html'>Found out two great shortcuts for creating flash frame by frame animation:&lt;br /&gt; &lt;br /&gt;1.  When you begin, in the timeline, select a whole range of frames and right click, and select "Convert to Blank Keyframes"&lt;br /&gt;2.  Turn on Onion Skinning, of course.&lt;br /&gt;3.  As you draw each frame, just use the period key to move forward (and the comma key to go back to previous frame).&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;So much faster and easier!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-5098207985787949181?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/5098207985787949181/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=5098207985787949181' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/5098207985787949181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/5098207985787949181'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2008/08/flash-frame-by-frame-animation.html' title='Flash Frame by Frame Animation'/><author><name>Henry</name><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-6802992731660752198.post-6967391257714530482</id><published>2008-08-13T11:46:00.001-07:00</published><updated>2008-08-13T11:48:22.252-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><title type='text'>Flash after 7 years...</title><content type='html'>I'm getting back into Flash after about 7 years.  I find it inscrutable why, after all that time, the designers still don't want to show the keyboard shortcuts on the menu for inserting a KEYFRAME and a BLANK KEYFRAME.&lt;br /&gt;&lt;br /&gt;F5 - Insert Frame&lt;br /&gt;F6 - Insert Keyframe&lt;br /&gt;F7 - Insert Blank Keyframe&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-6967391257714530482?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/6967391257714530482/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=6967391257714530482' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/6967391257714530482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/6967391257714530482'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2008/08/flash-after-7-years.html' title='Flash after 7 years...'/><author><name>Henry</name><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-6802992731660752198.post-1927733602218316964</id><published>2008-06-02T12:06:00.001-07:00</published><updated>2008-06-02T12:07:32.126-07:00</updated><title type='text'>Unicode</title><content type='html'>Succinctly puts in context:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;[edit] Variable-Width Characters&lt;br /&gt;Before UNICODE, there was an internationalization attempt that introduced character strings with variable-width characters. Some characters, such as the standard ASCII characters would be 1 byte long. Other characters, such as extended character sets, were two characters long. These types of character formats fell out of favor with the advent of UNICODE because they are harder to write and much harder to read. Windows does still maintain some functionality to deal with variable-width strings, but we won't discuss those here.&lt;br /&gt;&lt;br /&gt;Unfortunately all advantages of using wide characters were lost because the number of characters needed quickly exceeded the 65,536 possible 16-bit values. Windows actually uses what is called UTF-16 to store characters, where a large number of characters actually take //two// words, these are called "surrogate pairs". This development is after much of the Windows API documentation was written and much of it is now obsolete. You should never treat string data as an "array of characters", instead always treat it as a null-terminated block. For instance always send the entire string to a function to draw it on the screen, do not attempt to draw each character. Any code that puts a square bracket after a LPSTR is wrong.&lt;br /&gt;&lt;br /&gt;At the same time, variable-width character-based strings made a big comeback in the multi-platform standard called UTF-8, which is pretty much the same idea as UTF-16 except with 8-bit units. It's primary advantage is that there is no need for two api's, the 'a' and 'w' apis would have been the same if this was used, and since both are variable-sized, it has no disadvantage. Although most Windows programmers are unfamiliar with it, you may see increased references to using the non-UNICODE api.&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;-- from &lt;a href="http://en.wikibooks.org/wiki/Windows_Programming/Unicode"&gt;Windows Programming&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-1927733602218316964?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/1927733602218316964/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=1927733602218316964' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/1927733602218316964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/1927733602218316964'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2008/06/unicode.html' title='Unicode'/><author><name>Henry</name><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-6802992731660752198.post-5205035624011864812</id><published>2008-05-19T14:03:00.000-07:00</published><updated>2008-05-19T14:06:02.727-07:00</updated><title type='text'>SearchPlugins for Firefox</title><content type='html'>Trying to figure out this baby. In this arena, IE has Firefox beat.&lt;br /&gt;&lt;br /&gt;In Firefox, look at the xml files in the following folder:&lt;br /&gt;C:\program files\Mozilla Firefox\searchplugins&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So far, to search Amazon MP3's, I've winnowed the search url down to:&lt;br /&gt;&lt;br /&gt;http://www.amazon.com/s?url=search-alias%3Ddigital-music&amp;field-keywords=TEST&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-5205035624011864812?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/5205035624011864812/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=5205035624011864812' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/5205035624011864812'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/5205035624011864812'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2008/05/searchplugins-for-firefox.html' title='SearchPlugins for Firefox'/><author><name>Henry</name><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-6802992731660752198.post-8021122406032957917</id><published>2008-04-01T15:46:00.000-07:00</published><updated>2008-04-01T15:49:23.127-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><title type='text'>SQL for Running Totals: The Power of Cross Join</title><content type='html'>&lt;code&gt;&lt;br /&gt;SELECT &lt;br /&gt;t.transaction_date, t.amount, t.[description], sum (t2.amount) as RunningTotal&lt;br /&gt;FROM &lt;br /&gt;cash_transaction_table t &lt;br /&gt;CROSS JOIN cash_transaction_table t2&lt;br /&gt;WHERE&lt;br /&gt;(t2.transaction_date &lt;= t.transaction_date)&lt;br /&gt;GROUP BY&lt;br /&gt;t.transaction_date,&lt;br /&gt;t.amount,&lt;br /&gt;t.[description]&lt;br /&gt;ORDER BY&lt;br /&gt;t.transaction_date&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-8021122406032957917?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/8021122406032957917/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=8021122406032957917' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/8021122406032957917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/8021122406032957917'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2008/04/sql-for-running-totals-power-of-cross.html' title='SQL for Running Totals: The Power of Cross Join'/><author><name>Henry</name><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-6802992731660752198.post-9130688648198435538</id><published>2008-02-01T14:54:00.000-08:00</published><updated>2012-01-26T16:16:23.667-08:00</updated><title type='text'>An Entity is a....Thing</title><content type='html'>"&lt;span style="font-family: 'Segoe UI', Verdana, Arial; font-size: 13px; text-align: left;"&gt;In the same way queries in the relational world are formulated against tables, queries in the EDM world are formulated against entities"&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-9130688648198435538?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/9130688648198435538/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=9130688648198435538' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/9130688648198435538'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/9130688648198435538'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2012/01/entity-is-athing.html' title='An Entity is a....Thing'/><author><name>almostlost</name><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-6802992731660752198.post-2214721878871597503</id><published>2008-01-09T14:28:00.000-08:00</published><updated>2008-01-09T14:34:25.527-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IE7 Unicode Entities Character'/><title type='text'>IE7 and Mathematical Characters</title><content type='html'>Certain mathematical characters no longer display in the default font of IE7 unless the operating system is Vista, including the "union" and "element of" characters.  To get around this, in CSS you have to specify a different font, and the most common Windows font that works is 'Lucida Sans Unicode'.&lt;br /&gt;&lt;br /&gt;Example:&lt;br /&gt;&lt;div style="font-family: 'Lucida Sans Unicode';"&gt;&amp;#8712;&lt;/div&gt;&lt;br /&gt;will display fine in both XP and Vista, but&lt;br /&gt;&amp;#8712; &lt;br /&gt;will not display correctly on XP.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-2214721878871597503?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/2214721878871597503/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=2214721878871597503' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/2214721878871597503'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/2214721878871597503'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2008/01/ie7-and-mathematical-characters.html' title='IE7 and Mathematical Characters'/><author><name>Henry</name><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-6802992731660752198.post-288899575344127892</id><published>2007-11-15T15:39:00.000-08:00</published><updated>2007-11-15T15:40:59.809-08:00</updated><title type='text'>Amazon Goes Ajax - New Interface Today</title><content type='html'>Well, mark today down in UI design for websites and e-commerce.  Amazon.com unveiled their new interface and it is Ajax (particular the Dynamic HTML aspect).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-288899575344127892?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/288899575344127892/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=288899575344127892' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/288899575344127892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/288899575344127892'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2007/11/amazon-goes-ajax-new-interface-today.html' title='Amazon Goes Ajax - New Interface Today'/><author><name>Henry</name><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-6802992731660752198.post-9220121712613343795</id><published>2007-11-15T08:45:00.000-08:00</published><updated>2007-11-15T08:48:11.399-08:00</updated><title type='text'>Certified E-Mail</title><content type='html'>Let it be known throughout the land, I received my first ever CERTIFIED e-mail today in Yahoo Mail.  Will this be a turning point in web history?&lt;br /&gt;&lt;br /&gt;The e-mail was from Build-a-Bear Workshop, so parents of young children are probably going to be the first to notice the trend.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Also see:&lt;br /&gt;&lt;a href="http://help.yahoo.com/l/us/yahoo/mail/yahoomail/context/context-08.html"&gt;http://help.yahoo.com/l/us/yahoo/mail/yahoomail/context/context-08.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-9220121712613343795?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/9220121712613343795/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=9220121712613343795' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/9220121712613343795'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/9220121712613343795'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2007/11/certified-e-mail.html' title='Certified E-Mail'/><author><name>Henry</name><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-6802992731660752198.post-3899071329619863951</id><published>2007-11-08T11:21:00.000-08:00</published><updated>2007-11-08T11:27:14.008-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web server'/><category scheme='http://www.blogger.com/atom/ns#' term='Hosting'/><title type='text'>Apache losing market share to Microsoft IIS?</title><content type='html'>&lt;a href="http://www.deltronweb.com/hcovitz/resume/blog/uploaded_images/overallc-744111.gif"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://www.deltronweb.com/hcovitz/resume/blog/uploaded_images/overallc-744110.gif" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;Wow, I was startled to see this graph!&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Apache has around a 10% market share advantage over IIS now, which is the smallest gap between the two since IIS was launched in 1996.&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;src: &lt;a href="http://news.netcraft.com/archives/web_server_survey.html"&gt;Netcraft&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-3899071329619863951?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/3899071329619863951/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=3899071329619863951' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/3899071329619863951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/3899071329619863951'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2007/11/apache-losing-market-share-to-microsoft.html' title='Apache losing market share to Microsoft IIS?'/><author><name>Henry</name><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-6802992731660752198.post-3765103634973538617</id><published>2007-11-06T12:59:00.000-08:00</published><updated>2007-11-06T14:21:21.502-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ApplicationBlocks'/><title type='text'>Idiot's Guide to Implementing Microsoft.Practices.EnterpriseLibrary.ExceptionHandling</title><content type='html'>A simple tutorial for VB.NET folks.&lt;br /&gt;&lt;br /&gt;Get &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=4c557c63-708f-4280-8f0c-637481c31718&amp;displaylang=en"&gt;Enterprise Library 3.0&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Install.&lt;br /&gt;&lt;br /&gt;In your app, add reference to C:\Program Files\Microsoft Enterprise Library 3.1—May 2007\Bin &lt;br /&gt;&lt;br /&gt;Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.dll &lt;br /&gt;Microsoft.Practices.EnterpriseLibrary.Common.dll &lt;br /&gt;&lt;br /&gt;If you con't have an app.config file, add one now (you could have this done for you later, but let's keep it simple).&lt;br /&gt;&lt;br /&gt;Now open up "Enterprise Library Configuration", a utility installed along with the Enterprise Library that can be found off the Start menu....&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Do File/Open... and point to the app.config file in your app.&lt;br /&gt;&lt;br /&gt;Right-click the name of your app, select New... and then "Exception Handling Application Block".&lt;br /&gt;&lt;br /&gt;Right-click the newly created tree node (it will have a red stop sign with a white X in it) and select New..Exception Policy.  Name this "Global Policy".&lt;br /&gt;&lt;br /&gt;Save it.&lt;br /&gt;&lt;br /&gt;Now, back in Visual Studio 2005, your Try Catch blocks should be changed to the following pattern:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Try&lt;br /&gt;            'for testing: Throw New Exception("This is a sample exception.")&lt;br /&gt;            'put your real code here&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Catch ex As Exception&lt;br /&gt;            Dim rethrow As Boolean = Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.ExceptionPolicy.HandleException(ex, "Global Policy")&lt;br /&gt;            If rethrow Then&lt;br /&gt;                Throw&lt;br /&gt;            End If&lt;br /&gt;End Try&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;You should now be able to compile and start playing with the advanced features of the Enterprise Library 3.0 version of the old ApplicationBlocks.&lt;br /&gt;&lt;br /&gt;Also see: &lt;a href="http://www.devx.com/dotnet/Article/35736/1954?pf=true"&gt;C# Tutorial&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-3765103634973538617?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/3765103634973538617/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=3765103634973538617' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/3765103634973538617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/3765103634973538617'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2007/11/idiots-guide-to-implementing.html' title='Idiot&apos;s Guide to Implementing Microsoft.Practices.EnterpriseLibrary.ExceptionHandling'/><author><name>Henry</name><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-6802992731660752198.post-7349564986872305376</id><published>2007-11-01T11:04:00.000-07:00</published><updated>2007-11-01T11:07:23.972-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OOP'/><title type='text'>I Hate Overloads</title><content type='html'>I just started working the the replacement for Microsoft's Application Blocks. ExceptionManagement, called Microsoft.Practices.EnterpriseLibrary.  Specifically, I'm using the Logging class.  Guess how many overloads there are for the Write method?  NINETEEN!!! 19 overloads, that's right.  Imagine if you did not have Intellisense.  In my opinion, overloads undermine the whole organization of Object Oriented Programming (OOP), and are to be used SPARINGLY.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-7349564986872305376?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/7349564986872305376/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=7349564986872305376' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/7349564986872305376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/7349564986872305376'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2007/11/i-hate-overloads.html' title='I Hate Overloads'/><author><name>Henry</name><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><entry><id>tag:blogger.com,1999:blog-6802992731660752198.post-3693649517450260791</id><published>2007-10-22T14:17:00.000-07:00</published><updated>2007-10-22T14:19:03.713-07:00</updated><title type='text'>Speech Synthesis with .NET 3.0</title><content type='html'>Very simple:&lt;br /&gt;Reference System.Speech.dll&lt;br /&gt;&lt;code&gt;&lt;br /&gt;        Dim synth As New Speech.Synthesis.SpeechSynthesizer&lt;br /&gt;        synth.SpeakAsync("Hello world.")&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-3693649517450260791?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/3693649517450260791/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=3693649517450260791' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/3693649517450260791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/3693649517450260791'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2007/10/speech-synthesis-with-net-30.html' title='Speech Synthesis with .NET 3.0'/><author><name>Henry</name><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-6802992731660752198.post-8578234029955355993</id><published>2007-09-24T10:07:00.000-07:00</published><updated>2007-09-24T10:13:18.375-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2005'/><category scheme='http://www.blogger.com/atom/ns#' term='Optimized Code Generation setting'/><category scheme='http://www.blogger.com/atom/ns#' term='Code Generation Settings'/><category scheme='http://www.blogger.com/atom/ns#' term='General'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Forms Designer'/><title type='text'>Visual Studio 2005 Code Generation Settings</title><content type='html'>Microsoft does not acknowledge the existence of an Option Setting in Visual Studio 2005. &lt;br /&gt;&lt;a href="http://www.deltronweb.com/hcovitz/resume/blog/uploaded_images/MicrosoftNoDocumentation-795168.GIF"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://www.deltronweb.com/hcovitz/resume/blog/uploaded_images/MicrosoftNoDocumentation-795165.GIF" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I could not find any mention of the Windows Forms Designer, General, Code Generation Settings, Optimized Code Generation setting on MSDN, nor, surpisingly, on Google.  It remains a mystery.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-8578234029955355993?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/8578234029955355993/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=8578234029955355993' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/8578234029955355993'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/8578234029955355993'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2007/09/visual-studio-2005-code-generation.html' title='Visual Studio 2005 Code Generation Settings'/><author><name>Henry</name><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-6802992731660752198.post-8730628629958972984</id><published>2007-09-18T17:07:00.001-07:00</published><updated>2007-09-18T17:08:56.649-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><title type='text'>Flash quick notes</title><content type='html'>Put this in the Action window (F9) for a movie clip's instance.&lt;br /&gt;&lt;br /&gt;onClipEvent(enterFrame){&lt;br /&gt;    _x = _root._xmouse;&lt;br /&gt; _y = _root._ymouse;&lt;br /&gt; _alpha = _root._xmouse/10;&lt;br /&gt; _rotation = _root._ymouse/10;&lt;br /&gt; &lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-8730628629958972984?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/8730628629958972984/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=8730628629958972984' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/8730628629958972984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/8730628629958972984'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2007/09/flash-quick-notes.html' title='Flash quick notes'/><author><name>Henry</name><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-6802992731660752198.post-6750427226829090512</id><published>2007-09-18T17:07:00.000-07:00</published><updated>2010-03-16T15:06:01.724-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><title type='text'>Flash quick notes</title><content type='html'>Put this in the Action window (F9) for a movie clip's instance.&lt;br /&gt;&lt;br /&gt;onClipEvent(enterFrame){&lt;br /&gt;    _x = _root._xmouse;&lt;br /&gt; _y = _root._ymouse;&lt;br /&gt; _alpha = _root._xmouse/10;&lt;br /&gt; _rotation = _root._ymouse/10;&lt;br /&gt; &lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-6750427226829090512?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/6750427226829090512/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=6750427226829090512' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/6750427226829090512'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/6750427226829090512'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2007/09/flash-quick-notes_18.html' title='Flash quick notes'/><author><name>Henry</name><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-6802992731660752198.post-931110007278588028</id><published>2007-09-07T13:42:00.001-07:00</published><updated>2007-09-07T13:52:51.778-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Widescreen Monitors'/><title type='text'>Adoption of Widescreen Monitors</title><content type='html'>I had a good discussion today with colleagues about the impact of widescreen monitors on application and web design.  I am skeptical about the usability of widescreen monitors for readability (due to the well known design principle of narrow text columns increasing readability).  I've also noticed that generally stores are discounting widescreens below the cost of standard aspect ration monitors.  For all I know, this is because they are having trouble getting rid of them.  &lt;br /&gt;&lt;br /&gt;Then, seemingly explaining all this, I came across this tidbit:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Philips: Widescreen adoption in LCD monitors not as quick as expected        &lt;br /&gt;&lt;br /&gt;By: Calvin Shao, Taipei; Carrie Yu, DIGITIMES [Friday 20 January 2006]  &lt;br /&gt;Friday, January 20, 2006 15:23  &lt;br /&gt;&lt;br /&gt;Although panel makers have aggressively pushed widescreen LCD monitor panels, the adoption rate is not expected to proceed as fast as expected, with the penetration rate of the segment now set to increase from 2% in 2005 to 9.8% in 2008, according to Sara Liu, assistant manager of market intelligence, Philips CEBLC-MMFD, Royal Philips Electronics.&lt;br /&gt;&lt;br /&gt;Panel makers have rolled out various widescreen monitor panels, as it is more cost-efficient to cut glass substrates from later generation panel plants into widescreen models, rather than into standard (4:3 ratio) panels, sources said.&lt;br /&gt; &lt;br /&gt;For example, a sixth-generation (6G) LCD substrate can output four more widescreen 20.1-inch panels than standard 20.1-inch panels. In addition, the utilization rate of the substrate would increase by 15 percentage points to over 90%, the sources indicated.&lt;br /&gt;&lt;br /&gt;However, when purchasing monitors, consumers tend to judge the size of a monitor by the height of the model. As a result, widescreen models, which look smaller, may not end up being as attractive to customers, Liu said. In fact, a 16:9 20-inch LCD monitor has a 182 square-inch viewing area, compared with 194 square-inches for a 4:3 20.1-inch model, she added.&lt;br /&gt;&lt;br /&gt;Chi Mei Optoelectronics (CMO) was the main producer of 19-inch widescreen LCD monitor panels as of the end of last year. ViewSonic, Acer and CMV all use CMO panels in their 19-inch widescreen LCD monitors.&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;And I thought it had to do with pushing users to view movies on their computers. Instead, it looks like the marketplace is trying to push users to want to view movies on their computers so that they can sell them the less expensive widescreens.&lt;br /&gt;Or something like that.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-931110007278588028?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/931110007278588028/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=931110007278588028' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/931110007278588028'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/931110007278588028'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2007/09/adoption-of-widescreen-monitors.html' title='Adoption of Widescreen Monitors'/><author><name>Henry</name><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-6802992731660752198.post-6887747195132994197</id><published>2007-08-10T23:11:00.000-07:00</published><updated>2007-08-10T23:12:58.121-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='prototype.js'/><title type='text'>Notes from Peepcode tutorial on Prototype.js</title><content type='html'>Notes from Peepcode tutorial on Prototype.js&lt;br /&gt;ver 1.5.1&lt;br /&gt;&lt;br /&gt;$H()&lt;br /&gt;$A()&lt;br /&gt;&lt;br /&gt;for Hash Object and Array Objects&lt;br /&gt;&lt;br /&gt;var smedly = {ape:'brown',frog:'green'}&lt;br /&gt;smedly.ape&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;var smedly = $H({ape:'brown',frog:'green'})&lt;br /&gt;smedly.keys()&lt;br /&gt;&lt;br /&gt;$A isn't really needed...&lt;br /&gt;var asmedly = ['ape','frog','toad']&lt;br /&gt;asmedly.first()&lt;br /&gt;&lt;br /&gt;Element.hide('smedly')&lt;br /&gt;&lt;br /&gt;$('smedly').hide()&lt;br /&gt;&lt;br /&gt;$('smedly').show()&lt;br /&gt;&lt;br /&gt;$$('boldTextCSSclass').invoke('hide')&lt;br /&gt;&lt;br /&gt;$$('a').invoke('hide')&lt;br /&gt;&lt;br /&gt;Anonymous Functions:&lt;br /&gt;&lt;br /&gt;$$('a').each(takesAFunction)&lt;br /&gt;&lt;br /&gt;$$('a').each(function(element){element.hide()})&lt;br /&gt;&lt;br /&gt;Other selector syntaxes (generally uses CSS):&lt;br /&gt;$$('a,p') selects both a's and p's&lt;br /&gt;$$('div p') selects all p's in a div&lt;br /&gt;$$('img') selects all images&lt;br /&gt;$$('img[alt=mephisto-badge]') selects all images with 'mephisto-badge' as alt parm&lt;br /&gt;--------------------------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Modules&lt;/strong&gt;&lt;br /&gt;This is pure JavaScript. Create modules using Hashes.&lt;br /&gt;&lt;br /&gt;var myHash = {mykey:myvalue, mykey2:myvalue2}&lt;br /&gt;&lt;br /&gt;Now just put function in for the key:value pairs:&lt;br /&gt;&lt;br /&gt;var HandyFunctions = {hideLinks: function(){}, showLinks: function(){}}&lt;br /&gt;var HandyFunctions = {&lt;br /&gt;hideLinks: function(){&lt;br /&gt;$$('a').invoke('hide');&lt;br /&gt;},&lt;br /&gt;showLinks: function(){&lt;br /&gt;$$('a').invoke('show')&lt;br /&gt;}&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;Note: when you call these functions, even though they are Hash keys, make sure to put parentheses at end:&lt;br /&gt;HandyFunction.hideLinks()&lt;br /&gt;&lt;br /&gt;Classes&lt;br /&gt;Note: see Yahoo video for painfully in-depth exploration of JavaScript classes.&lt;br /&gt;Prototype makes it simpler. Just use Class.create() !!&lt;br /&gt;They are similar to the Module concept above, but with some added functionality:&lt;br /&gt;initialize,&lt;br /&gt;parameters that can be passed to functions,&lt;br /&gt;and you can use "this" keyword.&lt;br /&gt;&lt;br /&gt;var Butter = Class.create()&lt;br /&gt;Butter.prototype = {mykey:myvalue}&lt;br /&gt;&lt;br /&gt;Butter.prototype = {&lt;br /&gt;initialize: function(brand) {&lt;br /&gt;this.brand = brand;&lt;br /&gt;this.melted = false;&lt;br /&gt;},&lt;br /&gt;melt: function(){&lt;br /&gt;this.melted = true;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;var parkay = new Butter('Parkay');&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Extend&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;addMethods&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;See Quirksmode for list of cross-browser behaviors (onmousever, onclick, etc)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-6887747195132994197?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/6887747195132994197/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=6887747195132994197' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/6887747195132994197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/6887747195132994197'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2007/08/notes-from-peepcode-tutorial-on.html' title='Notes from Peepcode tutorial on Prototype.js'/><author><name>Henry</name><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-6802992731660752198.post-5661575728008719878</id><published>2007-08-10T12:22:00.000-07:00</published><updated>2007-08-10T12:23:37.960-07:00</updated><title type='text'>JavaScript Hash</title><content type='html'>&lt;DIV&gt;&lt;SPAN class=838021719-10082007&gt;&lt;FONT face=Arial size=2&gt;var animalColors =  {'ape':'black', 'pig':'pink', 'frog':'green'}&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt; &lt;DIV&gt;&lt;SPAN class=838021719-10082007&gt;&lt;FONT face=Arial  size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/DIV&gt; &lt;DIV&gt;&lt;SPAN class=838021719-10082007&gt;&lt;FONT face=Arial  size=2&gt;alert(animalColors['ape'])&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt; &lt;DIV&gt;&lt;SPAN class=838021719-10082007&gt;&lt;FONT face=Arial  size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/DIV&gt; &lt;DIV&gt;&lt;SPAN class=838021719-10082007&gt;&lt;FONT face=Arial  size=2&gt;alert(animalColors.ape)&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt; &lt;DIV&gt;&lt;SPAN class=838021719-10082007&gt;&lt;FONT face=Arial  size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/DIV&gt; &lt;DIV&gt;&lt;SPAN class=838021719-10082007&gt;&lt;FONT face=Arial  size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-5661575728008719878?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/5661575728008719878/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=5661575728008719878' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/5661575728008719878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/5661575728008719878'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2007/08/javascript-hash.html' title='JavaScript Hash'/><author><name>Henry</name><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-6802992731660752198.post-7715933063447759516</id><published>2007-08-06T11:05:00.001-07:00</published><updated>2007-08-06T11:15:38.208-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><category scheme='http://www.blogger.com/atom/ns#' term='Stored Procedures'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>Too Many Stored Procedures</title><content type='html'>Is there such a  thing as Too Many Stored Procedures?&lt;br /&gt;Jeff Atwood at Coding Horror makes  some great points that reflect my own thoughts over at:&lt;br /&gt;&lt;a href="http://www.codinghorror.com/blog/archives/000117.html"&gt;http://www.codinghorror.com/blog/archives/000117.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I think SQL Server's  Object Explorer needs to have a built-in mechanism for managing the thousands of  stored procedures that occupy a database, instead of trusting that a sensible  naming convention will be used.&amp;nbsp; In my experience, eventually any naming  convention breaks down after time, as new developers and technologies  arrive.&lt;br /&gt;&lt;br /&gt;Linked to in Atwood's post is this by Frans Bouma, who seems to be the main promoter of cautionary use of Stored Procedures: &lt;a href="http://weblogs.asp.net/fbouma/archive/2003/11/18/38178.aspx"&gt;http://weblogs.asp.net/fbouma/archive/2003/11/18/38178.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-7715933063447759516?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/7715933063447759516/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=7715933063447759516' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/7715933063447759516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/7715933063447759516'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2007/08/too-many-stored-procedures.html' title='Too Many Stored Procedures'/><author><name>Henry</name><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-6802992731660752198.post-598989781915794619</id><published>2007-08-02T11:00:00.000-07:00</published><updated>2007-08-02T11:01:03.410-07:00</updated><title type='text'>Quick ASP Log</title><content type='html'>&lt;DIV&gt;&lt;SPAN class=664155917-02082007&gt;&lt;FONT face=Arial size=2&gt;Handy for debugging  errors:&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt; &lt;DIV&gt;&lt;SPAN class=664155917-02082007&gt;&lt;FONT face=Arial  size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/DIV&gt; &lt;DIV&gt;&lt;SPAN class=664155917-02082007&gt;&lt;FONT face=Arial  size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/DIV&gt; &lt;DIV&gt;&lt;SPAN class=664155917-02082007&gt;&lt;FONT face=Arial size=2&gt;function  writeLog(msg)&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt; &lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt; &lt;DIV&gt;&lt;SPAN class=664155917-02082007&gt;&lt;FONT face=Arial size=2&gt;&amp;nbsp;Dim  fso&lt;BR&gt;&amp;nbsp;Dim logfile&lt;BR&gt;&amp;nbsp;Dim logFileName&lt;BR&gt;&amp;nbsp;Dim strLog&amp;nbsp;  &lt;BR&gt;&amp;nbsp;logFileName&amp;nbsp; = Server.MapPath("logfile.txt")&lt;BR&gt;&amp;nbsp;Set fso =  Server.CreateObject("Scripting.FileSystemObject") &lt;BR&gt;&amp;nbsp;Set logfile =  FSO.OpenTextFile(logFileName, 8, True)&lt;BR&gt;&amp;nbsp;logfile.writeline now() &amp;amp;  ":" &amp;amp; msg&lt;BR&gt;&amp;nbsp;set fso = nothing&lt;BR&gt;&amp;nbsp;set logfile =  nothing&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt; &lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt; &lt;DIV&gt;&lt;SPAN class=664155917-02082007&gt;&lt;FONT face=Arial size=2&gt;end  function&lt;BR&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-598989781915794619?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/598989781915794619/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=598989781915794619' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/598989781915794619'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/598989781915794619'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2007/08/quick-asp-log.html' title='Quick ASP Log'/><author><name>Henry</name><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-6802992731660752198.post-2617558287316515133</id><published>2007-08-01T13:42:00.000-07:00</published><updated>2007-08-01T14:08:00.983-07:00</updated><title type='text'>Most Common Validators for ASP.NET</title><content type='html'>&lt;code&gt;&lt;br /&gt;     &amp;lt;asp:requiredfieldvalidator id="reqResendWaitDays" Runat="server" ErrorMessage="Required Field" ControlToValidate="txtResendWaitDays"&lt;br /&gt;       Display="Dynamic"&amp;gt;&lt;br /&gt;&amp;lt;/asp:requiredfieldvalidator&amp;gt;&lt;br /&gt;&lt;br /&gt;      &amp;lt;asp:CompareValidator id="comResendWaitDays" Runat="server" ErrorMessage="Must be numeric" ControlToValidate="txtResendWaitDays"&lt;br /&gt;       type="Integer" operator="DataTypeCheck"&amp;gt;&lt;br /&gt;&amp;lt;/asp:CompareValidator&amp;gt; &lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-2617558287316515133?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/2617558287316515133/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=2617558287316515133' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/2617558287316515133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/2617558287316515133'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2007/08/most-common-validators-for-aspnet.html' title='Most Common Validators for ASP.NET'/><author><name>Henry</name><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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6802992731660752198.post-4345709993134338414</id><published>2007-07-31T10:06:00.000-07:00</published><updated>2007-08-16T10:03:50.763-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Excel'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP'/><title type='text'>HTML to Excel with ASP</title><content type='html'>&lt;span class="738290217-31072007"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;Quick and Easy method:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="738290217-31072007"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="738290217-31072007"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="738290217-31072007"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;Response.Clear&lt;br /&gt;Response.ContentType = "application/vnd.ms-excel"&lt;br /&gt;Response.AddHeader "Content-Disposition", "inline;filename=requests.csv"&lt;br /&gt;'Response.AddHeader "Content-Disposition", "attachment;filename=requests.csv"&lt;br /&gt;Dim header : header = ""&lt;br /&gt;prefix = false&lt;br /&gt;Dim field&lt;br /&gt;for each field in rs.Fields&lt;br /&gt; if(prefix) then&lt;br /&gt;  header = header &amp; ","&lt;br /&gt; end if&lt;br /&gt; header = header &amp; field.Name&lt;br /&gt; prefix = true&lt;br /&gt;next&lt;br /&gt;Response.Write header &amp;amp; vbCRLF &amp; rs.GetString(,,",",,"")&lt;br /&gt;Response.End  &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="738290217-31072007"&gt;&lt;span style="font-family:Arial;font-size:85%;"&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/6802992731660752198-4345709993134338414?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/4345709993134338414/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=4345709993134338414' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/4345709993134338414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/4345709993134338414'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2007/07/html-to-excel-with-asp.html' title='HTML to Excel with ASP'/><author><name>Henry</name><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-6802992731660752198.post-5893320771852952959</id><published>2007-07-31T09:39:00.000-07:00</published><updated>2007-07-31T09:34:08.541-07:00</updated><title type='text'>IF-THEN-ELSE logic in a SELECT statement</title><content type='html'>&lt;DIV&gt;&lt;FONT face=Arial&gt;SELECT ename, CASE WHEN sal = 1000 THEN 'Minimum  wage'&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  WHEN sal &amp;gt; 1000 THEN 'Over  paid'&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  ELSE 'Under  paid'&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  END AS "Salary Status"&lt;BR&gt;FROM&amp;nbsp;&amp;nbsp; emp&lt;/FONT&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-5893320771852952959?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/5893320771852952959/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=5893320771852952959' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/5893320771852952959'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/5893320771852952959'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2007/07/if-then-else-logic-in-select-statement.html' title='IF-THEN-ELSE logic in a SELECT statement'/><author><name>Henry</name><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-6802992731660752198.post-8142270600302186882</id><published>2007-07-23T12:23:00.000-07:00</published><updated>2007-07-23T12:18:31.191-07:00</updated><title type='text'>3 Ways to Reload Page with JavaScript</title><content type='html'>&lt;DIV&gt; &lt;P class=code1&gt;window.location.reload()&lt;/P&gt; &lt;P&gt;history.go(0)&lt;/P&gt; &lt;P&gt;window.location.href=window.location.href&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/6802992731660752198-8142270600302186882?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/8142270600302186882/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=8142270600302186882' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/8142270600302186882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/8142270600302186882'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2007/07/3-ways-to-reload-page-with-javascript.html' title='3 Ways to Reload Page with JavaScript'/><author><name>Henry</name><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-6802992731660752198.post-5632617510791242010</id><published>2007-07-20T14:59:00.000-07:00</published><updated>2007-07-20T14:58:11.886-07:00</updated><title type='text'>JavaScript Dynamic Document Creation in New Windows</title><content type='html'>&lt;DIV&gt;&lt;FONT face=Arial size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt; &lt;DIV&gt;&lt;FONT face=Arial size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt; &lt;DIV&gt;newtext = document.forms.mainForm("&lt;SPAN  class=296435721-20072007&gt;MyTextAreaElement&lt;/SPAN&gt;").value&lt;SPAN  class=296435721-20072007&gt;;&lt;/SPAN&gt;&lt;/DIV&gt; &lt;DIV&gt;newwindow = window.open(); &lt;/DIV&gt; &lt;DIV&gt;newdocument = newwindow.document; &lt;/DIV&gt; &lt;DIV&gt;newdocument.write(newtext);&lt;/DIV&gt; &lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-5632617510791242010?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/5632617510791242010/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=5632617510791242010' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/5632617510791242010'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/5632617510791242010'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2007/07/javascript-dynamic-document-creation-in.html' title='JavaScript Dynamic Document Creation in New Windows'/><author><name>Henry</name><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-6802992731660752198.post-6963851955638918737</id><published>2007-07-17T09:47:00.000-07:00</published><updated>2007-07-17T09:45:48.796-07:00</updated><title type='text'>Object doesn't support this property or method: 'EOF'</title><content type='html'>&lt;DIV&gt;&lt;SPAN class=205284516-17072007&gt;Happens when y&lt;/SPAN&gt;ou forgot to use SET  when assigning an object to a variable, e.g.:&amp;nbsp;&lt;BR&gt;&amp;nbsp;&lt;BR&gt;&lt;/DIV&gt; &lt;DIV&gt; &lt;TABLE cellSpacing=0 cellPadding=10 border=0&gt;   &lt;TBODY&gt;   &lt;TR&gt;     &lt;TD class=code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set conn =        CreateObject("ADODB.Connection")&amp;nbsp;&lt;BR&gt;&amp;nbsp; &amp;nbsp; conn.open        "&amp;lt;connection string&amp;gt;"&amp;nbsp;&lt;BR&gt;&amp;nbsp; &amp;nbsp; rs =        conn.execute("SELECT columns FROM table")&amp;nbsp;&lt;BR&gt;&amp;nbsp; &amp;nbsp; if not        rs.eof then ' error here&amp;nbsp;&lt;BR&gt;&amp;nbsp; &amp;nbsp; '    ..&amp;nbsp;&lt;BR&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt; &lt;DIV&gt;&amp;nbsp;&lt;BR&gt;The line starting with "rs = " should start with "SET rs = "  ...&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-6963851955638918737?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/6963851955638918737/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=6963851955638918737' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/6963851955638918737'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/6963851955638918737'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2007/07/object-doesnt-support-this-property-or.html' title='Object doesn&apos;t support this property or method: &apos;EOF&apos;'/><author><name>Henry</name><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-6802992731660752198.post-2447436714135041412</id><published>2007-07-05T11:06:00.000-07:00</published><updated>2007-07-05T11:02:11.047-07:00</updated><title type='text'>Using Exists statement in If statements</title><content type='html'>&lt;DIV&gt; &lt;P&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN class=425020418-05072007&gt;You'd think there'd be  a more elegant way to do this, but...&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN class=425020418-05072007&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT  face=Arial size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt; &lt;P&gt;&lt;FONT face=Arial size=2&gt;IF&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Arial&gt; NOT  EXISTS(&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt; &lt;P&gt;&lt;FONT size=2&gt;&lt;FONT face=Arial&gt;SELECT TOP 1 1 FROM&amp;nbsp;&lt;SPAN  class=425020418-05072007&gt;mytable&lt;/SPAN&gt; WHERE&amp;nbsp;&lt;SPAN  class=425020418-05072007&gt;my&lt;/SPAN&gt;&lt;SPAN class=425020418-05072007&gt;id&lt;/SPAN&gt; =  @&lt;SPAN class=425020418-05072007&gt;myid&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P&gt;&lt;FONT size=2&gt;&lt;FONT face=Arial&gt;) &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P&gt;&lt;FONT size=2&gt;&lt;FONT face=Arial&gt;BEGIN&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P&gt;&lt;FONT&gt;&lt;FONT&gt;&lt;SPAN class=425020418-05072007&gt;&lt;FONT face=Arial size=2&gt;...do  stuff&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P&gt;&lt;FONT&gt;&lt;FONT&gt;&lt;SPAN class=425020418-05072007&gt;&lt;FONT face=Arial  size=2&gt;END&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P&gt;&lt;FONT&gt;&lt;FONT&gt;&lt;SPAN  class=425020418-05072007&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-2447436714135041412?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/2447436714135041412/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=2447436714135041412' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/2447436714135041412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/2447436714135041412'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2007/07/using-exists-statement-in-if-statements.html' title='Using Exists statement in If statements'/><author><name>Henry</name><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-6802992731660752198.post-6074063891448492093</id><published>2007-07-02T11:34:00.000-07:00</published><updated>2007-07-02T11:33:29.025-07:00</updated><title type='text'>Annoying Issue with Float and IsNumeric</title><content type='html'>&lt;DIV&gt;&lt;SPAN class=527003218-02072007&gt;&lt;FONT face=Arial size=2&gt;Warning:&amp;nbsp; When  you use IsNumeric in VBScript, it will allow commas to pass.&amp;nbsp; If you don't  remove those commas from the string and pass it to a T-SQL procedure which  expects a Float, you will get an error "&lt;/FONT&gt; &lt;P&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;Error converting data type varchar to floa&lt;SPAN  class=527003218-02072007&gt;t."&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;&lt;SPAN  class=527003218-02072007&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-6074063891448492093?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/6074063891448492093/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=6074063891448492093' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/6074063891448492093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/6074063891448492093'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2007/07/annoying-issue-with-float-and-isnumeric.html' title='Annoying Issue with Float and IsNumeric'/><author><name>Henry</name><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-6802992731660752198.post-6667626160657933257</id><published>2007-06-28T09:27:00.000-07:00</published><updated>2007-06-28T09:33:18.047-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='marquee'/><category scheme='http://www.blogger.com/atom/ns#' term='continuous marquee'/><category scheme='http://www.blogger.com/atom/ns#' term='continuous scroller'/><category scheme='http://www.blogger.com/atom/ns#' term='scroller'/><title type='text'>Continuous Marquee or Scroller</title><content type='html'>&lt;pre&gt;&lt;br /&gt;// Deluxe Scroller&lt;br /&gt;// Author: Howard Covitz&lt;br /&gt;// Date: May 4, 2007&lt;br /&gt;// All rights reserved, yada yada yada&lt;br /&gt;function startScroller(dn_newsID,scrollWindowHeight,scrollWindowWidth,scrollListHeight,scrollInterval,debug)&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt; // Set defaults&lt;br /&gt; if (!dn_newsID){&lt;br /&gt;  dn_newsID = 'articleScroller' ;&lt;br /&gt; }&lt;br /&gt; if (!scrollWindowHeight){&lt;br /&gt;  scrollWindowHeight = 200 ;&lt;br /&gt; }&lt;br /&gt; if (!scrollWindowWidth){&lt;br /&gt;  scrollWindowWidth = 350;&lt;br /&gt; }&lt;br /&gt; if (!scrollListHeight){&lt;br /&gt;  scrollListHeight = 900;&lt;br /&gt; }&lt;br /&gt; if (!scrollInterval){&lt;br /&gt;  scrollInterval = 30;&lt;br /&gt; }&lt;br /&gt; if (!debug){&lt;br /&gt;  debug= false;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; var n=document.getElementById(dn_newsID);&lt;br /&gt; if(!n){return;}&lt;br /&gt; n.style.height= scrollWindowHeight + 'px'; //sets window height&lt;br /&gt;&lt;br /&gt; var c=n.getElementsByTagName('div')[0]; // carOne&lt;br /&gt; var d=n.getElementsByTagName('div')[1]; // carTwo&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt; c.innerHTML = d.innerHTML;&lt;br /&gt; c.style.width= (scrollWindowWidth - 30) + 'px'; //sets data list width, should be less than window width.&lt;br /&gt; d.style.width= (scrollWindowWidth - 30) + 'px'; //sets data list width, should be less than window width.&lt;br /&gt;// var scrollListHeight = c.offsetHeight; &lt;br /&gt; if(debug){&lt;br /&gt;  alert(c.offsetHeight);&lt;br /&gt; }&lt;br /&gt; if (c.offsetHeight == 0){ //will hopefully only happen in IE if nested down far&lt;br /&gt;  var strContent = c.innerHTML;&lt;br /&gt;  //determine character count: strip out HTML tags first&lt;br /&gt;  strContent = strContent.replace(/&amp;(lt|gt);/g, function (strMatch, p1){&lt;br /&gt;     return (p1 == "lt")? "&lt;" : "&gt;"; });&lt;br /&gt;   strContent = strContent.replace(/&lt;\/?[^&gt;]+(&gt;|$)/g, "");  &lt;br /&gt;   var contentLen = strContent.length;&lt;br /&gt;   //following optimized for stylesheet listed later&lt;br /&gt;   var charsPerLine = 60;&lt;br /&gt;   var lineHeight = 15;&lt;br /&gt;   var numItems = 8;&lt;br /&gt;   var sepLineHeight = 20;&lt;br /&gt;   var buffer = 20;&lt;br /&gt;   scrollListHeight = Math.round(((contentLen/charsPerLine) * lineHeight) + (numItems * sepLineHeight) + buffer);&lt;br /&gt;   &lt;br /&gt; }&lt;br /&gt; else{&lt;br /&gt;  scrollListHeight = c.offsetHeight + 15; //pad for firefox????&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; c.scrollInterval = scrollInterval;&lt;br /&gt; c.scrollListHeight= scrollListHeight;&lt;br /&gt; c.scrollWindowHeight =  scrollWindowHeight;&lt;br /&gt; if(scrollWindowHeight &gt; scrollListHeight){&lt;br /&gt;  //c.dn_startpos= scrollListHeight; // Should be presumed height of data list or window height, whichever is smaller  &lt;br /&gt; }&lt;br /&gt; c.dn_scrollpos = c.scrollWindowHeight;&lt;br /&gt;&lt;br /&gt; d.scrollInterval = scrollInterval;&lt;br /&gt; d.dn_endpos= scrollListHeight * -2;  //double check this logic...maybe this is no longer used below&lt;br /&gt; d.dn_startpos = scrollWindowHeight;//since it is relative positioned, it will line up right after carOne&lt;br /&gt; d.dn_scrollpos = d.dn_startpos;&lt;br /&gt; &lt;br /&gt; c.myinterval = setInterval('scrollDOMnews("' + dn_newsID + '")',c.scrollInterval);&lt;br /&gt;&lt;br /&gt; c.onmouseover=function(){clearInterval(c.myinterval);}&lt;br /&gt; c.onmouseout=function(){c.myinterval =setInterval('scrollDOMnews("' + dn_newsID + '")',c.scrollInterval);}&lt;br /&gt; d.onmouseover=function(){clearInterval(c.myinterval);}&lt;br /&gt; d.onmouseout=function(){c.myinterval =setInterval('scrollDOMnews("' + dn_newsID + '")',c.scrollInterval);}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function scrollDOMnews(dn_newsID)&lt;br /&gt;{&lt;br /&gt; var c=document.getElementById(dn_newsID).getElementsByTagName('div')[0]; &lt;br /&gt; c.style.top=c.dn_scrollpos+'px'; &lt;br /&gt; if(c.dn_scrollpos== Math.round((c.scrollListHeight * -1))){ //ie -700&lt;br /&gt;  c.dn_scrollpos=c.scrollListHeight; //directly below car two&lt;br /&gt; }&lt;br /&gt; c.dn_scrollpos--;&lt;br /&gt; scrollDOMnews2(dn_newsID); &lt;br /&gt;}&lt;br /&gt;function scrollDOMnews2(dn_newsID)&lt;br /&gt;{&lt;br /&gt; var c=document.getElementById(dn_newsID).getElementsByTagName('div')[1]; &lt;br /&gt; c.style.top=c.dn_scrollpos+'px'; &lt;br /&gt; if(c.dn_scrollpos==Math.round(c.dn_endpos)){&lt;br /&gt;  c.dn_scrollpos= 0;&lt;br /&gt; }&lt;br /&gt; c.dn_scrollpos--; &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; /* stop scroller when window is closed */&lt;br /&gt;window.onunload=function()&lt;br /&gt;{&lt;br /&gt; // this will have to be a nice to have:&lt;br /&gt; //clearInterval(dn_interval);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;EXPECTED FORMAT OF HTML&lt;br /&gt;&lt;br /&gt;&amp;lt;div class="marquee" id="articleScroller" style="overflow:hidden;postion:relative;"&amp;gt;&lt;br /&gt; &amp;lt;div style="position:relative;"&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt; &amp;lt;div style="position:relative;"&amp;gt;&lt;br /&gt;  {CONTENT GOES HERE -- just don't use DIV tags}&lt;br /&gt; &amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;USAGE:&lt;br /&gt;startScroller("articleScroller",200,350,30);&lt;br /&gt;startScroller("articleScroller2",200,350,30);&lt;br /&gt;&lt;br /&gt;In IE, optimized for following styles:&lt;br /&gt;.marquee{&lt;br /&gt; padding:0px;&lt;br /&gt; margin:0px;&lt;br /&gt;}&lt;br /&gt;.marquee ul{&lt;br /&gt; margin:0px;&lt;br /&gt; padding:0px;&lt;br /&gt;}&lt;br /&gt;.marquee li{&lt;br /&gt;    padding-bottom:3px;&lt;br /&gt; margin:0px;&lt;br /&gt;}&lt;br /&gt;.marquee li a:link, .marquee li a:visited {&lt;br /&gt; font: 11px Arial, Verdana, sans-serif;&lt;br /&gt; text-decoration:underline;&lt;br /&gt; font-weight:bold;&lt;br /&gt;}&lt;br /&gt;.marquee li a:hover, .marquee li a:active {&lt;br /&gt; font: 11px Arial, Verdana, sans-serif;&lt;br /&gt; text-decoration: none;&lt;br /&gt; font-weight:bold;&lt;br /&gt;}&lt;br /&gt;.marquee p{&lt;br /&gt; padding:0px;&lt;br /&gt; margin:0px;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;*/&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-6667626160657933257?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/6667626160657933257/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=6667626160657933257' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/6667626160657933257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/6667626160657933257'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2007/06/continuous-marquee-or-scroller.html' title='Continuous Marquee or Scroller'/><author><name>Henry</name><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><entry><id>tag:blogger.com,1999:blog-6802992731660752198.post-2558548233280842879</id><published>2007-06-28T08:48:00.000-07:00</published><updated>2007-06-28T08:49:33.990-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><title type='text'>Stripping out HTML tags with JavaScript</title><content type='html'>strContent = strContent.replace(/&amp;(ltgt);/g, function (strMatch, p1){&lt;br /&gt;       return (p1 == "lt")? "&lt;" : "&gt;"; });&lt;br /&gt;strContent = strContent.replace(/&lt;\/?[^&gt;]+(&gt;$)/g, "");&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-2558548233280842879?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/2558548233280842879/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=2558548233280842879' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/2558548233280842879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/2558548233280842879'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2007/06/stripping-out-html-tags-with-javascript.html' title='Stripping out HTML tags with JavaScript'/><author><name>Henry</name><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-6802992731660752198.post-1587157510720924704</id><published>2007-06-25T12:54:00.000-07:00</published><updated>2007-06-28T09:34:57.179-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySpace'/><category scheme='http://www.blogger.com/atom/ns#' term='Facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='&quot;social networking&quot;'/><title type='text'>A quick aside on web culture</title><content type='html'>I recently started checking out the notorious MySpace and Facebook some more.  About a year ago I checked them out just to make sure I was up on the latest Big Thing in my industry (since I am a web programmer, after all).  I think at that time you had to have a valid University e-mail, so luckily I had my Brown alumni one.  But then recently I read this &lt;a href="http://www.slate.com/id/2161456/"&gt;Facebook for Fiftysomethings&lt;/a&gt; at one of my daily reads (Slate.com, I regularly check out the Human Nature column, not to mention the political stuff), which motivated me to the extent that, if Emily Yoffe could do it, so could I (though in retrospect she does seem so naive).  Especially in the past month, I've been trying to be more active about "participating", and as will be no surprise to those familiar with both sites, Facebook was more to my taste.  Well, on the heels of that realization, I read this today:&lt;a href="http://www.boingboing.net/2007/06/24/myspace_facebook_mir.html"&gt;MySpace, Facebook mirror class divisions in US society&lt;/a&gt;. &lt;br /&gt;This just confirms my own observations.&lt;br /&gt;&lt;br /&gt;Also, isn't "Social Networking" redundant?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-1587157510720924704?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/1587157510720924704/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=1587157510720924704' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/1587157510720924704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/1587157510720924704'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2007/06/quick-aside-on-web-culture.html' title='A quick aside on web culture'/><author><name>Henry</name><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-6802992731660752198.post-5596105188480107303</id><published>2007-06-18T17:12:00.000-07:00</published><updated>2007-06-28T09:35:55.357-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VBScript'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP'/><title type='text'>Classic ASP Error Handling</title><content type='html'>&lt;DIV&gt;On Error Resume Next&lt;/DIV&gt; &lt;DIV&gt;&lt;SPAN class=471090800-19062007&gt;'this will cause the page to continue  processing when it hits an error&lt;/SPAN&gt;&lt;/DIV&gt; &lt;DIV&gt;&lt;SPAN class=471090800-19062007&gt;&lt;FONT face=Arial  size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/DIV&gt; &lt;DIV&gt;&lt;SPAN class=471090800-19062007&gt;&lt;FONT face=Arial size=2&gt;'after all  scripting&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt; &lt;DIV&gt;&lt;SPAN class=471090800-19062007&gt;If Err.number &amp;lt;&amp;gt; 0 then &lt;/SPAN&gt;&lt;/DIV&gt; &lt;DIV&gt;&lt;SPAN class=471090800-19062007&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim msg msg = "Error  Number " &amp;amp; Err.number &amp;amp; " occurred in millionDollarRequest.asp.  Description: " &amp;amp; Err.Description &amp;amp; " SOURCE: " &amp;amp; Err.Source  &lt;/SPAN&gt;&lt;/DIV&gt; &lt;DIV&gt;&lt;SPAN class=471090800-19062007&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; msg = msg &amp;amp; "  IPADDRESS: " &amp;amp; Request.ServerVariables("REMOTE_HOST") &lt;/SPAN&gt;&lt;/DIV&gt; &lt;DIV&gt;&lt;SPAN class=471090800-19062007&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sendEmailError(msg)  &lt;/SPAN&gt;&lt;/DIV&gt; &lt;DIV&gt;&lt;SPAN class=471090800-19062007&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Err.Clear &lt;/SPAN&gt;&lt;/DIV&gt; &lt;DIV&gt;&lt;SPAN class=471090800-19062007&gt;&lt;/SPAN&gt;&lt;SPAN class=471090800-19062007&gt;end  if&lt;/SPAN&gt;&lt;/DIV&gt; &lt;DIV&gt;&lt;SPAN class=471090800-19062007&gt;&lt;FONT face=Arial  size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/DIV&gt; &lt;DIV&gt;&lt;SPAN class=471090800-19062007&gt;&lt;FONT face=Arial size=2&gt;'typical error  message mailer&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt; &lt;DIV&gt;&lt;SPAN class=471090800-19062007&gt;&lt;FONT face=Arial size=2&gt;function  sendEmailError(msg)&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt; &lt;DIV&gt;&lt;SPAN class=471090800-19062007&gt;&lt;FONT face=Arial size=2&gt;&amp;nbsp;Dim  Mailer&lt;BR&gt;&amp;nbsp;Set Mailer =  Server.CreateObject("SMTPsvg.Mailer")&lt;BR&gt;&amp;nbsp;Mailer.RemoteHost&amp;nbsp; =  "mail.XXXXXX.com"&lt;BR&gt;&amp;nbsp;Mailer.Timeout = 30&lt;BR&gt;&amp;nbsp;Mailer.FromName = "ERROR  REPORT"&lt;BR&gt;&amp;nbsp;Mailer.FromAddress = "&lt;A  href="mailto:webmaster@XXXXXXXXX.com"&gt;webmaster@XXXXXXXXX.com&lt;/A&gt;"&lt;BR&gt;&amp;nbsp;Mailer.ReplyTo  = "&lt;A  href="mailto:webmaster@XXXXXXX.com"&gt;webmaster@XXXXXXX.com&lt;/A&gt;"&lt;BR&gt;&amp;nbsp;Mailer.AddRecipient  "", "&lt;A  href="mailto:YYYYYYY@XXXXXXXXX.com"&gt;YYYYYYY@XXXXXXXXX.com&lt;/A&gt;"&lt;BR&gt;&amp;nbsp;Mailer.Subject  = "ERROR Alert"&lt;BR&gt;&amp;nbsp;Mailer.BodyText =  msg&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&amp;nbsp;sendEmail = Mailer.SendMail&lt;BR&gt;end  function&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt; &lt;DIV&gt;&lt;SPAN class=471090800-19062007&gt;&lt;FONT face=Arial  size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/DIV&gt; &lt;DIV&gt;&lt;SPAN class=471090800-19062007&gt;&lt;FONT face=Arial  size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/DIV&gt; &lt;DIV&gt;&lt;SPAN class=471090800-19062007&gt;&lt;FONT face=Arial  size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-5596105188480107303?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/5596105188480107303/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=5596105188480107303' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/5596105188480107303'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/5596105188480107303'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2007/06/classic-asp-error-handling.html' title='Classic ASP Error Handling'/><author><name>Henry</name><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-6802992731660752198.post-6091391051255865803</id><published>2007-06-15T13:53:00.000-07:00</published><updated>2011-10-28T15:45:35.180-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><category scheme='http://www.blogger.com/atom/ns#' term='T-SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>T-SQL Searching through the schema</title><content type='html'>&lt;strong&gt;For SQL Server 2005:&lt;/strong&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;strong&gt;Some examples:&lt;/strong&gt;&lt;br /&gt;select * from sys.objects&lt;br /&gt;select * from sys.sql_modules  &lt;em&gt;&amp;lt;-- Stored Procedures and Views&lt;/em&gt;&lt;br /&gt;select * from sys.columns&lt;br /&gt;select * from sys.triggers&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Searching the text of all stored procedures:&lt;/strong&gt;&lt;br /&gt;select o.name from sys.sql_modules m&lt;br /&gt;inner join sys.objects o&lt;br /&gt;on m.object_id = o.object_id&lt;br /&gt;where m.definition like '%&lt;em&gt;string you are looking for&lt;/em&gt;%'&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Searching for tables that contain the column (field) you want:&lt;/strong&gt;&lt;br /&gt;select a.name &lt;br /&gt;from sys.objects a &lt;br /&gt;inner join sys.columns b&lt;br /&gt;on a.object_id = b.object_id&lt;br /&gt;where b.name='&lt;em&gt;column name you are looking for&lt;/em&gt;'&lt;br /&gt;&lt;br /&gt;Another way:&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'franklin gothic book', tahoma, verdana; font-size: 13px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;table border="0" cellpadding="10" cellspacing="0" style="font-family: 'franklin gothic book', tahoma, verdana; font-size: 13px;"&gt;&lt;tbody style="font-family: 'franklin gothic book', tahoma, verdana; font-size: 13px;"&gt;&lt;tr style="font-family: 'franklin gothic book', tahoma, verdana; font-size: 13px;"&gt;&lt;td class="code" style="background-attachment: initial; background-clip: initial; background-color: #ececec; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; color: navy; font-family: 'andale mono', monaco, 'lucida console', 'courier new'; font-size: 11px; line-height: 14px; padding-bottom: 4px; padding-left: 7px; padding-right: 7px; padding-top: 7px;"&gt;SELECT ROUTINE_NAME, ROUTINE_DEFINITION&amp;nbsp;&lt;br style="font-family: 'franklin gothic book', tahoma, verdana; font-size: 13px;" /&gt;&amp;nbsp; &amp;nbsp; FROM INFORMATION_SCHEMA.ROUTINES&amp;nbsp;&lt;br style="font-family: 'franklin gothic book', tahoma, verdana; font-size: 13px;" /&gt;&amp;nbsp; &amp;nbsp; WHERE ROUTINE_DEFINITION LIKE '%foobar%'&amp;nbsp;&lt;br style="font-family: 'franklin gothic book', tahoma, verdana; font-size: 13px;" /&gt;&amp;nbsp; &amp;nbsp; AND ROUTINE_TYPE='PROCEDURE'&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;For SQL Server 2000:&lt;/strong&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;strong&gt;Searching the text of all stored procedures:&lt;/strong&gt;&lt;br /&gt;select object_name(id)&lt;br /&gt;from syscomments &lt;br /&gt;where objectproperty(id,'IsProcedure') = 1&lt;br /&gt;and [text] like '%string you are looking for%'&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-6091391051255865803?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/6091391051255865803/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=6091391051255865803' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/6091391051255865803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/6091391051255865803'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2007/06/t-sql-searching-through-schema.html' title='T-SQL Searching through the schema'/><author><name>Henry</name><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-6802992731660752198.post-807242371917748313</id><published>2007-06-13T11:27:00.000-07:00</published><updated>2007-06-13T11:24:18.011-07:00</updated><title type='text'>Stylesheet based on existence of Javascript</title><content type='html'>To help deal with those with Javascript disabled on their browsers:&lt;p&gt;&amp;lt;noscript&amp;gt;&lt;br&gt;&amp;lt;LINK REL=&amp;quot;stylesheet&amp;quot; href=&amp;quot;nojavascript.css&amp;quot;&amp;gt;&lt;br&gt;&amp;lt;/noscript&amp;gt;&lt;br&gt;&amp;lt;script language=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br&gt;&amp;lt;!--&lt;br&gt;if (document.images){&lt;br&gt;	document.write(&amp;quot;&amp;lt;link rel=&amp;#39;stylesheet&amp;#39; href=&amp;#39;javascript.css&amp;#39;&amp;gt;&amp;quot;);&lt;br&gt;}&lt;br&gt;//--&amp;gt;&lt;br&gt;&amp;lt;/script&amp;gt;&lt;p&gt;This is helpful when using CSS properties like &amp;quot;display:none&amp;quot; and&lt;br&gt;&amp;quot;display:block&amp;quot; with JavaScript to hide Divs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-807242371917748313?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/807242371917748313/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=807242371917748313' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/807242371917748313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/807242371917748313'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2007/06/stylesheet-based-on-existence-of.html' title='Stylesheet based on existence of Javascript'/><author><name>Henry</name><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-6802992731660752198.post-1468812047235850114</id><published>2007-06-12T16:26:00.000-07:00</published><updated>2007-06-28T09:36:52.278-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><category scheme='http://www.blogger.com/atom/ns#' term='VBScript'/><title type='text'>Reqular Expressions and SQL</title><content type='html'>FIND: ^\(.+\)$&lt;br /&gt;REPLACE: \0 = formToSql("\0")&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-1468812047235850114?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/1468812047235850114/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=1468812047235850114' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/1468812047235850114'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/1468812047235850114'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2007/06/reqular-expressions-and-sql.html' title='Reqular Expressions and SQL'/><author><name>Henry</name><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-6802992731660752198.post-1035893248107860500</id><published>2007-06-12T15:33:00.001-07:00</published><updated>2007-07-18T12:29:41.604-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><title type='text'>Getting index value of new record created</title><content type='html'>In your T-SQL stored procedure, after you insert the new record into a table that has an auto-incrementing index, use the following:&lt;br /&gt;&lt;br /&gt;SELECT NEWID = SCOPE_IDENTITY()&lt;br /&gt;OR (if using pre 2000 sql server)&lt;br /&gt;select returnval = @@identity&lt;br /&gt;&lt;br /&gt;You can retrieve the value in the following way:&lt;br /&gt;set rs = con.Execute(strSql)&lt;br /&gt;yournewID = rs(0)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-1035893248107860500?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/1035893248107860500/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=1035893248107860500' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/1035893248107860500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/1035893248107860500'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2007/06/getting-index-value-of-new-record.html' title='Getting index value of new record created'/><author><name>Henry</name><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-6802992731660752198.post-918785498675935522</id><published>2007-06-08T10:29:00.000-07:00</published><updated>2007-06-08T10:53:15.229-07:00</updated><title type='text'>Recent Projects</title><content type='html'>&lt;div&gt;My manager is really impressed with a documentation tool I created in C#. The mechanics of it were no big deal (aside from getting ASP.NET to behave). But I did have to get real crafty in getting at and creating the data. Used a whole grab bag of tricks to mine it. Sometimes regular expressions, sometimes Textpad features, sometimes just Excel.&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.deltronweb.com/hcovitz/resume/blog/uploaded_images/documentationTool-717476.JPG"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://www.deltronweb.com/hcovitz/resume/blog/uploaded_images/documentationTool-717473.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://www.deltronweb.com/hcovitz/resume/blog/uploaded_images/documentationTool-743840.JPG"&gt;&lt;/a&gt;&lt;br /&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/6802992731660752198-918785498675935522?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/918785498675935522/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=918785498675935522' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/918785498675935522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/918785498675935522'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2007/06/recent-projects.html' title='Recent Projects'/><author><name>Henry</name><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-6802992731660752198.post-5238376061696231207</id><published>2007-06-08T10:24:00.000-07:00</published><updated>2007-06-08T11:35:59.268-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flash online sketching'/><title type='text'>Sketchpad for Blogs</title><content type='html'>I've been wanting to transfer my vast notebook of programming notes, gathered from about 7 years of work, to a blog. Problem is, I intersperse my text with sketches or doodles that server as important memory tags. I know there have been online sketching apps around for years (usually done in Flash), where you can even save the stuff online. So it would seem an easy leap to make that part of a blog. But I've been looking around for about a week and nobody seems to have done this.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This exercise also made me realize how little we've come in truly integrating sketching and word processing, regardless of online or not. It should be a lot simpler now for users of MS Word to add a sketch, but it is poorly integrated.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.zefrank.com/scribbler/"&gt;http://www.zefrank.com/scribbler/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.sketchswap.com/"&gt;http://www.sketchswap.com/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.cumulatelabs.com/cumulatedraw/"&gt;http://www.cumulatelabs.com/cumulatedraw/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.benettonplay.com/toys/flipbook/flipbook_maker.php"&gt;http://www.benettonplay.com/toys/flipbook/flipbook_maker.php&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Perhaps due to some synchronicity, though, I did just find this new post, which is tantalizingly close to what I'm talking about.&lt;br /&gt;&lt;a href="http://www.thedatafarm.com/blog/2007/06/04/EmbeddingSilverlightAnnotationInMyDasblogPost.aspx"&gt;Julie Lerman Blog - Embedding Silverlight Annotation in my dasblog post&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;(which references &lt;a href="http://silverlight.net/Samples/1.1/Scribbler/run/default.html"&gt;http://silverlight.net/Samples/1.1/Scribbler/run/default.html&lt;/a&gt;)&lt;br /&gt;Note that it dovetails with another fascination of mine: the &lt;a href="http://www.macromediahelp.com/flash/flash_object_fix/"&gt;demise of Flash&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-5238376061696231207?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/5238376061696231207/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=5238376061696231207' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/5238376061696231207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/5238376061696231207'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2007/06/sketchpad-for-blogs.html' title='Sketchpad for Blogs'/><author><name>Henry</name><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><entry><id>tag:blogger.com,1999:blog-6802992731660752198.post-5562833678104976269</id><published>2007-06-08T10:04:00.000-07:00</published><updated>2007-06-08T10:07:18.681-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web design'/><title type='text'>Progressive Enhancement</title><content type='html'>I'm currently digesting an article on Progressive Enhancement as a an alternative approach to web design, as opposed to Graceful Degradation.  It turns out I've been a natural P.E. adopter and just never knew it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6802992731660752198-5562833678104976269?l=itperfecting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itperfecting.blogspot.com/feeds/5562833678104976269/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6802992731660752198&amp;postID=5562833678104976269' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/5562833678104976269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6802992731660752198/posts/default/5562833678104976269'/><link rel='alternate' type='text/html' href='http://itperfecting.blogspot.com/2007/06/progressive-enhancement.html' title='Progressive Enhancement'/><author><name>Henry</name><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></feed>
