<?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-661371502199197807</id><updated>2011-12-15T04:12:27.253-05:00</updated><category term='images'/><category term='codesmith'/><category term='calendar'/><category term='Repeater'/><category term='SHA-384'/><category term='boss'/><category term='tsql'/><category term='html5'/><category term='free'/><category term='url rewrite'/><category term='gridview'/><category term='folder size'/><category term='events'/><category term='api'/><category term='date'/><category term='pause'/><category term='c# 3.0'/><category term='validation'/><category term='threading'/><category term='html stripper'/><category term='webresource.axd'/><category term='t-sql'/><category term='c#'/><category term='firefox'/><category term='regularexpressionvalidator'/><category term='SHA-512'/><category term='encryption'/><category term='queries'/><category term='applications'/><category term='base64'/><category term='pageglimpse'/><category term='rowcommand'/><category term='css'/><category term='cursors'/><category term='ValidateRequest'/><category term='apps'/><category term='Safari'/><category term='uniqueidentifier'/><category term='httpmodule'/><category term='.net'/><category term='dotnet'/><category term='atlas'/><category term='FF'/><category term='windows phone'/><category term='nvarchar max'/><category term='command paramters'/><category term='linq'/><category term='wizard'/><category term='job opening'/><category term='dts'/><category term='guid'/><category term='varchar max'/><category term='Predictable'/><category term='parameters'/><category term='format'/><category term='web developer'/><category term='hackday08'/><category term='ssis'/><category term='Static'/><category term='employment'/><category term='MIX10'/><category term='palindrome'/><category term='application pools'/><category term='compatibility'/><category term='flickr'/><category term='visual studio 2005'/><category term='html'/><category term='tweets'/><category term='optimization'/><category term='SelectParameters'/><category term='VS2010'/><category term='asp.net'/><category term='regular expressions'/><category term='hackday07'/><category term='mouseover'/><category term='sha-1'/><category term='sha1'/><category term='yahoo'/><category term='cryptography'/><category term='javascript'/><category term='url shortening'/><category term='cache'/><category term='.net 3.0'/><category term='import'/><category term='ASP.NET 4'/><category term='CommandName'/><category term='benchmark'/><category term='export'/><category term='template'/><category term='scriptresource.axd'/><category term='hackday06'/><category term='asp.net 1.1'/><category term='Visual Studio 2010'/><category term='form'/><category term='string'/><category term='compression'/><category term='problem solving'/><category term='ClientIDRowSuffix'/><category term='csharp'/><category term='downloads'/><category term='SHA-256'/><category term='Chrome'/><category term='browser'/><category term='animation'/><category term='Design View'/><category term='SHA-2'/><category term='windows'/><category term='asp.net 2.0'/><category term='sp1'/><category term='services'/><category term='l2s'/><category term='Gran Paradiso Alpha 1'/><category term='ClientIDMode'/><category term='html tags'/><category term='Lists'/><category term='database'/><category term='hackday'/><category term='stored procedures'/><category term='scale'/><category term='tabs'/><category term='wallpaper'/><category term='ajax'/><category term='httphandler'/><category term='precision'/><category term='website'/><category term='sql server'/><category term='position'/><category term='Source View'/><category term='ItemCommand'/><category term='regex'/><category term='jquery'/><category term='bxslider'/><category term='delegate methods'/><category term='tests'/><category term='slider'/><category term='predicates'/><category term='odata'/><category term='jobs'/><category term='sql'/><category term='minify'/><category term='tab control'/><category term='CommandArgument'/><category term='twitter'/><category term='search'/><category term='standards'/><category term='IE'/><category term='.net 2.0'/><category term='md5'/><category term='code generator'/><category term='decimal'/><category term='data'/><title type='text'>.net rush</title><subtitle type='html'>a collection of .net knowledge, code, and apps</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>68</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-8036757000846978275</id><published>2011-12-05T13:18:00.004-05:00</published><updated>2011-12-05T13:23:47.024-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='palindrome'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='problem solving'/><title type='text'>Palindrome Interview Question</title><content type='html'>When I was in college I met with a couple of Microsoft employees who interviewed me for an intern position with the Office team. In the interview they asked me to write something that would check if a word is a &lt;a href="http://en.wikipedia.org/wiki/Palindrome" target="_blank"&gt;palindrome&lt;/a&gt; or not. A palindrome is a word that can be spelled the same way forward and backward. I thought this was a great interview question and have since used it when I interview job candidates.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Can you come up with the solution? I'll post mine in the comments.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-8036757000846978275?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/8036757000846978275/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=8036757000846978275' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/8036757000846978275'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/8036757000846978275'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2011/12/palindrome-interview-question.html' title='Palindrome Interview Question'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-2714682071940933811</id><published>2011-06-14T00:13:00.002-04:00</published><updated>2011-06-14T00:16:39.396-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='base64'/><category scheme='http://www.blogger.com/atom/ns#' term='images'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>Base64 Image Converter</title><content type='html'>I needed to base64 encode an image tonight but couldn't find the right tool online to do it for me - so I ended up writing one myself. You can use the generated base64 encoded string as the SRC attribute in your HTML or CSS.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.rushfrisby.com/base64/"&gt;http://www.rushfrisby.com/base64/&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-2714682071940933811?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/2714682071940933811/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=2714682071940933811' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/2714682071940933811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/2714682071940933811'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2011/06/base64-image-converter.html' title='Base64 Image Converter'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-4475152377813892177</id><published>2011-05-24T13:19:00.004-04:00</published><updated>2011-05-24T13:23:45.147-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='jquery'/><title type='text'>Numeric only input using jQuery</title><content type='html'>This is a nifty little jquery snippet I use all the time for numeric only text boxes.&lt;div&gt;&lt;pre style="font-family:Consolas;font-size:15;color:#222222;background:#fdfdfd;"&gt;&lt;pre style="font-family:Consolas;font-size:15;color:#222222;background:#fdfdfd;"&gt;&lt;pre style="font-family:Consolas;font-size:15;color:#222222;background:#fdfdfd;"&gt;&lt;pre style="font-family:Consolas;font-size:15;color:#222222;background:#fdfdfd;"&gt;$(&lt;span style="color:#7b35b6;"&gt;function&lt;/span&gt; () {&lt;/pre&gt;&lt;pre style="font-family:Consolas;font-size:15;color:#222222;background:#fdfdfd;"&gt;    $(&lt;span style="color:#f26421;"&gt;".numeric"&lt;/span&gt;).live(&lt;span style="color:#f26421;"&gt;"keydown"&lt;/span&gt;, &lt;span style="color:#7b35b6;"&gt;function&lt;/span&gt; (e) {&lt;/pre&gt;&lt;pre style="font-family:Consolas;font-size:15;color:#222222;background:#fdfdfd;"&gt;        &lt;span style="color:#7b35b6;"&gt;if&lt;/span&gt; (e.keyCode != 46 &amp;amp;&amp;amp; e.keyCode != 8) {&lt;/pre&gt;&lt;pre style="font-family:Consolas;font-size:15;color:#222222;background:#fdfdfd;"&gt;            &lt;span style="color:#7b35b6;"&gt;if&lt;/span&gt; (e.keyCode &amp;lt; 48 || e.keyCode &amp;gt; 57) {&lt;/pre&gt;&lt;pre style="font-family:Consolas;font-size:15;color:#222222;background:#fdfdfd;"&gt;                e.preventDefault();&lt;/pre&gt;&lt;pre style="font-family:Consolas;font-size:15;color:#222222;background:#fdfdfd;"&gt;            }&lt;/pre&gt;&lt;pre style="font-family:Consolas;font-size:15;color:#222222;background:#fdfdfd;"&gt;        }&lt;/pre&gt;&lt;pre style="font-family:Consolas;font-size:15;color:#222222;background:#fdfdfd;"&gt;    });&lt;/pre&gt;&lt;pre style="font-family:Consolas;font-size:15;color:#222222;background:#fdfdfd;"&gt;});&lt;/pre&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-4475152377813892177?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/4475152377813892177/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=4475152377813892177' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/4475152377813892177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/4475152377813892177'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2011/05/numeric-only-input-using-jquery.html' title='Numeric only input using jQuery'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-2221690418568468839</id><published>2011-05-24T10:50:00.004-04:00</published><updated>2011-05-24T10:54:19.734-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='windows phone'/><title type='text'>WP7 Mango features</title><content type='html'>These are features that were announced and demo'ed during today's Microsoft press event on Windows Phone 7.&lt;div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Notifications are pushed to "smarter" live tiles.&lt;/li&gt;&lt;li&gt;Live Tiles light up, flip around.&lt;/li&gt;&lt;li&gt;Twitter and LinkedIn are now integrated.&lt;/li&gt;&lt;li&gt;People Hub shows pictures from all social networks.&lt;/li&gt;&lt;li&gt;Groups let you bunch related people together.&lt;/li&gt;&lt;li&gt;Live Messenger.&lt;/li&gt;&lt;li&gt;Facebook Chat.&lt;/li&gt;&lt;li&gt;Smarter keyboard that predicts the next word for you.&lt;/li&gt;&lt;li&gt;SMS to chat for continuing conversations.&lt;/li&gt;&lt;li&gt;More emails options like flagging an e-mail as 'do not forward'.&lt;/li&gt;&lt;li&gt;Calendar shows Facebook events.&lt;/li&gt;&lt;li&gt;Text to speech and voice recognition.&lt;/li&gt;&lt;li&gt;Facebook tagging/face detection built in.&lt;/li&gt;&lt;li&gt;More integration with Skydrive/Office 365.&lt;/li&gt;&lt;li&gt;You can now jump out of a game quickly and back in again without losing your progress.&lt;/li&gt;&lt;li&gt;Multi-tasking.&lt;/li&gt;&lt;li&gt;IE9-Hardware acceleration.&lt;/li&gt;&lt;li&gt;IE9-HTML5 support.&lt;/li&gt;&lt;li&gt;IE9-App Connect, handing off a search result to an app.&lt;/li&gt;&lt;li&gt;Greater international support.&lt;/li&gt;&lt;li&gt;Photo-to-search feature.&lt;/li&gt;&lt;li&gt;Proximity search for local stores,events,etc.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Over 500 features added but all have not been listed yet. I am hoping they separated the volume controls. My ear drums are suffering in the meantime.&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/661371502199197807-2221690418568468839?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/2221690418568468839/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=2221690418568468839' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/2221690418568468839'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/2221690418568468839'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2011/05/wp7-mango-features.html' title='WP7 Mango features'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-2560439448728601970</id><published>2011-03-28T14:13:00.005-04:00</published><updated>2011-05-23T23:54:26.750-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='url shortening'/><title type='text'>goLook.at Short URL Service - Or is it?</title><content type='html'>I just learned of goLook.at &lt;a href="http://en.wikipedia.org/wiki/URL_shortening"&gt;URL shortening&lt;/a&gt; service. The point of this service is to make shortened URLs "better". How do they make them "better" you may ask? They add TAGS! I can't believe someone wasted their time adding tags to shortened URLs.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When you shorten a URL you do so because you want something AS SHORT AS POSSIBLE so that you can squeeze it into a tweet or an email. A goLook.at URL ends up looking like http://short.url/&lt;b&gt;tag1&lt;/b&gt;/&lt;b&gt;tag2&lt;/b&gt;/&lt;b&gt;tag3&lt;/b&gt; and gets longer and longer based on how many tags you add. That is the complete opposite of what you are trying accomplish by shortening a URL.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When shortening URLs, SHORTER IS BETTER.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I could see this working in the future though if you came up with a better tagging schema. You would have to base the shortened url off of a one word keyword. Most shortened urls have a randomly generated string which identifies the URL. Instead of using a random string it would use the keyword as the identifier. If another person chooses the same keyword you could prompt them for another, or append something to it that would make it unique.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;for example this is the shortened url for this blog: http://d76.fi.gd&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;with a keyword "dotnet" you could make it short and better by generating something like http://dotnet.fi.gd&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;and if "dotnet" was already used to shorten another url you could prompt me for another keyword or suggest something like http://dotnet2.fi.gd, although I would probably choose another keyword.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Better yet, if you could infer a keyword for me, or give me a list to choose from (from my page title, meta keywords, the full URL, or page content) then I wouldn't even have to type anything in, I could view a list of possibilities and pick one.&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/661371502199197807-2560439448728601970?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/2560439448728601970/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=2560439448728601970' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/2560439448728601970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/2560439448728601970'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2011/03/golookat-short-url-service-or-is-it.html' title='goLook.at Short URL Service - Or is it?'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-287997901697326840</id><published>2010-12-10T01:10:00.002-05:00</published><updated>2010-12-10T01:15:40.123-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='free'/><category scheme='http://www.blogger.com/atom/ns#' term='folder size'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='applications'/><title type='text'>Windows Folder Size Report application</title><content type='html'>This app will sum up the size of all folders and their subfolders and files. This quickly lets you see what folders are taking up a lot of space on your hard drive.&lt;br /&gt;&lt;br /&gt;Download: &lt;a href="http://files.rushfrisby.com/dotnetrush/programs/FolderSize.zip"&gt;FolderSize.zip&lt;/a&gt; (6 KB)&lt;br /&gt;&lt;br /&gt;Screenshot:&lt;br /&gt;&lt;img src="http://files.rushfrisby.com/dotnetrush/images/FolderSize.jpg" alt="" /&gt;&lt;br /&gt;&lt;br /&gt;You must have .NET 4 installed to run it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-287997901697326840?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/287997901697326840/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=287997901697326840' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/287997901697326840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/287997901697326840'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2010/12/windows-folder-size-report-application.html' title='Windows Folder Size Report application'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-5075187271574662578</id><published>2010-04-11T17:15:00.004-04:00</published><updated>2010-04-11T17:26:41.386-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='compatibility'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='html5'/><category scheme='http://www.blogger.com/atom/ns#' term='tests'/><category scheme='http://www.blogger.com/atom/ns#' term='browser'/><category scheme='http://www.blogger.com/atom/ns#' term='benchmark'/><title type='text'>Browser HTML 5 Tests</title><content type='html'>Found a site that tests HTML 5 features and produces a score for your browser. Here are the results for 5 browsers I ran on my machine.&lt;br /&gt;&lt;br /&gt;&lt;table style="border-collapse: collapse; border: 1px solid rgb(192, 192, 192);" border="1" cellpadding="5"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Browser&lt;/th&gt;&lt;th&gt;Score&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;IE 8&lt;/td&gt;&lt;td style="text-align: right;"&gt;19 / 160&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Firefox 3.6.3&lt;/td&gt;&lt;td style="text-align: right;"&gt;101 / 160&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Opera 10.51&lt;/td&gt;&lt;td style="text-align: right;"&gt;102 / 160&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Safari 4.0.3&lt;/td&gt;&lt;td style="text-align: right;"&gt;115 / 160&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Chrome 4.1.249&lt;/td&gt;&lt;td style="text-align: right;"&gt;118 / 160&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;And here are the screenshots.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://files.rushfrisby.com/images/html5tests/ie8.png" alt="" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://files.rushfrisby.com/images/html5tests/firefox.png" alt="" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://files.rushfrisby.com/images/html5tests/opera.png" alt="" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://files.rushfrisby.com/images/html5tests/safari.png" alt="" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://files.rushfrisby.com/images/html5tests/chrome.png" alt="" /&gt;&lt;br /&gt;&lt;br /&gt;If you would like to test your browser go to &lt;a href="http://html5test.com/" target="_blank"&gt;http://html5test.com/&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-5075187271574662578?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/5075187271574662578/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=5075187271574662578' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/5075187271574662578'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/5075187271574662578'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2010/04/browser-html-5-tests.html' title='Browser HTML 5 Tests'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-6026478057533284436</id><published>2010-04-01T01:30:00.005-04:00</published><updated>2011-06-09T13:30:50.740-04:00</updated><title type='text'>Sign-up Codes</title><content type='html'>Today I am going to write about something that bugs me: &lt;span style="font-weight: bold;"&gt;sign-up codes&lt;/span&gt;. So what's the big deal with sign-up codes? A lot of companies use them as a way to influence consumers into signing up for a service or getting something for free, etc. You usually get them when you buy something. Remember the Sprite "under the cap" promo? These things are everywhere.&lt;br /&gt;&lt;br /&gt;Now the problem I have with these sign-up codes is that they aren't always readable. How can you tell the difference between a 1 (the number one), I (the capital letter I), and l (the lower case letter L). Depending on the font your code was printed in you could be in real trouble trying to figure it out. That's not the only letter too. How about O and 0. 5 and S. vv (double v's) and w. 9 and g (a far stretch but could look similar depending on the font), 2 and Z. Now let's say your sign-up code is quite long and you have a few of these letter or numbers in it. How the heck are you supposed to figure it out then?&lt;br /&gt;&lt;br /&gt;It just so happens that I tried to enter a sign-up code today and ran across this very issue. I have the 1-I-l character twice and O-0. My sign-up code is "7MIOBlaYjp". So how many combination am I guessing here?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:180%;"&gt;18&lt;/span&gt;&lt;br /&gt;here they all are...&lt;br /&gt;&lt;ol&gt;&lt;li&gt;7MIOBIaYjp&lt;/li&gt;&lt;li&gt;7MIOBlaYjp&lt;/li&gt;&lt;li&gt;7MIOB1aYjp&lt;/li&gt;&lt;li&gt;7MlOBIaYjp&lt;/li&gt;&lt;li&gt;7MlOBlaYjp&lt;/li&gt;&lt;li&gt;7MlOB1aYjp&lt;/li&gt;&lt;li&gt;7M1OBIaYjp&lt;/li&gt;&lt;li&gt;7M1OBlaYjp&lt;/li&gt;&lt;li&gt;7M1OB1aYjp&lt;/li&gt;&lt;li&gt;7MI0BIaYjp&lt;/li&gt;&lt;li&gt;7MI0BlaYjp&lt;/li&gt;&lt;li&gt;7MI0B1aYjp&lt;/li&gt;&lt;li&gt;7Ml0BIaYjp&lt;/li&gt;&lt;li&gt;7Ml0BlaYjp&lt;/li&gt;&lt;li&gt;7Ml0B1aYjp&lt;/li&gt;&lt;li&gt;7M10BIaYjp&lt;/li&gt;&lt;li&gt;7M10BlaYjp&lt;/li&gt;&lt;li&gt;7M10B1aYjp&lt;/li&gt;&lt;/ol&gt;Who would ever enter a code that many times? After a few tries most people will give up! It's hard to believe someone didn't notice this when they were tasked with this promo code project. Didn't they want me to get into whatever they were promoting? They were almost successful but because of a poor choice in code characters have now lost me.&lt;br /&gt;&lt;br /&gt;A few years ago I was approached by a toy company to do write an application that generates promo codes. I made sure to take these considerations into account when I wrote it. Plus - it's toys so that means there is a good chance a child is entering the code. You have to make it AS EASY AS POSSIBLE!&lt;br /&gt;&lt;br /&gt;The same thing goes for &lt;a href="http://en.wikipedia.org/wiki/CAPTCHA"&gt;CAPTCHA&lt;/a&gt;'s.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-6026478057533284436?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/6026478057533284436/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=6026478057533284436' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/6026478057533284436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/6026478057533284436'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2010/04/sign-up-codes.html' title='Sign-up Codes'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-5655078538194965600</id><published>2010-03-31T11:36:00.004-04:00</published><updated>2010-03-31T11:45:01.064-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='animation'/><category scheme='http://www.blogger.com/atom/ns#' term='bxslider'/><category scheme='http://www.blogger.com/atom/ns#' term='jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='mouseover'/><category scheme='http://www.blogger.com/atom/ns#' term='slider'/><category scheme='http://www.blogger.com/atom/ns#' term='pause'/><title type='text'>jQuery bxSlider plugin update</title><content type='html'>I helped a friend modify the bxSlider plugin for jQuery yesterday. I emailed the author to see if he wanted to update his file with my changes but in case he doesn't I thought I would post it here in case anyone ever needed it.&lt;br /&gt;&lt;br /&gt;The change is to make the slider pause when your mouse hovers over an item. &lt;a href="http://files.rushfrisby.com/demo/bxSlider/demo.htm"&gt;You can view a demo and download it here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-5655078538194965600?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/5655078538194965600/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=5655078538194965600' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/5655078538194965600'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/5655078538194965600'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2010/03/jquery-bxslider-plugin-update.html' title='jQuery bxSlider plugin update'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-3526089887652921308</id><published>2010-03-28T16:53:00.008-04:00</published><updated>2010-03-28T17:13:20.351-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='browser'/><category scheme='http://www.blogger.com/atom/ns#' term='benchmark'/><title type='text'>Updated Javascript Benchmarks</title><content type='html'>&lt;p&gt;I got rid of IE8 in compatibility mode and added Opera 10.51. The Opera website claims that it is the fastest browser in the world. Let's see how their javascript engine stacks up against everyone else. Here are my updated results:&lt;/p&gt;&lt;table border="1" cellspacing="0" cellpadding="5" style="border-collapse:collapse;border:1px solid #808080;"&gt;&lt;tr&gt;&lt;th&gt;Browser&lt;/th&gt;&lt;th&gt;Result&lt;/th&gt;&lt;th&gt;xSlower&lt;/th&gt;&lt;th&gt;Link&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Opera 10.51&lt;/td&gt;&lt;td style="text-align:right;"&gt;471.8ms&lt;/td&gt;&lt;td style="text-align:right;"&gt;-&lt;/td&gt;&lt;td&gt;&lt;a href="http://www2.webkit.org/perf/sunspider-0.9/sunspider-results.html?%7B%223d-cube%22:%5B21,13,20,20,17%5D,%223d-morph%22:%5B23,18,24,24,24%5D,%223d-raytrace%22:%5B26,22,26,26,25%5D,%22access-binary-trees%22:%5B7,6,7,7,7%5D,%22access-fannkuch%22:%5B25,23,27,26,26%5D,%22access-nbody%22:%5B12,17,18,17,17%5D,%22access-nsieve%22:%5B7,7,8,7,7%5D,%22bitops-3bit-bits-in-byte%22:%5B3,3,4,3,4%5D,%22bitops-bits-in-byte%22:%5B4,5,5,5,5%5D,%22bitops-bitwise-and%22:%5B3,3,2,3,2%5D,%22bitops-nsieve-bits%22:%5B13,11,11,12,8%5D,%22controlflow-recursive%22:%5B6,6,5,6,6%5D,%22crypto-aes%22:%5B20,18,19,18,18%5D,%22crypto-md5%22:%5B8,7,6,7,6%5D,%22crypto-sha1%22:%5B3,5,5,5,5%5D,%22date-format-tofte%22:%5B21,26,26,23,25%5D,%22date-format-xparb%22:%5B29,37,26,29,35%5D,%22math-cordic%22:%5B12,12,12,13,12%5D,%22math-partial-sums%22:%5B37,40,31,33,40%5D,%22math-spectral-norm%22:%5B10,10,10,10,10%5D,%22regexp-dna%22:%5B13,20,17,19,20%5D,%22string-base64%22:%5B25,37,32,33,36%5D,%22string-fasta%22:%5B31,30,25,27,30%5D,%22string-tagcloud%22:%5B43,41,39,42,31%5D,%22string-unpack-code%22:%5B28,28,33,37,29%5D,%22string-validate-input%22:%5B26,34,26,35,28%5D%7D" target="_blank"&gt;Full results&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Chrome 4.0&lt;/td&gt;&lt;td style="text-align:right;"&gt;592.2ms&lt;/td&gt;&lt;td style="text-align:right;"&gt;1.26&lt;/td&gt;&lt;td&gt;&lt;a href="http://www2.webkit.org/perf/sunspider-0.9/sunspider-results.html?%7B%223d-cube%22:%5B22,22,31,25,25%5D,%223d-morph%22:%5B41,33,26,32,32%5D,%223d-raytrace%22:%5B28,27,33,26,26%5D,%22access-binary-trees%22:%5B3,2,3,3,2%5D,%22access-fannkuch%22:%5B21,20,18,17,20%5D,%22access-nbody%22:%5B29,20,26,27,25%5D,%22access-nsieve%22:%5B6,5,6,6,6%5D,%22bitops-3bit-bits-in-byte%22:%5B3,4,4,4,4%5D,%22bitops-bits-in-byte%22:%5B12,12,12,12,12%5D,%22bitops-bitwise-and%22:%5B13,10,14,13,9%5D,%22bitops-nsieve-bits%22:%5B22,21,22,19,23%5D,%22controlflow-recursive%22:%5B5,5,4,5,4%5D,%22crypto-aes%22:%5B15,13,14,13,13%5D,%22crypto-md5%22:%5B16,16,15,15,13%5D,%22crypto-sha1%22:%5B15,16,15,15,16%5D,%22date-format-tofte%22:%5B35,37,40,34,38%5D,%22date-format-xparb%22:%5B36,43,35,32,33%5D,%22math-cordic%22:%5B18,24,17,24,26%5D,%22math-partial-sums%22:%5B33,26,21,31,21%5D,%22math-spectral-norm%22:%5B12,12,7,12,12%5D,%22regexp-dna%22:%5B17,20,22,24,17%5D,%22string-base64%22:%5B28,29,26,25,29%5D,%22string-fasta%22:%5B39,32,39,33,38%5D,%22string-tagcloud%22:%5B39,42,43,37,38%5D,%22string-unpack-code%22:%5B64,64,63,58,58%5D,%22string-validate-input%22:%5B47,36,42,41,30%5D%7D" target="_blank"&gt;Full results&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Safari 4.0&lt;/td&gt;&lt;td style="text-align:right;"&gt;873.0ms&lt;/td&gt;&lt;td style="text-align:right;"&gt;1.85&lt;/td&gt;&lt;td&gt;&lt;a href="http://www2.webkit.org/perf/sunspider-0.9/sunspider-results.html?%7B%223d-cube%22:%5B85,71,76,77,74%5D,%223d-morph%22:%5B50,62,56,57,55%5D,%223d-raytrace%22:%5B43,55,46,50,49%5D,%22access-binary-trees%22:%5B9,8,9,8,8%5D,%22access-fannkuch%22:%5B22,21,21,22,21%5D,%22access-nbody%22:%5B48,59,54,57,58%5D,%22access-nsieve%22:%5B8,9,8,8,9%5D,%22bitops-3bit-bits-in-byte%22:%5B4,4,4,5,4%5D,%22bitops-bits-in-byte%22:%5B9,10,10,10,9%5D,%22bitops-bitwise-and%22:%5B5,5,4,5,5%5D,%22bitops-nsieve-bits%22:%5B29,29,28,28,29%5D,%22controlflow-recursive%22:%5B5,4,4,5,5%5D,%22crypto-aes%22:%5B19,19,19,19,19%5D,%22crypto-md5%22:%5B25,27,28,26,26%5D,%22crypto-sha1%22:%5B28,28,25,28,29%5D,%22date-format-tofte%22:%5B39,31,37,39,41%5D,%22date-format-xparb%22:%5B45,46,36,45,47%5D,%22math-cordic%22:%5B58,49,51,48,50%5D,%22math-partial-sums%22:%5B56,59,59,52,51%5D,%22math-spectral-norm%22:%5B31,31,25,29,29%5D,%22regexp-dna%22:%5B30,33,34,32,37%5D,%22string-base64%22:%5B28,30,33,30,26%5D,%22string-fasta%22:%5B46,51,50,48,46%5D,%22string-tagcloud%22:%5B43,43,44,44,42%5D,%22string-unpack-code%22:%5B60,53,54,63,63%5D,%22string-validate-input%22:%5B44,48,37,46,46%5D%7D" target="_blank"&gt;Full results&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Firefox 3.6&lt;/td&gt;&lt;td style="text-align:right;"&gt;892.6ms&lt;/td&gt;&lt;td style="text-align:right;"&gt;1.89&lt;/td&gt;&lt;td&gt;&lt;a href="http://www2.webkit.org/perf/sunspider-0.9/sunspider-results.html?%7B%223d-cube%22:%5B38,37,36,34,35%5D,%223d-morph%22:%5B46,46,45,45,45%5D,%223d-raytrace%22:%5B57,57,56,56,57%5D,%22access-binary-trees%22:%5B38,36,35,35,34%5D,%22access-fannkuch%22:%5B65,63,64,65,62%5D,%22access-nbody%22:%5B22,23,21,22,21%5D,%22access-nsieve%22:%5B11,11,11,11,12%5D,%22bitops-3bit-bits-in-byte%22:%5B2,2,1,2,1%5D,%22bitops-bits-in-byte%22:%5B10,10,10,9,9%5D,%22bitops-bitwise-and%22:%5B2,2,3,2,2%5D,%22bitops-nsieve-bits%22:%5B22,22,24,22,23%5D,%22controlflow-recursive%22:%5B40,39,39,40,39%5D,%22crypto-aes%22:%5B29,28,25,29,25%5D,%22crypto-md5%22:%5B13,12,11,12,11%5D,%22crypto-sha1%22:%5B7,7,7,7,7%5D,%22date-format-tofte%22:%5B78,76,72,76,70%5D,%22date-format-xparb%22:%5B76,75,75,75,75%5D,%22math-cordic%22:%5B31,28,28,28,28%5D,%22math-partial-sums%22:%5B28,16,16,16,16%5D,%22math-spectral-norm%22:%5B6,6,6,6,6%5D,%22regexp-dna%22:%5B53,47,49,49,51%5D,%22string-base64%22:%5B13,11,10,10,11%5D,%22string-fasta%22:%5B56,56,54,55,55%5D,%22string-tagcloud%22:%5B77,75,72,69,75%5D,%22string-unpack-code%22:%5B81,83,77,76,82%5D,%22string-validate-input%22:%5B32,26,26,31,29%5D%7D" target="_blank"&gt;Full results&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;IE8 64-bit&lt;/td&gt;&lt;td style="text-align:right;"&gt;4928.4ms&lt;/td&gt;&lt;td style="text-align:right;"&gt;10.45&lt;/td&gt;&lt;td&gt;&lt;a href="http://www2.webkit.org/perf/sunspider-0.9/sunspider-results.html?%7B%223d-cube%22:%5B200,198,200,195,202%5D,%223d-morph%22:%5B160,155,157,155,152%5D,%223d-raytrace%22:%5B237,233,232,233,233%5D,%22access-binary-trees%22:%5B183,170,175,170,167%5D,%22access-fannkuch%22:%5B450,452,453,453,440%5D,%22access-nbody%22:%5B212,212,217,218,215%5D,%22access-nsieve%22:%5B150,153,145,142,145%5D,%22bitops-3bit-bits-in-byte%22:%5B100,102,102,95,97%5D,%22bitops-bits-in-byte%22:%5B152,147,148,155,158%5D,%22bitops-bitwise-and%22:%5B258,260,263,255,262%5D,%22bitops-nsieve-bits%22:%5B207,202,205,206,205%5D,%22controlflow-recursive%22:%5B125,120,120,127,120%5D,%22crypto-aes%22:%5B178,175,167,172,173%5D,%22crypto-md5%22:%5B98,95,98,103,103%5D,%22crypto-sha1%22:%5B113,105,108,100,113%5D,%22date-format-tofte%22:%5B237,225,225,227,235%5D,%22date-format-xparb%22:%5B225,222,217,218,218%5D,%22math-cordic%22:%5B220,228,227,225,225%5D,%22math-partial-sums%22:%5B163,158,158,162,155%5D,%22math-spectral-norm%22:%5B145,137,140,140,145%5D,%22regexp-dna%22:%5B230,232,228,233,245%5D,%22string-base64%22:%5B167,167,167,170,170%5D,%22string-fasta%22:%5B243,240,245,237,242%5D,%22string-tagcloud%22:%5B175,172,173,173,172%5D,%22string-unpack-code%22:%5B173,168,168,170,157%5D,%22string-validate-input%22:%5B175,182,180,180,175%5D%7D" target="_blank"&gt;Full results&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;IE8 32-bit&lt;/td&gt;&lt;td style="text-align:right;"&gt;5051.0ms&lt;/td&gt;&lt;td style="text-align:right;"&gt;10.71&lt;/td&gt;&lt;td&gt;&lt;a href="http://www2.webkit.org/perf/sunspider-0.9/sunspider-results.html?%7B%223d-cube%22:%5B219,210,210,211,212%5D,%223d-morph%22:%5B175,180,176,178,171%5D,%223d-raytrace%22:%5B259,251,260,249,251%5D,%22access-binary-trees%22:%5B173,181,178,179,172%5D,%22access-fannkuch%22:%5B378,373,377,383,379%5D,%22access-nbody%22:%5B248,241,246,241,246%5D,%22access-nsieve%22:%5B124,127,126,130,119%5D,%22bitops-3bit-bits-in-byte%22:%5B111,108,118,115,115%5D,%22bitops-bits-in-byte%22:%5B119,114,121,113,112%5D,%22bitops-bitwise-and%22:%5B307,318,311,308,310%5D,%22bitops-nsieve-bits%22:%5B185,188,187,177,185%5D,%22controlflow-recursive%22:%5B139,135,132,136,143%5D,%22crypto-aes%22:%5B161,161,169,162,162%5D,%22crypto-md5%22:%5B121,111,112,106,117%5D,%22crypto-sha1%22:%5B115,119,118,116,108%5D,%22date-format-tofte%22:%5B240,237,236,244,239%5D,%22date-format-xparb%22:%5B226,225,227,217,232%5D,%22math-cordic%22:%5B241,237,234,239,237%5D,%22math-partial-sums%22:%5B188,182,186,189,187%5D,%22math-spectral-norm%22:%5B166,174,179,166,165%5D,%22regexp-dna%22:%5B186,182,190,183,194%5D,%22string-base64%22:%5B181,183,188,184,175%5D,%22string-fasta%22:%5B268,274,274,265,271%5D,%22string-tagcloud%22:%5B173,173,194,173,173%5D,%22string-unpack-code%22:%5B176,175,182,174,175%5D,%22string-validate-input%22:%5B176,177,181,185,179%5D%7D" target="_blank"&gt;Full results&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;p&gt;Wow Opera is almost 2 times faster than Safari and Firefox! Granted I think they left out support for some things which is helping their claim to being the fastest. (like HTML5 possibly?)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-3526089887652921308?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/3526089887652921308/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=3526089887652921308' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/3526089887652921308'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/3526089887652921308'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2010/03/updated-javascript-benchmarks.html' title='Updated Javascript Benchmarks'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-6654914636177925350</id><published>2010-03-23T22:30:00.006-04:00</published><updated>2010-03-31T11:45:18.617-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tweets'/><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='twitter'/><title type='text'>How to display your Twitter timeline using jQuery</title><content type='html'>I was challenged by a co-worker to display my latest tweets using classic ASP. He is always bragging about how awesome jQuery is (and I agree) so I used that instead. This is the result:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://files.rushfrisby.com/misc/jquery_tweets/tweets.htm"&gt;http://files.rushfrisby.com/misc/jquery_tweets/tweets.htm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;star wars commander voice&amp;gt;you may copy-and-paste when ready&amp;lt;/star wars commander voice&amp;gt; but copy the tweet_formatter.js file to your own place because i might move it later  ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-6654914636177925350?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/6654914636177925350/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=6654914636177925350' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/6654914636177925350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/6654914636177925350'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2010/03/how-to-display-your-twitter-timeline.html' title='How to display your Twitter timeline using jQuery'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-7385419929642433114</id><published>2010-03-21T12:56:00.003-04:00</published><updated>2010-03-21T13:01:14.747-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MIX10'/><title type='text'>Favorite MIX10 Sessions</title><content type='html'>I just got back from MIX10 and thought I would share some of my favorite sessions. My top 3 are&lt;div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://live.visitmix.com/MIX10/Sessions/FT14"&gt;Web Deployment Made Awesome: If You're Using XCopy, You're Doing It Wrong&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://live.visitmix.com/MIX10/Sessions/FT06"&gt;Deep Dive into Orchard Extensibility for CMS Developers&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://live.visitmix.com/MIX10/Sessions/EX03"&gt;Modern Web Form Design&lt;/a&gt;&lt;/li&gt;&lt;/ol&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/661371502199197807-7385419929642433114?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/7385419929642433114/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=7385419929642433114' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/7385419929642433114'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/7385419929642433114'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2010/03/favorite-mix10-sessions.html' title='Favorite MIX10 Sessions'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-6391540547013180582</id><published>2010-03-19T13:23:00.006-04:00</published><updated>2010-03-31T11:45:44.640-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='data'/><category scheme='http://www.blogger.com/atom/ns#' term='api'/><category scheme='http://www.blogger.com/atom/ns#' term='services'/><category scheme='http://www.blogger.com/atom/ns#' term='odata'/><title type='text'>The OData Revolution</title><content type='html'>In November I watched a PDC09 presentation on OData. I thought it was an incredible technology. This week I attended MIX10 and got a first hand look at how excited others were about it. There is a lot of emphasis from Microsoft being put on OData and after my experience this week I feel that this is the beginning of a &lt;span style="font-weight: bold;"&gt;data revolution&lt;/span&gt;. The idea is much larger than API's and web services. It is going to change the web as we know it. I expect to see much more on the web and in web-connected applications in terms of information and usefulness. If you don't believe me &lt;a href="http://microsoftpdc.com/Sessions/FT12"&gt;watch this presentation&lt;/a&gt; and check out the &lt;a href="http://www.odata.org/"&gt;OData website&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;On a completely separate note, I would like to help &lt;a href="http://www.hanselman.com/blog/"&gt;Scott&lt;/a&gt; get to the number one search result in Bing for the term "Scott". There's your link dude.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-6391540547013180582?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/6391540547013180582/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=6391540547013180582' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/6391540547013180582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/6391540547013180582'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2010/03/odata-revolution.html' title='The OData Revolution'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-2669100984449876934</id><published>2010-03-13T12:47:00.004-05:00</published><updated>2010-03-13T12:52:56.345-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ValidateRequest'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET 4'/><title type='text'>ValidateRequest in ASP.NET 4</title><content type='html'>When switching to ASP.NET 4 I found that my existing ValidateRequest="false" settings were not working, and thus when I submitted HTML in the content of a textbox I would get ASP.NET errors.&lt;br /&gt;&lt;br /&gt;In order for ValidateRequest to work in ASP.NET 4 you need to add this to your web.config file.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;system.web&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;httpRuntime requestValidationMode="2.0" /&amp;gt;&lt;br /&gt;&amp;lt/system.web&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This will get things working back to normal.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-2669100984449876934?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/2669100984449876934/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=2669100984449876934' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/2669100984449876934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/2669100984449876934'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2010/03/validaterequest-in-aspnet-4.html' title='ValidateRequest in ASP.NET 4'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-6332487013833523857</id><published>2010-03-13T11:36:00.007-05:00</published><updated>2010-03-13T11:53:01.766-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ClientIDRowSuffix'/><category scheme='http://www.blogger.com/atom/ns#' term='Static'/><category scheme='http://www.blogger.com/atom/ns#' term='Predictable'/><category scheme='http://www.blogger.com/atom/ns#' term='ClientIDMode'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET 4'/><title type='text'>ClientIDs in databound ASP.NET 4 controls</title><content type='html'>I am working on a project where I have recently changed the  clientIDMode to "Static" in the web.config file. This seemed great because all of the output would have clean ids, however it broke asp.net ajax control toolkit controls that were nested in databound controls (such as a gridview).&lt;br /&gt;&lt;br /&gt;There is an easy fix for the scenario.&lt;br /&gt;&lt;br /&gt;What I did was set the ClientIDMode to "Predictable" on the gridview. I also set ClientIDRowSuffix to the name of the Primary Key field of my datasource. What is nice about using "Predictable" is that the ClientID values do not contain strings like "ctlxxx". Here is a quick example:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;asp:GridView ID="gvGroups" runat="server" AllowPaging="True" SkinID="GridView"&lt;br /&gt;        AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="GroupID" ClientIDMode="Predictable" ClientIDRowSuffix="GroupID"&lt;br /&gt;        DataSourceID="SqlDataSourceGroups" OnRowCommand="gvGroups_RowCommand"&amp;gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-6332487013833523857?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/6332487013833523857/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=6332487013833523857' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/6332487013833523857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/6332487013833523857'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2010/03/clientids-in-databound-aspnet-controls.html' title='ClientIDs in databound ASP.NET 4 controls'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-7933721137593041987</id><published>2010-03-09T00:30:00.005-05:00</published><updated>2010-03-09T00:39:23.912-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Source View'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='Design View'/><category scheme='http://www.blogger.com/atom/ns#' term='VS2010'/><title type='text'>Enable "Design View" for ASP.NET Pages in Visual Studio 2010</title><content type='html'>I installed Visual Studio 2010 RC and found it annoying that I could not switch to design view. I mostly work in source code view but there are some things I like using design view for, like editing all of my validation controls.&lt;br /&gt;&lt;br /&gt;It took a few minutes but this is how I enabled it. Go to Tools &gt; Options. This dialog box will open:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://files.rushfrisby.com/images/vs2010_enable_design_view.gif" alt="Enable " design="" view="" for="" net="" pages="" in="" visual="" studio="" 2010="" /&gt;&lt;br /&gt;&lt;br /&gt;Look under the "HTML Designer" item. You may have to check the box in the lower left corner first that says "Show all settings". Then check the box that says "Enable HTML Designer (required restart of Visual Studio)". Choose which view you want your pages to start up in. Restart Visual Studio and you are all set! The next time you open a page it will have the familiar Design/Split/Source tabs at the bottom of the text editor.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-7933721137593041987?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/7933721137593041987/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=7933721137593041987' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/7933721137593041987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/7933721137593041987'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2010/03/enable-design-view-for-aspnet-pages-in.html' title='Enable &quot;Design View&quot; for ASP.NET Pages in Visual Studio 2010'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-6075724713969027047</id><published>2010-02-28T12:00:00.004-05:00</published><updated>2010-03-28T17:11:46.954-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='FF'/><category scheme='http://www.blogger.com/atom/ns#' term='IE'/><category scheme='http://www.blogger.com/atom/ns#' term='Safari'/><category scheme='http://www.blogger.com/atom/ns#' term='Chrome'/><category scheme='http://www.blogger.com/atom/ns#' term='browser'/><category scheme='http://www.blogger.com/atom/ns#' term='benchmark'/><title type='text'>Javascript Benchmarks</title><content type='html'>&lt;p&gt;See my updated results &lt;a href="http://dotnetrush.blogspot.com/2010/03/updated-javascript-benchmarks.html"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Here is a snapshot of what kind of PC I ran my benchmarks on:&lt;/p&gt;&lt;p&gt;&lt;img src="http://files.rushfrisby.com/images/system_info.gif" /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;And here are the results.&lt;/p&gt;&lt;p&gt;&lt;table border="1" cellspacing="0" cellpadding="5" style="border-collapse:collapse;border:1px solid #808080;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Browser&lt;/th&gt;&lt;th&gt;Result&lt;/th&gt;&lt;th&gt;xSlower&lt;/th&gt;&lt;th&gt;Link&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Chrome 4.0&lt;/td&gt;&lt;td style="text-align:right;"&gt;592.2ms&lt;/td&gt;&lt;td style="text-align:right;"&gt;-&lt;/td&gt;&lt;td&gt;&lt;a href="http://www2.webkit.org/perf/sunspider-0.9/sunspider-results.html?%7B%223d-cube%22:%5B22,22,31,25,25%5D,%223d-morph%22:%5B41,33,26,32,32%5D,%223d-raytrace%22:%5B28,27,33,26,26%5D,%22access-binary-trees%22:%5B3,2,3,3,2%5D,%22access-fannkuch%22:%5B21,20,18,17,20%5D,%22access-nbody%22:%5B29,20,26,27,25%5D,%22access-nsieve%22:%5B6,5,6,6,6%5D,%22bitops-3bit-bits-in-byte%22:%5B3,4,4,4,4%5D,%22bitops-bits-in-byte%22:%5B12,12,12,12,12%5D,%22bitops-bitwise-and%22:%5B13,10,14,13,9%5D,%22bitops-nsieve-bits%22:%5B22,21,22,19,23%5D,%22controlflow-recursive%22:%5B5,5,4,5,4%5D,%22crypto-aes%22:%5B15,13,14,13,13%5D,%22crypto-md5%22:%5B16,16,15,15,13%5D,%22crypto-sha1%22:%5B15,16,15,15,16%5D,%22date-format-tofte%22:%5B35,37,40,34,38%5D,%22date-format-xparb%22:%5B36,43,35,32,33%5D,%22math-cordic%22:%5B18,24,17,24,26%5D,%22math-partial-sums%22:%5B33,26,21,31,21%5D,%22math-spectral-norm%22:%5B12,12,7,12,12%5D,%22regexp-dna%22:%5B17,20,22,24,17%5D,%22string-base64%22:%5B28,29,26,25,29%5D,%22string-fasta%22:%5B39,32,39,33,38%5D,%22string-tagcloud%22:%5B39,42,43,37,38%5D,%22string-unpack-code%22:%5B64,64,63,58,58%5D,%22string-validate-input%22:%5B47,36,42,41,30%5D%7D" target="_blank"&gt;Full results&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Safari 4.0&lt;/td&gt;&lt;td style="text-align:right;"&gt;873.0ms&lt;/td&gt;&lt;td style="text-align:right;"&gt;1.47&lt;/td&gt;&lt;td&gt;&lt;a href="http://www2.webkit.org/perf/sunspider-0.9/sunspider-results.html?%7B%223d-cube%22:%5B85,71,76,77,74%5D,%223d-morph%22:%5B50,62,56,57,55%5D,%223d-raytrace%22:%5B43,55,46,50,49%5D,%22access-binary-trees%22:%5B9,8,9,8,8%5D,%22access-fannkuch%22:%5B22,21,21,22,21%5D,%22access-nbody%22:%5B48,59,54,57,58%5D,%22access-nsieve%22:%5B8,9,8,8,9%5D,%22bitops-3bit-bits-in-byte%22:%5B4,4,4,5,4%5D,%22bitops-bits-in-byte%22:%5B9,10,10,10,9%5D,%22bitops-bitwise-and%22:%5B5,5,4,5,5%5D,%22bitops-nsieve-bits%22:%5B29,29,28,28,29%5D,%22controlflow-recursive%22:%5B5,4,4,5,5%5D,%22crypto-aes%22:%5B19,19,19,19,19%5D,%22crypto-md5%22:%5B25,27,28,26,26%5D,%22crypto-sha1%22:%5B28,28,25,28,29%5D,%22date-format-tofte%22:%5B39,31,37,39,41%5D,%22date-format-xparb%22:%5B45,46,36,45,47%5D,%22math-cordic%22:%5B58,49,51,48,50%5D,%22math-partial-sums%22:%5B56,59,59,52,51%5D,%22math-spectral-norm%22:%5B31,31,25,29,29%5D,%22regexp-dna%22:%5B30,33,34,32,37%5D,%22string-base64%22:%5B28,30,33,30,26%5D,%22string-fasta%22:%5B46,51,50,48,46%5D,%22string-tagcloud%22:%5B43,43,44,44,42%5D,%22string-unpack-code%22:%5B60,53,54,63,63%5D,%22string-validate-input%22:%5B44,48,37,46,46%5D%7D" target="_blank"&gt;Full results&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Firefox 3.6&lt;/td&gt;&lt;td style="text-align:right;"&gt;892.6ms&lt;/td&gt;&lt;td style="text-align:right;"&gt;1.50&lt;/td&gt;&lt;td&gt;&lt;a href="http://www2.webkit.org/perf/sunspider-0.9/sunspider-results.html?%7B%223d-cube%22:%5B38,37,36,34,35%5D,%223d-morph%22:%5B46,46,45,45,45%5D,%223d-raytrace%22:%5B57,57,56,56,57%5D,%22access-binary-trees%22:%5B38,36,35,35,34%5D,%22access-fannkuch%22:%5B65,63,64,65,62%5D,%22access-nbody%22:%5B22,23,21,22,21%5D,%22access-nsieve%22:%5B11,11,11,11,12%5D,%22bitops-3bit-bits-in-byte%22:%5B2,2,1,2,1%5D,%22bitops-bits-in-byte%22:%5B10,10,10,9,9%5D,%22bitops-bitwise-and%22:%5B2,2,3,2,2%5D,%22bitops-nsieve-bits%22:%5B22,22,24,22,23%5D,%22controlflow-recursive%22:%5B40,39,39,40,39%5D,%22crypto-aes%22:%5B29,28,25,29,25%5D,%22crypto-md5%22:%5B13,12,11,12,11%5D,%22crypto-sha1%22:%5B7,7,7,7,7%5D,%22date-format-tofte%22:%5B78,76,72,76,70%5D,%22date-format-xparb%22:%5B76,75,75,75,75%5D,%22math-cordic%22:%5B31,28,28,28,28%5D,%22math-partial-sums%22:%5B28,16,16,16,16%5D,%22math-spectral-norm%22:%5B6,6,6,6,6%5D,%22regexp-dna%22:%5B53,47,49,49,51%5D,%22string-base64%22:%5B13,11,10,10,11%5D,%22string-fasta%22:%5B56,56,54,55,55%5D,%22string-tagcloud%22:%5B77,75,72,69,75%5D,%22string-unpack-code%22:%5B81,83,77,76,82%5D,%22string-validate-input%22:%5B32,26,26,31,29%5D%7D" target="_blank"&gt;Full results&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;IE8 64-bit&lt;/td&gt;&lt;td style="text-align:right;"&gt;4928.4ms&lt;/td&gt;&lt;td style="text-align:right;"&gt;8.32&lt;/td&gt;&lt;td&gt;&lt;a href="http://www2.webkit.org/perf/sunspider-0.9/sunspider-results.html?%7B%223d-cube%22:%5B200,198,200,195,202%5D,%223d-morph%22:%5B160,155,157,155,152%5D,%223d-raytrace%22:%5B237,233,232,233,233%5D,%22access-binary-trees%22:%5B183,170,175,170,167%5D,%22access-fannkuch%22:%5B450,452,453,453,440%5D,%22access-nbody%22:%5B212,212,217,218,215%5D,%22access-nsieve%22:%5B150,153,145,142,145%5D,%22bitops-3bit-bits-in-byte%22:%5B100,102,102,95,97%5D,%22bitops-bits-in-byte%22:%5B152,147,148,155,158%5D,%22bitops-bitwise-and%22:%5B258,260,263,255,262%5D,%22bitops-nsieve-bits%22:%5B207,202,205,206,205%5D,%22controlflow-recursive%22:%5B125,120,120,127,120%5D,%22crypto-aes%22:%5B178,175,167,172,173%5D,%22crypto-md5%22:%5B98,95,98,103,103%5D,%22crypto-sha1%22:%5B113,105,108,100,113%5D,%22date-format-tofte%22:%5B237,225,225,227,235%5D,%22date-format-xparb%22:%5B225,222,217,218,218%5D,%22math-cordic%22:%5B220,228,227,225,225%5D,%22math-partial-sums%22:%5B163,158,158,162,155%5D,%22math-spectral-norm%22:%5B145,137,140,140,145%5D,%22regexp-dna%22:%5B230,232,228,233,245%5D,%22string-base64%22:%5B167,167,167,170,170%5D,%22string-fasta%22:%5B243,240,245,237,242%5D,%22string-tagcloud%22:%5B175,172,173,173,172%5D,%22string-unpack-code%22:%5B173,168,168,170,157%5D,%22string-validate-input%22:%5B175,182,180,180,175%5D%7D" target="_blank"&gt;Full results&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;IE8 32-bit&lt;/td&gt;&lt;td style="text-align:right;"&gt;5051.0ms&lt;/td&gt;&lt;td style="text-align:right;"&gt;8.53&lt;/td&gt;&lt;td&gt;&lt;a href="http://www2.webkit.org/perf/sunspider-0.9/sunspider-results.html?%7B%223d-cube%22:%5B219,210,210,211,212%5D,%223d-morph%22:%5B175,180,176,178,171%5D,%223d-raytrace%22:%5B259,251,260,249,251%5D,%22access-binary-trees%22:%5B173,181,178,179,172%5D,%22access-fannkuch%22:%5B378,373,377,383,379%5D,%22access-nbody%22:%5B248,241,246,241,246%5D,%22access-nsieve%22:%5B124,127,126,130,119%5D,%22bitops-3bit-bits-in-byte%22:%5B111,108,118,115,115%5D,%22bitops-bits-in-byte%22:%5B119,114,121,113,112%5D,%22bitops-bitwise-and%22:%5B307,318,311,308,310%5D,%22bitops-nsieve-bits%22:%5B185,188,187,177,185%5D,%22controlflow-recursive%22:%5B139,135,132,136,143%5D,%22crypto-aes%22:%5B161,161,169,162,162%5D,%22crypto-md5%22:%5B121,111,112,106,117%5D,%22crypto-sha1%22:%5B115,119,118,116,108%5D,%22date-format-tofte%22:%5B240,237,236,244,239%5D,%22date-format-xparb%22:%5B226,225,227,217,232%5D,%22math-cordic%22:%5B241,237,234,239,237%5D,%22math-partial-sums%22:%5B188,182,186,189,187%5D,%22math-spectral-norm%22:%5B166,174,179,166,165%5D,%22regexp-dna%22:%5B186,182,190,183,194%5D,%22string-base64%22:%5B181,183,188,184,175%5D,%22string-fasta%22:%5B268,274,274,265,271%5D,%22string-tagcloud%22:%5B173,173,194,173,173%5D,%22string-unpack-code%22:%5B176,175,182,174,175%5D,%22string-validate-input%22:%5B176,177,181,185,179%5D%7D" target="_blank"&gt;Full results&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;IE8 32-bit&lt;br /&gt;compatability mode&lt;/td&gt;&lt;td style="text-align:right;"&gt;5731.4ms&lt;/td&gt;&lt;td style="text-align:right;"&gt;9.68&lt;/td&gt;&lt;td&gt;&lt;a href="http://www2.webkit.org/perf/sunspider-0.9/sunspider-results.html?%7B%223d-cube%22:%5B215,215,213,213,210%5D,%223d-morph%22:%5B180,172,177,180,167%5D,%223d-raytrace%22:%5B252,260,253,260,258%5D,%22access-binary-trees%22:%5B175,178,175,165,173%5D,%22access-fannkuch%22:%5B387,390,395,406,383%5D,%22access-nbody%22:%5B235,240,238,230,237%5D,%22access-nsieve%22:%5B128,125,123,120,128%5D,%22bitops-3bit-bits-in-byte%22:%5B125,117,113,107,117%5D,%22bitops-bits-in-byte%22:%5B110,113,112,110,115%5D,%22bitops-bitwise-and%22:%5B307,310,305,308,312%5D,%22bitops-nsieve-bits%22:%5B180,183,183,180,180%5D,%22controlflow-recursive%22:%5B127,133,130,138,132%5D,%22crypto-aes%22:%5B165,162,170,168,173%5D,%22crypto-md5%22:%5B120,118,123,120,118%5D,%22crypto-sha1%22:%5B117,115,125,122,123%5D,%22date-format-tofte%22:%5B245,240,243,232,245%5D,%22date-format-xparb%22:%5B215,227,220,225,218%5D,%22math-cordic%22:%5B240,237,238,238,235%5D,%22math-partial-sums%22:%5B187,187,185,193,195%5D,%22math-spectral-norm%22:%5B225,225,235,220,232%5D,%22regexp-dna%22:%5B180,183,182,188,180%5D,%22string-base64%22:%5B808,810,800,807,810%5D,%22string-fasta%22:%5B263,262,263,263,265%5D,%22string-tagcloud%22:%5B172,172,182,173,170%5D,%22string-unpack-code%22:%5B178,175,185,177,180%5D,%22string-validate-input%22:%5B177,175,185,183,185%5D%7D" target="_blank"&gt;Full results&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;These didn't surprise me but it was fun just to see the comparison.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-6075724713969027047?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/6075724713969027047/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=6075724713969027047' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/6075724713969027047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/6075724713969027047'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2010/02/javascript-benchmarks.html' title='Javascript Benchmarks'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-6725518650619347016</id><published>2009-05-28T09:39:00.008-04:00</published><updated>2010-03-31T12:27:29.623-04: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='l2s'/><category scheme='http://www.blogger.com/atom/ns#' term='linq'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='dotnet'/><title type='text'>The need for T-SQL still exists</title><content type='html'>Since I began using Linq-To-SQL (L2S) I haven't written nearly as much T-SQL queries as I used to. It's been great. The best part comes when you look at the T-SQL that is generated and how optimized it is. So why would someone new to programming need to learn T-SQL or why would it benefit me to keep up-to-date on this language?&lt;br /&gt;&lt;br /&gt;If you look at L2S you'll notice that it's not perfect! At first I didn't care because I loved it so much but now it's starting to bug me. In order to UPDATE a record you have pull back the object from the database. That does a SELECT statement. Then to update it, it does an UPDATE. The update is fine it's the SELECT that is the problem. It's unnecessary in most cases.&lt;br /&gt;&lt;br /&gt;For example lets say I have a table:&lt;br /&gt;&lt;br /&gt;VoteOptions&lt;br /&gt;- OptionID int&lt;br /&gt;- OptionValue varchar(64)&lt;br /&gt;- Votes int&lt;br /&gt;&lt;br /&gt;Lets assume I am not concerned with how many times a person votes/validation/etc. In order to update a record in this table using L2S.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;int OptionID = 1;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;MyDataContext db = new MyDataContext();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;VoteOption option = db.VoteOptions.SingleOrDefault(vo =&gt; vo.OptionID==OptionID);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;option.Votes += 1;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;db.SubmitChanges();&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So here we have db.VoteOptions.SingleOrDefault pulling back the entire VoteOption record. This record is small but what if it was bigger? What if we did it thousands of times? What a waste!&lt;br /&gt;&lt;br /&gt;We can make a small adjustment here, still use L2S (and T-SQL), and be much more efficient.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;int OptionID = 1;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;MyDataContext db = new MyDataContext();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;db.ExecuteCommand("UPDATE VoteOptions SET Votes=Votes+1 WHERE OptionID={0}", OptionID);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;It's also 2 lines of code less. ExecuteCommand and ExecuteQuery methods + T-SQL make for a great combination and because it's built into my data context I still have the ability to use L2S for other stuff. After listening to &lt;a href="http://www.hanselman.com/blog/HanselminutesPodcast134StackOverflowUsesASPNETMVCJeffAtwoodAndHisTechnicalTeam.aspx"&gt;this podcast&lt;/a&gt; about StackOverflow there is a point where Jeff mentions he does this on the site. Just something to keep in mind while using L2S!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-6725518650619347016?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/6725518650619347016/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=6725518650619347016' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/6725518650619347016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/6725518650619347016'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2009/05/need-for-t-sql-still-exists.html' title='The need for T-SQL still exists'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-5861047282323296160</id><published>2009-01-27T09:30:00.004-05:00</published><updated>2009-01-27T09:55:19.375-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lists'/><category scheme='http://www.blogger.com/atom/ns#' term='predicates'/><category scheme='http://www.blogger.com/atom/ns#' term='.net 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='string'/><category scheme='http://www.blogger.com/atom/ns#' term='delegate methods'/><title type='text'>Removing a list of strings from another list using Predicates</title><content type='html'>I was writing some code and wanted to remove a list of strings from another list, except I wanted to do it a few times. After looking at the code I wrote it looked very ugly. Using a new .NET 2.0 feature you can get rid of the ugly foreach loops though and cut it down to one line that looks nice. Here is the example:&lt;br /&gt;&lt;br /&gt;&lt;div style="border: 1px solid rgb(192, 192, 192); padding: 10px; overflow: auto; font-family: monospace; background-color: rgb(238, 238, 238);"&gt;List&amp;lt;string&amp;gt; menu = new List&amp;lt;string&amp;gt;();&lt;br /&gt;menu.AddRange(new string[] {“watermelon”, “pizza”, “ice cream”, “soda”, “robbies mom”});&lt;br /&gt;&lt;br /&gt;List&amp;lt;string&amp;gt; unavailable = new List&amp;lt;string&amp;gt;();&lt;br /&gt;unavailable.AddRange(new string[] {“ice cream”, “robbies mom”});&lt;br /&gt;&lt;br /&gt;//the old way would be a mess like this&lt;br /&gt;List&amp;lt;string&amp;gt; temp = menu;&lt;br /&gt;foreach(string item in temp) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach(string match in unavailable) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(item == match)&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;menu.Remove(item);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//using the PredicateListMatch it takes one line&lt;br /&gt;menu.RemoveAll(new PredicateListMatch(unavailable).Match);&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;This is the PredicateListMatch class that I am using to accomplish this.&lt;br /&gt;&lt;br /&gt;&lt;div style="border: 1px solid rgb(192, 192, 192); padding: 10px; overflow: auto; font-family: monospace; background-color: rgb(238, 238, 238);"&gt;using&amp;nbsp;System;&lt;br /&gt;using&amp;nbsp;System.Collections.Generic;&lt;br /&gt;&lt;br /&gt;public&amp;nbsp;class&amp;nbsp;PredicateListMatch&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&amp;nbsp;List&amp;lt;string&amp;gt;&amp;nbsp;_value;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;PredicateListMatch(List&amp;lt;string&amp;gt;&amp;nbsp;Value)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_value&amp;nbsp;=&amp;nbsp;Value;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;List&amp;lt;string&amp;gt;&amp;nbsp;Value&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;get&amp;nbsp;{&amp;nbsp;return&amp;nbsp;_value;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;set&amp;nbsp;{&amp;nbsp;_value&amp;nbsp;=&amp;nbsp;value;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;Predicate&amp;lt;string&amp;gt;&amp;nbsp;Match&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;get&amp;nbsp;{&amp;nbsp;return&amp;nbsp;IsMatch;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;Predicate&amp;lt;string&amp;gt;&amp;nbsp;NoMatch&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;get&amp;nbsp;{&amp;nbsp;return&amp;nbsp;IsNoMatch;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&amp;nbsp;bool&amp;nbsp;IsMatch(string&amp;nbsp;s)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bool&amp;nbsp;match&amp;nbsp;=&amp;nbsp;false;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach&amp;nbsp;(string&amp;nbsp;b&amp;nbsp;in&amp;nbsp;_value)&amp;nbsp;{&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;if&amp;nbsp;(s.Trim().ToLower()&amp;nbsp;==&amp;nbsp;b.Trim().ToLower())&amp;nbsp;{&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;match&amp;nbsp;=&amp;nbsp;true;&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;break;&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;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;match;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&amp;nbsp;bool&amp;nbsp;IsNoMatch(string&amp;nbsp;s)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bool&amp;nbsp;match&amp;nbsp;=&amp;nbsp;true;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach&amp;nbsp;(string&amp;nbsp;b&amp;nbsp;in&amp;nbsp;_value)&amp;nbsp;{&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;if&amp;nbsp;(s.Trim().ToLower()&amp;nbsp;==&amp;nbsp;b.Trim().ToLower())&amp;nbsp;{&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;match&amp;nbsp;=&amp;nbsp;false;&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;break;&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;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;match;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&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/661371502199197807-5861047282323296160?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/5861047282323296160/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=5861047282323296160' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/5861047282323296160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/5861047282323296160'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2009/01/removing-list-of-strings-from-another.html' title='Removing a list of strings from another list using Predicates'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-1330573531826247701</id><published>2008-10-17T14:04:00.005-04:00</published><updated>2008-10-17T14:08:07.769-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='api'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='pageglimpse'/><category scheme='http://www.blogger.com/atom/ns#' term='dotnet'/><title type='text'>PageGlimpse .NET library</title><content type='html'>Last week I heard about this cool service called &lt;a href="http://www.pageglimpse.com/"&gt;PageGlimpse&lt;/a&gt; that provides screenshots of any website. They have an API available so I wrote a .NET wrapper for it. It is super easy to use and the download comes with a full example.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.rushfrisby.com/apps/pageglimpse-api-dotnet.aspx"&gt;Download the PageGlimpse .NET API Library&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-1330573531826247701?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/1330573531826247701/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=1330573531826247701' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/1330573531826247701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/1330573531826247701'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2008/10/pageglimpse-net-library.html' title='PageGlimpse .NET library'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-6857570405675472181</id><published>2008-10-06T14:11:00.003-04:00</published><updated>2008-10-06T14:42:03.190-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='url rewrite'/><title type='text'>UrlRewriting.NET IncludeQueryStringForRewrite bug fix</title><content type='html'>I have a bug fix for UrlRewriting.NET. The bug is with rewrite rules that use the IncludeQueryStringForRewrite setting. Take the following example rule:&lt;br /&gt;&lt;br /&gt;&amp;lt;add name="Rewrite" virtualUrl="^~/pages/(.*)/(.*)"&lt;br /&gt;    rewriteUrlParameter="IncludeQueryStringForRewrite"&lt;br /&gt;    destinationUrl="~/pages/$1.asp?title=$2"&lt;br /&gt;    ignoreCase="true" /&amp;gt;&lt;br /&gt;&lt;br /&gt;Let's say I go the url: http://localhost/pages/1/My Title?test=Test1&amp;amp;blah=Blah1&lt;br /&gt;&lt;br /&gt;How the module was handling this was taking the first querystring parameter and making it part of my last regex match. If you look at the request.querystring values you would see this:&lt;br /&gt;&lt;br /&gt;title = MyTitle?test=Test1&lt;br /&gt;test =&lt;br /&gt;blah = Blah1&lt;br /&gt;&lt;br /&gt;What my fix does is check the rewrite url before it is rewritten and if it finds a second question mark changes it to an ampersand. This might not be the best way to fix this but was the easiest since the code was a bit much. The results fixed the querystring values:&lt;br /&gt;&lt;br /&gt;title = MyTitle&lt;br /&gt;test = Test1&lt;br /&gt;blah = Blah1&lt;br /&gt;&lt;br /&gt;You can download the fix here:&lt;br /&gt;&lt;a href="http://files.rushfrisby.com/dotnetrush/code/UrlRewritingNet_20_Source.zip"&gt;http://files.rushfrisby.com/dotnetrush/code/UrlRewritingNet_20_Source.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I also converted the project to .NET 3.5 and changed some build settings for the release version to hopefully get it to run faster.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-6857570405675472181?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/6857570405675472181/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=6857570405675472181' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/6857570405675472181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/6857570405675472181'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2008/10/urlrewritingnet-includequerystringforre.html' title='UrlRewriting.NET IncludeQueryStringForRewrite bug fix'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-3477219211513592302</id><published>2008-09-15T12:12:00.004-04:00</published><updated>2008-09-15T12:14:42.981-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hackday08'/><category scheme='http://www.blogger.com/atom/ns#' term='boss'/><category scheme='http://www.blogger.com/atom/ns#' term='api'/><category scheme='http://www.blogger.com/atom/ns#' term='yahoo'/><category scheme='http://www.blogger.com/atom/ns#' term='search'/><title type='text'>Yahoo! BOSS .NET Library</title><content type='html'>For my hack at this years' Yahoo! Open Hack Day I created a library for accessing the BOSS search API. You can get a copy of the library on my website:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.rushfrisby.com/apps/yahoo-boss-net-library.aspx"&gt;Yahoo! BOSS .NET Library&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-3477219211513592302?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/3477219211513592302/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=3477219211513592302' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/3477219211513592302'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/3477219211513592302'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2008/09/yahoo-boss-net-library.html' title='Yahoo! BOSS .NET Library'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-1887572215541381434</id><published>2008-08-19T11:10:00.003-04:00</published><updated>2008-08-19T11:12:20.066-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hackday08'/><category scheme='http://www.blogger.com/atom/ns#' term='yahoo'/><category scheme='http://www.blogger.com/atom/ns#' term='hackday'/><title type='text'>Yahoo! Open Hackday 2008</title><content type='html'>In 2006 I went to the first &lt;a href="http://www.hackday.org"&gt;Yahoo! Open Hackday&lt;/a&gt; and I am heading back Sept 12-13 for round 2. Last time I wrote the &lt;a href="http://www.rushfrisby.com/apps/flickr_wallpaper_rotator.aspx"&gt;Flickr Wallpaper Rotator&lt;/a&gt; which as a hit. What kind of "hack" should I come up with this time?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-1887572215541381434?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/1887572215541381434/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=1887572215541381434' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/1887572215541381434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/1887572215541381434'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2008/08/yahoo-open-hackday-2008.html' title='Yahoo! Open Hackday 2008'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-1067600587423253354</id><published>2008-07-18T10:58:00.003-04:00</published><updated>2008-07-18T11:06:15.518-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='scriptresource.axd'/><category scheme='http://www.blogger.com/atom/ns#' term='minify'/><category scheme='http://www.blogger.com/atom/ns#' term='webresource.axd'/><category scheme='http://www.blogger.com/atom/ns#' term='httpmodule'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><category scheme='http://www.blogger.com/atom/ns#' term='httphandler'/><category scheme='http://www.blogger.com/atom/ns#' term='cache'/><category scheme='http://www.blogger.com/atom/ns#' term='optimization'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><category scheme='http://www.blogger.com/atom/ns#' term='compression'/><title type='text'>Combine, minify, compress, and cache javascript and CSS</title><content type='html'>I read &lt;a href="http://blog.madskristensen.dk/post/Optimize-WebResourceaxd-and-ScriptResourceaxd.aspx"&gt;this post&lt;/a&gt; from Mads Kristensen about how he took ScriptResource.axd and WebResource.axd references and combined them into one script, then minified it, compressed it, and cached it on the server. I gave it a try and got it to work but I ran into a couple of bugs. I fixed the ones I found and also duplicated the process to work with CSS. The CSS version uses cache dependencies on the css files so if you change something the user will get it right away. The link below has the classes and a readme with how to implement it.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://files.rushfrisby.com/dotnetrush/code/CompressorClasses.zip"&gt;CompressorClasses.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-1067600587423253354?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/1067600587423253354/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=1067600587423253354' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/1067600587423253354'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/1067600587423253354'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2008/07/combine-minify-compress-and-cache.html' title='Combine, minify, compress, and cache javascript and CSS'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-4580088376053417318</id><published>2008-03-22T18:54:00.004-04:00</published><updated>2008-03-22T19:03:03.591-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.net 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='c# 3.0'/><title type='text'>C# 3.0 Properties simplified</title><content type='html'>In versions previous to .NET 3.0 this is what a simple get/set property looked like:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0); font-weight: bold;font-family:courier new;" &gt;private string _MyString = "";&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0); font-weight: bold;font-family:courier new;" &gt;public string MyString {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0); font-weight: bold;font-family:courier new;" &gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;get { return _MyString; }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0); font-weight: bold;font-family:courier new;" &gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;set { _MyString = value; }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0); font-weight: bold;font-family:courier new;" &gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now in .NET 3.0 you can simplify this by typing:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0); font-weight: bold;font-family:courier new;" &gt;public string MyString { get; set; }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So we've trimmed a few lines of code down to one and it makes our classes look a whole lot cleaner. These two examples compile exactly the same way so you don't have to worry about any performance issues. The only difference in 3.0 is that you reference your property instead of the private variable which doesn't make a difference one way or the other if you think about it. Yay for .NET!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-4580088376053417318?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/4580088376053417318/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=4580088376053417318' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/4580088376053417318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/4580088376053417318'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2008/03/c-30-properties-simplified.html' title='C# 3.0 Properties simplified'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-8328663022877611887</id><published>2008-02-25T12:49:00.000-05:00</published><updated>2008-02-25T12:50:46.214-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='data'/><category scheme='http://www.blogger.com/atom/ns#' term='ssis'/><category scheme='http://www.blogger.com/atom/ns#' term='sql server'/><category scheme='http://www.blogger.com/atom/ns#' term='export'/><category scheme='http://www.blogger.com/atom/ns#' term='wizard'/><category scheme='http://www.blogger.com/atom/ns#' term='import'/><category scheme='http://www.blogger.com/atom/ns#' term='dts'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>Download DTS for SQL Server 2005 Express</title><content type='html'>Somehow in the SQL Server 2005 management studio I had import/export (Launched the DTS Wizard) options when I right clicked on my databases even if they were on an SQL Express version server. When I reformatted my computer and installed the latest SQL express (SP2) I noticed that these menu options were gone! (also they changed the wording of &amp;quot;Modify&amp;quot; to &amp;quot;Design&amp;quot;)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I did some searching and found that you can install the DTS wizard through this SQL toolkit:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkId=65111"&gt;http://go.microsoft.com/fwlink/?LinkId=65111&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Once it is installed you have to run the exe because I still don't see the Import/Export menu option in SMS. The exe is located at C:\Program Files\Microsoft SQL Server\90\DTS\Binn\DTSWizard.exe&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-8328663022877611887?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/8328663022877611887/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=8328663022877611887' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/8328663022877611887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/8328663022877611887'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2008/02/download-dts-for-sql-server-2005.html' title='Download DTS for SQL Server 2005 Express'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-2164898521543867633</id><published>2008-02-25T12:48:00.000-05:00</published><updated>2008-02-25T12:49:30.697-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='visual studio 2005'/><category scheme='http://www.blogger.com/atom/ns#' term='template'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='website'/><title type='text'>AJAX Enabled Website Template Not Showing?</title><content type='html'>I recently reformatted my laptop and reinstalled everything. I installed Visual Studio 2005 and AJAX Extensions 1.0. When I went to go create a new website I did not see the familiar &amp;quot;AJAX-Enabled Website Template&amp;quot;. If you are having the same problem here is the answer!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://files.rushfrisby.com/misc/AJAX-Enabled%20Website%20Template.zip"&gt;Download this zip file&lt;/a&gt; and put it in:&lt;br /&gt;&lt;br /&gt;&lt;pre style="margin: 10px 0pt;"&gt;C:\Documents and Settings\&amp;lt;User Directory&amp;gt;\My Documents\Visual Studio 2005\Templates\ProjectTemplates&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The next time you open up visual studio you will see the new template.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-2164898521543867633?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/2164898521543867633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=2164898521543867633' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/2164898521543867633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/2164898521543867633'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2008/02/ajax-enabled-website-template-not.html' title='AJAX Enabled Website Template Not Showing?'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-5902145620074137121</id><published>2008-02-25T11:31:00.000-05:00</published><updated>2008-02-25T11:32:53.114-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='threading'/><title type='text'>Basic Threading Technique</title><content type='html'>I thought I would share the threading technique that I use quite often. I haven't read much about what .NET has to offer in regards to this topic but my method is basic and works well so I stick with it.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I've created a new console application to demonstrate:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Data;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Threading;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; FeedvertizeConsole {&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    &lt;span class="kwrd"&gt;class&lt;/span&gt; Program {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;        &lt;span class="kwrd"&gt;static&lt;/span&gt; ArrayList threads = &lt;span class="kwrd"&gt;new&lt;/span&gt; ArrayList();&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;        &lt;span class="kwrd"&gt;static&lt;/span&gt; Queue q = &lt;span class="kwrd"&gt;new&lt;/span&gt; Queue();&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args) {&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;            &lt;span class="rem"&gt;// Get all feeds and add them to the queue&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;            Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Adding feeds to queue&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;            clsFeed feed = &lt;span class="kwrd"&gt;new&lt;/span&gt; clsFeed();&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;            DataSet ds = feed.FillDs();&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (DataRow row &lt;span class="kwrd"&gt;in&lt;/span&gt; ds.Tables[0].Rows) {&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;                clsFeed container = &lt;span class="kwrd"&gt;new&lt;/span&gt; clsFeed();&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;                container.CategoryID = &lt;span class="kwrd"&gt;int&lt;/span&gt;.Parse(row[&lt;span class="str"&gt;&amp;quot;CategoryID&amp;quot;&lt;/span&gt;].ToString());&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;                container.FeedID = &lt;span class="kwrd"&gt;int&lt;/span&gt;.Parse(row[&lt;span class="str"&gt;&amp;quot;FeedID&amp;quot;&lt;/span&gt;].ToString());&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;                container.FeedURL = row[&lt;span class="str"&gt;&amp;quot;FeedURL&amp;quot;&lt;/span&gt;].ToString();&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;                q.Enqueue(container);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;            }&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;            &lt;span class="rem"&gt;// Create 16 threads&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;            Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Creating threads&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;            &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i = 0; i &amp;lt; 16; i++) {&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;                Program.CreateThread(i.ToString());&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;            }&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;            Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Waiting for threads to finish&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (Thread thread &lt;span class="kwrd"&gt;in&lt;/span&gt; threads) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;                &lt;span class="kwrd"&gt;while&lt;/span&gt; (thread.ThreadState != ThreadState.Stopped) {&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;                    &lt;span class="rem"&gt;// Keep looping until all of the threads are stopped.&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;                }&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;            }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  41:  &lt;/span&gt;            Console.WriteLine(&lt;span class="str"&gt;&amp;quot;\nDone!\n&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  42:  &lt;/span&gt;            Console.WriteLine(&lt;span class="str"&gt;&amp;quot;\nPress any key to exit.&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  43:  &lt;/span&gt;            &lt;span class="kwrd"&gt;string&lt;/span&gt; n0th1ng = Console.ReadLine();&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  44:  &lt;/span&gt;        }&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  45:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  46:  &lt;/span&gt;        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; CreateThread(&lt;span class="kwrd"&gt;string&lt;/span&gt; threadName) {&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  47:  &lt;/span&gt;            Thread thread = &lt;span class="kwrd"&gt;new&lt;/span&gt; Thread(&lt;span class="kwrd"&gt;new&lt;/span&gt; ThreadStart(ProcessFeeds));&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  48:  &lt;/span&gt;            thread.Name = threadName;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  49:  &lt;/span&gt;            thread.Start();&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  50:  &lt;/span&gt;            threads.Add(thread);&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  51:  &lt;/span&gt;        }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  52:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  53:  &lt;/span&gt;        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; ProcessFeeds() {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  54:  &lt;/span&gt;            &lt;span class="kwrd"&gt;while&lt;/span&gt; (q.Count &amp;gt; 0) {&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  55:  &lt;/span&gt;                clsFeed feed = (clsFeed)q.Dequeue();&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  56:  &lt;/span&gt;                HttpResponse response = Http.GetPage(feed.FeedURL);&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  57:  &lt;/span&gt;                &lt;span class="kwrd"&gt;if&lt;/span&gt; (response.ResponseCode == 200) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  58:  &lt;/span&gt;                    &lt;span class="rem"&gt;// Process the feed&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  59:  &lt;/span&gt;                }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  60:  &lt;/span&gt;            }&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  61:  &lt;/span&gt;        }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  62:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  63:  &lt;/span&gt;    }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  64:  &lt;/span&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The outline here is simple: Create a Queue and add objects we want to process to it. Create an ArrayList to hold our threads, then add and start the threads. Each thread dequeue's the next available object and processes it meanwhile our main program waits for all threads to stop.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In my example clsFeed and Http objects are ones that I wrote but you should be able to use everything else as a template to create your own threaded application. Good luck!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If anyone else would like to make a post on their threading technique, &lt;a href="mailto:rush@rushfrisby.com?subject=Response%20to%20%27Basic%20Threading%20Technique%27%20Post"&gt;send me an email&lt;/a&gt; and I'll post it up!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-5902145620074137121?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/5902145620074137121/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=5902145620074137121' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/5902145620074137121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/5902145620074137121'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2008/02/basic-threading-technique.html' title='Basic Threading Technique'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-8941979188579142229</id><published>2008-02-25T11:30:00.002-05:00</published><updated>2008-02-25T11:31:05.185-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='stored procedures'/><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><category scheme='http://www.blogger.com/atom/ns#' term='queries'/><category scheme='http://www.blogger.com/atom/ns#' term='tsql'/><category scheme='http://www.blogger.com/atom/ns#' term='cursors'/><category scheme='http://www.blogger.com/atom/ns#' term='optimization'/><title type='text'>Using cursors and Query Optimization</title><content type='html'>&lt;span style="font-family: Arial;"&gt;I am currently tracking sessions/hits on a few of my sites. One of the things I want to know is what are the most popular search terms that people use to find my sites. While writing a stored procedure to get my list of popular search terms I decided to see if a single query would be faster to count the number of searches for a particular term or if using a cursor would be faster. I've heard that cursors are &amp;quot;bad&amp;quot; but I use them often so I wanted to put it to the test. Here is my query:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Courier New;"&gt;declare @Date1 varchar(32), @Date2 varchar(32)&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;&lt;br /&gt;&lt;span style="font-family: Courier New;"&gt;select @Date1 = '1/1/2000'&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;&lt;br /&gt;&lt;span style="font-family: Courier New;"&gt;select @Date2 = '1/1/2009'&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;&lt;br /&gt;&lt;br style="font-family: Courier New;" /&gt;&lt;br /&gt;&lt;span style="font-family: Courier New;"&gt;declare @d1 datetime, @d2 datetime&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;&lt;br /&gt;&lt;br style="font-family: Courier New;" /&gt;&lt;br /&gt;&lt;span style="font-family: Courier New;"&gt;select @d1 = convert(datetime, @Date1 + ' 12:00:00 AM')&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;&lt;br /&gt;&lt;span style="font-family: Courier New;"&gt;select @d2 = convert(datetime, @Date2 + ' 11:59:59 PM')&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;&lt;br /&gt;&lt;br style="font-family: Courier New;" /&gt;&lt;br /&gt;&lt;span style="font-family: Courier New;"&gt;create table #temp (SearchQuery varchar(512), Hits int)&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;&lt;br /&gt;&lt;br style="font-family: Courier New;" /&gt;&lt;br /&gt;&lt;br style="font-family: Courier New;" /&gt;&lt;br /&gt;&lt;span style="font-family: Courier New; color: rgb(255, 102, 0);"&gt;insert into #temp (SearchQuery, Hits)&lt;/span&gt;&lt;br style="font-family: Courier New; color: rgb(255, 102, 0);" /&gt;&lt;br /&gt;&lt;span style="font-family: Courier New; color: rgb(255, 102, 0);"&gt;select distinct Hit.SearchQuery, (select count(*) from Hit as Hit2 where Hit2.SearchQuery like Hit.SearchQuery) as Hits from Hit where SearchQuery NOT LIKE '' AND &lt;/span&gt;&lt;span style="font-family: Courier New; color: rgb(255, 102, 0);"&gt;HitDate Between @d1 AND @d2&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;&lt;br /&gt;&lt;br style="font-family: Courier New;" /&gt;&lt;br /&gt;&lt;span style="font-family: Courier New;"&gt;&lt;/span&gt;&lt;span style="font-family: Courier New;"&gt;/*&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;&lt;br /&gt;&lt;span style="font-family: Courier New; color: rgb(0, 128, 128);"&gt;DECLARE @SearchQuery varchar(512), @Hits int&lt;/span&gt;&lt;br style="font-family: Courier New; color: rgb(0, 128, 128);" /&gt;&lt;br /&gt;&lt;span style="font-family: Courier New; color: rgb(0, 128, 128);"&gt;DECLARE myCursor CURSOR FOR&lt;/span&gt;&lt;br style="font-family: Courier New; color: rgb(0, 128, 128);" /&gt;&lt;br /&gt;&lt;span style="font-family: Courier New; color: rgb(0, 128, 128);"&gt;select distinct SearchQuery from Hit where &lt;/span&gt;&lt;span style="font-family: Courier New; color: rgb(0, 128, 128);"&gt;SearchQuery NOT LIKE '' and &lt;/span&gt;&lt;span style="font-family: Courier New; color: rgb(0, 128, 128);"&gt;HitDate &lt;/span&gt;&lt;span style="font-family: Courier New; color: rgb(0, 128, 128);"&gt;Between @d1 AND @d2&lt;/span&gt;&lt;br style="font-family: Courier New; color: rgb(0, 128, 128);" /&gt;&lt;br /&gt;&lt;span style="font-family: Courier New; color: rgb(0, 128, 128);"&gt;OPEN myCursor&lt;/span&gt;&lt;br style="font-family: Courier New; color: rgb(0, 128, 128);" /&gt;&lt;br /&gt;&lt;span style="font-family: Courier New; color: rgb(0, 128, 128);"&gt;FETCH NEXT FROM myCursor INTO @SearchQuery&lt;/span&gt;&lt;br style="font-family: Courier New; color: rgb(0, 128, 128);" /&gt;&lt;br /&gt;&lt;span style="font-family: Courier New; color: rgb(0, 128, 128);"&gt;WHILE @@FETCH_STATUS = 0 BEGIN&lt;/span&gt;&lt;br style="font-family: Courier New; color: rgb(0, 128, 128);" /&gt;&lt;br /&gt;&lt;span style="font-family: Courier New; color: rgb(0, 128, 128);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select @Hits=COUNT(*) FROM Hit where SearchQuery=@SearchQuery&lt;/span&gt;&lt;br style="font-family: Courier New; color: rgb(0, 128, 128);" /&gt;&lt;br /&gt;&lt;span style="font-family: Courier New; color: rgb(0, 128, 128);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; insert into #temp (SearchQuery, Hits) values (@SearchQuery, @Hits)&lt;/span&gt;&lt;br style="font-family: Courier New; color: rgb(0, 128, 128);" /&gt;&lt;br /&gt;&lt;span style="font-family: Courier New; color: rgb(0, 128, 128);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FETCH NEXT FROM myCursor INTO @SearchQuery&lt;/span&gt;&lt;br style="font-family: Courier New; color: rgb(0, 128, 128);" /&gt;&lt;br /&gt;&lt;span style="font-family: Courier New; color: rgb(0, 128, 128);"&gt;END&lt;/span&gt;&lt;br style="font-family: Courier New; color: rgb(0, 128, 128);" /&gt;&lt;br /&gt;&lt;span style="font-family: Courier New; color: rgb(0, 128, 128);"&gt;CLOSE myCursor&lt;/span&gt;&lt;br style="font-family: Courier New; color: rgb(0, 128, 128);" /&gt;&lt;br /&gt;&lt;span style="font-family: Courier New; color: rgb(0, 128, 128);"&gt;DEALLOCATE myCursor&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;&lt;br /&gt;&lt;span style="font-family: Courier New;"&gt;*/&lt;br /&gt;&lt;br /&gt;&lt;br style="font-family: Courier New;" /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: Courier New;"&gt;select * from #temp order by Hits desc&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;&lt;br /&gt;&lt;br style="font-family: Courier New;" /&gt;&lt;br /&gt;&lt;span style="font-family: Courier New;"&gt;drop table #temp&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Arial;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;At first you see that I am running the &lt;span style="color: rgb(255, 102, 0);"&gt;ORANGE &lt;/span&gt;query which has a subquery doing the counting. It took 59~60 seconds to run this on all the data I have.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Next up, I commented out the orange query and ran the &lt;span style="color: rgb(0, 128, 128);"&gt;GREEN &lt;/span&gt;query. It took 47 seconds to run! And people say that cursors are bad? BS! The last thing I did was switch the order of my WHERE clause:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Courier New; color: rgb(0, 128, 128);"&gt;SearchQuery NOT LIKE '' and &lt;/span&gt;&lt;span style="font-family: Courier New; color: rgb(0, 128, 128);"&gt;HitDate &lt;/span&gt;&lt;span style="font-family: Courier New; color: rgb(0, 128, 128);"&gt;Between @d1 AND @d2&lt;/span&gt;&lt;span style="font-family: Courier New; color: rgb(0, 128, 128);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Arial; color: rgb(0, 0, 0);"&gt;to&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; color: rgb(0, 128, 128);"&gt;HitDate Between @d1 AND @d2 and SearchQuery NOT LIKE ''&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Arial; color: rgb(0, 0, 0);"&gt;Which brought the run time down to 40 seconds! I also tried this on the orange query but it still took 59 seconds to run.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Conclusion&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Cursors are not bad! You just have to know that in some cases they can work slower or faster and you should test each method to see what is best. Also remember that the order of your WHERE clause can speed your query up as well. In my case searching a date field was much faster than searching text.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;What other optimization tips do you have?&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-8941979188579142229?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/8941979188579142229/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=8941979188579142229' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/8941979188579142229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/8941979188579142229'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2008/02/i-am-currently-tracking-sessionshits-on.html' title='Using cursors and Query Optimization'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-1614396280120730835</id><published>2008-02-25T11:29:00.001-05:00</published><updated>2008-02-25T11:29:26.204-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='calendar'/><title type='text'>AJAX CalendarExtender bug fixes</title><content type='html'>One thing that has annoyed me about the ASP.NET AJAX Control Toolkit &lt;span style="font-weight: bold;"&gt;CalendarExtender &lt;/span&gt;is that when you select a date the calendar does not disappear. In order to make it disappear you have to click on an area outside of the calendar. I did a search and found the following snippet of code which hides the calendar when you select a date. Works like a charm.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In your code behind add:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;Page.ClientScript.RegisterClientScriptBlock(this.GetType(), &amp;quot;hideCalendar&amp;quot;, &amp;quot;function hideCalendar(cb) { cb.hide(); }&amp;quot;, true);&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;In your CalendarExtender control add the attribute:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;OnClientDateSelectionChanged=&amp;quot;hideCalendar&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Furthermore, there is a bug which causes the CalendarExtender to display incorrectly. This bug can be found when putting the extender inside of an UpdatePanel + MultiView control. In my case, I had a MultiView inside a TabContainer inside an UpdatePanel. The calendar is so distorted that you can't tell what it is nor can you click on any date - all functionality is lost! The reason is due to a CSS never loading because of the UpdatePanel. The work around for this another snippet of code I found on the web:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;string url = Page.ClientScript.GetWebResourceUrl(typeof(ClientCssResourceAttribute), &amp;quot;AjaxControlToolkit.Calendar.Calendar.css&amp;quot;); HtmlLink myHtmlLink = new HtmlLink(); myHtmlLink.Href = url; myHtmlLink.Attributes.Add(&amp;quot;rel&amp;quot;, &amp;quot;stylesheet&amp;quot;); myHtmlLink.Attributes.Add(&amp;quot;type&amp;quot;, &amp;quot;text/css&amp;quot;); Page.Header.Controls.Add(myHtmlLink);&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Have fun fixing those bugs!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-1614396280120730835?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/1614396280120730835/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=1614396280120730835' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/1614396280120730835'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/1614396280120730835'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2008/02/ajax-calendarextender-bug-fixes.html' title='AJAX CalendarExtender bug fixes'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-6293038064419998451</id><published>2008-02-25T11:27:00.000-05:00</published><updated>2008-02-25T11:28:29.959-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='tabs'/><category scheme='http://www.blogger.com/atom/ns#' term='tab control'/><title type='text'>ASP.NET Tabs</title><content type='html'>This demo will show you how to use the ASP.NET AJAX Control Toolkit Tab Container and Tab Panel controls. You can use these controls on a web page to display a tabbed interface.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe width="100%" height="400" frameborder="0" src="http://files.rushfrisby.com/flash/play.asp?FileName=ajax_control_tookit_tab_container.flv"&gt;You cannot view this video because your browser does not support iframe's.&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;One thing to note is that if you are currently on the second tab and trigger an event that does a post back, then your page will reload and not display the same tab you we're on. The work around I did using the UpdatePanel is an easy fix for this.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If you need your page to load with a certain tab selected, use the ActiveTabIndex property. (ex: TabContainer1.ActiveTabIndex = 2 will select the third tab). Usually if I want to do this conditionally I will link to a page with the tab index in the query string and then check for that value in the page_load event. If there is a value then make that tab active!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-6293038064419998451?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/6293038064419998451/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=6293038064419998451' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/6293038064419998451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/6293038064419998451'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2008/02/aspnet-tabs.html' title='ASP.NET Tabs'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-6663139973336551839</id><published>2007-08-02T08:46:00.000-04:00</published><updated>2007-08-02T09:26:27.782-04:00</updated><title type='text'>Web 2.0 "Bubble" is NOT about to Burst</title><content type='html'>&lt;iframe width="55" scrolling="no" height="82" frameborder="0" src="http://digg.com/api/diggthis.php?u=http://digg.com/tech_news/Web_2_0_Bubble_is_NOT_about_to_Burst" style="float: left; padding: 0 10px 10px 0;"&gt;&lt;/iframe&gt;&lt;p&gt;Over the past year now I have read various articles saying that the Web 2.0 "Bubble" is about to burst and I have a big problem with this. &lt;a href="http://www.pcmag.com/article2/0,1895,2164136,00.asp"&gt;This article&lt;/a&gt; pushed me over the edge to actually write about it.&lt;/p&gt;&lt;p&gt;First of all it is not a bubble. Web 2.0 is a platform, not some kind of get rich quick scheme like the 2000 era sites. Not everyone is creating startups and selling them for big money. Investors know what's already happened and are more cautious in their decisions. There are some cool sites out there that are getting a little bit of funding, but most of them die rather than sell. Just check the &lt;a href="http://www.techcrunch.com/tag/deadpool"&gt;TechCrunch dead pool&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Bloggers have been expecting this "bubble" to "pop" for a year now and it hasn't. It won't pop or even hiccup. This is technology and the future of software. It's like saying that the OS bubble is about to burst. Stupid right? These terms like "Web 2.0" tick me off too. All of the Web 2.0 terminology does actually. &lt;a href="http://www.emptybottle.org/bullshit/"&gt;Haven't you seen the generators?&lt;/a&gt; They are making fun of those terms, not encouraging them. This is not a new version of the web; it's a reference for describing a site that is using some of the latest technologies and architecture. Web 2.0 does not reference design. When I say design I mean graphics because design can also mean other things. It drives me nuts to see job positions for "Web 2.0 Designers".&lt;/p&gt;&lt;p&gt;Stop saying "Web 2.0", "Bubble", and "Burst". Thanks.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-6663139973336551839?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/6663139973336551839/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=6663139973336551839' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/6663139973336551839'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/6663139973336551839'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2007/08/web-20-bubble-is-not-about-to-burst.html' title='Web 2.0 &quot;Bubble&quot; is NOT about to Burst'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-2123146933472733678</id><published>2007-04-02T22:23:00.000-04:00</published><updated>2007-05-15T14:11:18.692-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sha-1'/><category scheme='http://www.blogger.com/atom/ns#' term='cryptography'/><category scheme='http://www.blogger.com/atom/ns#' term='SHA-2'/><category scheme='http://www.blogger.com/atom/ns#' term='SHA-384'/><category scheme='http://www.blogger.com/atom/ns#' term='md5'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='SHA-512'/><category scheme='http://www.blogger.com/atom/ns#' term='SHA-256'/><title type='text'>C# SHA-2 Cryptography: SHA-256, SHA-384, SHA-512</title><content type='html'>Here are some crypto methods for SHA256, SHA384, and SHA512 which I had not posted about before. This is the class I am using.&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Security.Cryptography;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; clsCrypto {&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; clsCrypto() {&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; md5encrypt(&lt;span class="kwrd"&gt;string&lt;/span&gt; phrase) {&lt;br /&gt;        UTF8Encoding encoder = &lt;span class="kwrd"&gt;new&lt;/span&gt; UTF8Encoding();&lt;br /&gt;        MD5CryptoServiceProvider md5hasher = &lt;span class="kwrd"&gt;new&lt;/span&gt; MD5CryptoServiceProvider();&lt;br /&gt;        &lt;span class="kwrd"&gt;byte&lt;/span&gt;[] hashedDataBytes = md5hasher.ComputeHash(encoder.GetBytes(phrase));&lt;br /&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; byteArrayToString(hashedDataBytes);&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; sha1encrypt(&lt;span class="kwrd"&gt;string&lt;/span&gt; phrase) {&lt;br /&gt;        UTF8Encoding encoder = &lt;span class="kwrd"&gt;new&lt;/span&gt; UTF8Encoding();&lt;br /&gt;        SHA1CryptoServiceProvider sha1hasher = &lt;span class="kwrd"&gt;new&lt;/span&gt; SHA1CryptoServiceProvider();&lt;br /&gt;        &lt;span class="kwrd"&gt;byte&lt;/span&gt;[] hashedDataBytes = sha1hasher.ComputeHash(encoder.GetBytes(phrase));&lt;br /&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; byteArrayToString(hashedDataBytes);&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; sha256encrypt(&lt;span class="kwrd"&gt;string&lt;/span&gt; phrase) {&lt;br /&gt;        UTF8Encoding encoder = &lt;span class="kwrd"&gt;new&lt;/span&gt; UTF8Encoding();&lt;br /&gt;        SHA256Managed sha256hasher = &lt;span class="kwrd"&gt;new&lt;/span&gt; SHA256Managed();&lt;br /&gt;        &lt;span class="kwrd"&gt;byte&lt;/span&gt;[] hashedDataBytes = sha256hasher.ComputeHash(encoder.GetBytes(phrase));&lt;br /&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; byteArrayToString(hashedDataBytes);&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; sha384encrypt(&lt;span class="kwrd"&gt;string&lt;/span&gt; phrase) {&lt;br /&gt;        UTF8Encoding encoder = &lt;span class="kwrd"&gt;new&lt;/span&gt; UTF8Encoding();&lt;br /&gt;        SHA384Managed sha384hasher = &lt;span class="kwrd"&gt;new&lt;/span&gt; SHA384Managed();&lt;br /&gt;        &lt;span class="kwrd"&gt;byte&lt;/span&gt;[] hashedDataBytes = sha384hasher.ComputeHash(encoder.GetBytes(phrase));&lt;br /&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; byteArrayToString(hashedDataBytes);&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; sha512encrypt(&lt;span class="kwrd"&gt;string&lt;/span&gt; phrase) {&lt;br /&gt;        UTF8Encoding encoder = &lt;span class="kwrd"&gt;new&lt;/span&gt; UTF8Encoding();&lt;br /&gt;        SHA512Managed sha512hasher = &lt;span class="kwrd"&gt;new&lt;/span&gt; SHA512Managed();&lt;br /&gt;        &lt;span class="kwrd"&gt;byte&lt;/span&gt;[] hashedDataBytes = sha512hasher.ComputeHash(encoder.GetBytes(phrase));&lt;br /&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; byteArrayToString(hashedDataBytes);&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; byteArrayToString(&lt;span class="kwrd"&gt;byte&lt;/span&gt;[] inputArray) {&lt;br /&gt;        StringBuilder output = &lt;span class="kwrd"&gt;new&lt;/span&gt; StringBuilder(&lt;span class="str"&gt;""&lt;/span&gt;);&lt;br /&gt;        &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i = 0; i &amp;lt; inputArray.Length; i++) {&lt;br /&gt;            output.Append(inputArray[i].ToString(&lt;span class="str"&gt;"X2"&lt;/span&gt;));&lt;br /&gt;        }&lt;br /&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; output.ToString();&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/661371502199197807-2123146933472733678?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/2123146933472733678/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=2123146933472733678' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/2123146933472733678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/2123146933472733678'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2007/04/c-sha-2-cryptography-sha-256-sha-384.html' title='C# SHA-2 Cryptography: SHA-256, SHA-384, SHA-512'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-2787003016118802465</id><published>2007-03-09T22:25:00.000-05:00</published><updated>2007-03-09T22:28:35.435-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hackday07'/><category scheme='http://www.blogger.com/atom/ns#' term='yahoo'/><category scheme='http://www.blogger.com/atom/ns#' term='hackday'/><title type='text'>Hackday 07</title><content type='html'>Hackday 07 will be sometime in September. I already know I want to go. Evan do you want to create something together this year instead of doing separate hacks? Does anyone else want to go and join in on a hack? Let me know!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-2787003016118802465?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/2787003016118802465/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=2787003016118802465' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/2787003016118802465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/2787003016118802465'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2007/03/hackday-07.html' title='Hackday 07'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-8459892983068811262</id><published>2007-02-19T18:51:00.000-05:00</published><updated>2007-02-19T18:53:58.120-05:00</updated><title type='text'>YouTube.NET API</title><content type='html'>This component interfaces with YouTube's API. The download comes with a website full of examples on how to use it. If you want to integrate it into your project copy the DLL from the bin folder and put it into your project.&lt;a target="_blank" href="http://www.rushfrisby.com/youtubedotnetdemo" style="color: rgb(0, 0, 255);"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/a&gt;&lt;em&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;The component and example site were both written in Visual Studio 2005 using C#. It can also be used with VB.NET sites and Windows applications.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.rushfrisby.com/apps/youtube-api-dotnet.aspx"&gt;YouTube.NET API Component for .NET&lt;/a&gt;&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-8459892983068811262?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/8459892983068811262/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=8459892983068811262' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/8459892983068811262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/8459892983068811262'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2007/02/youtubenet-api.html' title='YouTube.NET API'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-2568124178297500270</id><published>2007-01-31T20:35:00.000-05:00</published><updated>2007-01-31T21:05:18.799-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='events'/><title type='text'>Devconnections Orlando</title><content type='html'>&lt;a href="http://www.devconnections.com/"&gt;Devconnections.com&lt;/a&gt; is having their latest conference in Orlando! I wanted to go to the fall conference in Vegas pretty bad and wasn't able to due to the cost, so I am glad this one is just a few miles away. I will definately be attending. These conferences look great and I am really looking forward to it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-2568124178297500270?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/2568124178297500270/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=2568124178297500270' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/2568124178297500270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/2568124178297500270'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2007/01/devconnections-orlando.html' title='Devconnections Orlando'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-2925698848997954981</id><published>2007-01-11T23:20:00.000-05:00</published><updated>2007-01-11T23:29:02.112-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='employment'/><category scheme='http://www.blogger.com/atom/ns#' term='web developer'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='jobs'/><category scheme='http://www.blogger.com/atom/ns#' term='job opening'/><category scheme='http://www.blogger.com/atom/ns#' term='position'/><title type='text'>Web Developer Position</title><content type='html'>My boss is submitting a requisition for a web developer today so I thought I would post it here before it ever gets to one of those public job listing sites. (And because I would really like the referral bonus!)  Here are some quick details, this is unofficial but probably what the job description will look like:&lt;br /&gt;&lt;br /&gt;Title: Web Developer II&lt;br /&gt;Location: Maitland, FL (Basically Orlando - mapquest it)&lt;br /&gt;Company: &lt;a href="http://www.sungardhe.com/"&gt;Sungard Higher Education&lt;/a&gt;&lt;br /&gt;Requirements: ASP.NET 2.0, Classic ASP, SQL Server 2000/2005, Bachelor's degree in related field&lt;br /&gt;Salary: 54K (I am 99% sure on this)&lt;br /&gt;&lt;br /&gt;The company is in the fortune 500 so we are big. The Maitland office has about 150 people. My department only has 8 people which are all cool guys. All of the projects can be accomplished in the time projected. My boss doesn't look over your shoulder or any of that nonsense and is very nice. You'll get full health benefits and 401K and all that stuff. You get 3 weeks vacation, which is very uncommon. (After 4 years it increases to 4 weeks!, after 11 years it increases to 5 weeks!!) You also have 2 weeks sick leave and 8 corporate holidays. Personally I think this is one of the best company/jobs you can find on the east coast right now.&lt;br /&gt;&lt;br /&gt;If you are interested or have any questions send me an email at &lt;a href="mailto:rush@rushfrisby.com"&gt;rush@rushfrisby.com&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-2925698848997954981?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/2925698848997954981/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=2925698848997954981' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/2925698848997954981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/2925698848997954981'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2007/01/web-developer-position.html' title='Web Developer Position'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-6624256828648984638</id><published>2007-01-05T01:53:00.000-05:00</published><updated>2007-01-05T02:23:02.557-05:00</updated><title type='text'>Blog Tagged</title><content type='html'>I've been blog tagged by &lt;a href="http://evanhoff.com/archive/2007/01/03/Tag-Im-It.aspx"&gt;Evan&lt;/a&gt;; so much for starting the year off with a good post. In honor of this tagging game I need to post 5 things that most people do not know about me. Thanks a lot Evan :-P&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;While taking the SAT I was tired of reading all of the English exam questions so I skipped every other section and guessed. I scored a 1200+? (it was a long time ago) which is pretty good.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;I am a &lt;a href="http://files.rushfrisby.com/images/stingray_city.jpg" target="_blank"&gt;certified scuba diver&lt;/a&gt;. I do most of my diving in the Cayman islands.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The engine in my first car blew up, twice. My second car was totaled (not my fault). I am on &lt;a href="http://files.rushfrisby.com/camaro/July_25th_2006_stock/camaro001.jpg" target="_blank"&gt;my third car&lt;/a&gt; right now (pray that nothing bad happens, thanks!).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;I spent new years eve writing code. Yes, my girlfriend was pissed.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;I have been playing soccer for the last 16 years and I love it.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;One more for good luck: &lt;a href="http://files.rushfrisby.com/images/rush_snowboard.jpg" target="_blank"&gt;I love to snowboard&lt;/a&gt;, too bad it doesn't snow in Florida :'(&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;I am not tagging anyone, you are safe... for now!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-6624256828648984638?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/6624256828648984638/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=6624256828648984638' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/6624256828648984638'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/6624256828648984638'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2007/01/blog-tagged.html' title='Blog Tagged'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-4818592894223509103</id><published>2006-12-29T00:43:00.000-05:00</published><updated>2006-12-29T00:47:33.628-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='format'/><category scheme='http://www.blogger.com/atom/ns#' term='form'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='regex'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='regular expressions'/><category scheme='http://www.blogger.com/atom/ns#' term='date'/><category scheme='http://www.blogger.com/atom/ns#' term='validation'/><category scheme='http://www.blogger.com/atom/ns#' term='regularexpressionvalidator'/><title type='text'>C# date format regular expression</title><content type='html'>I just checked the RegularExpressionValidator control and it does not have a preset regular expression to verify a US date format. You can enter this regular expression to do this:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;^([0-9]{1,2})/([0-9]{1,2})/([0-9]{4,4})$&lt;/code&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-4818592894223509103?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/4818592894223509103/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=4818592894223509103' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/4818592894223509103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/4818592894223509103'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2006/12/c-date-format-regular-expression.html' title='C# date format regular expression'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-5594571037373956384</id><published>2006-12-27T17:08:00.000-05:00</published><updated>2006-12-27T17:16:01.984-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='visual studio 2005'/><title type='text'>Visual Studio Ctrl + Tab</title><content type='html'>I found a cool feature in Visual Studio 2005 today. I meant to press Alt + Tab, but instead I pressed Ctrl + Tab. Instead of switching through windows it switched through documents I had open in Visual Studio. This is great because I only close documents when I have so many open that it becomes annoying to browse through them. With this feature I can open as many as I want and easily find them!&lt;br /&gt;&lt;br /&gt;&lt;img src="http://files.rushfrisby.com/dotnetrush/images/vs2005_ctrl_tab.gif" alt="Visual Studio Ctrl + Tab" title="Visual Studio Ctrl + Tab" border="0"&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-5594571037373956384?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/5594571037373956384/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=5594571037373956384' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/5594571037373956384'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/5594571037373956384'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2006/12/visual-studio-ctrl-tab.html' title='Visual Studio Ctrl + Tab'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-435335428084450889</id><published>2006-12-22T11:08:00.000-05:00</published><updated>2006-12-22T11:26:40.970-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='asp.net 1.1'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='application pools'/><title type='text'>Running .NET 1.1 and 2.0 web applications simultaneously</title><content type='html'>When I first started running .NET 2.0 web applications on my server, I would get errors in both 1.1 and 2.0 applications about every 10 minutes. For some reason my DefaultAppPool was getting shut down and I would have to restart it. After it happened a few times I figured there was something really wrong. I did some research and found that you cannot run 1.1 and 2.0 applications in the same application pool which, by default, is how IIS configures your applications. To fix this, follow these steps:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;strong&gt;Create a new application pool&lt;/strong&gt;:&lt;br /&gt;&lt;br /&gt;Right click on Application Pools and go to New &gt; Application Pool.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://files.rushfrisby.com/dotnetrush/images/dotnet2_apppool_01.gif"&gt;&lt;br /&gt;&lt;br /&gt;Name it "DotNet2" or something like that, and click OK. You will see it added to your list of application pools.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Tell your application to use the appropriate application pool&lt;/strong&gt;:&lt;br /&gt;&lt;br /&gt;Right click on your application and go to Properties. Switch to the Home Directory tab. At the bottom should be your Application Name. If this section is disabled then click the button to create a new application. Give it an easily identifiable name. The box at the very bottom will allow you to choose your application pool. Select DotNet2, or whatever you had named it in step 1.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://files.rushfrisby.com/dotnetrush/images/dotnet2_apppool_02.gif"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Tell IIS to use ASP.NET 2.0&lt;/strong&gt;:&lt;br /&gt;&lt;br /&gt;Switch to the ASP.NET Tab. For the version use the drop down box to select 2.0.xxx.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://files.rushfrisby.com/dotnetrush/images/dotnet2_apppool_03.gif"&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;That's it! You can leave your 1.1 applications running in the DefaultAppPool and they will be fine.&lt;br /&gt;&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-435335428084450889?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/435335428084450889/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=435335428084450889' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/435335428084450889'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/435335428084450889'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2006/12/running-net-11-and-20-web-applications.html' title='Running .NET 1.1 and 2.0 web applications simultaneously'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-4602810663317666686</id><published>2006-12-20T16:43:00.000-05:00</published><updated>2006-12-20T16:51:33.834-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flickr'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='yahoo'/><title type='text'>Application repository online</title><content type='html'>I have put up an application repository on my website so that all of my apps are in a single easy to find place. You can view them at &lt;a href="http://www.rushfrisby.com"&gt;rushfrisby.com&lt;/a&gt;. The rest of the website isn't complete yet though, figures... Anyways since I have a new place to host my apps I updated my Flickr Wallpaper Rotator application profile on the &lt;a href="http://gallery.yahoo.com/"&gt;Yahoo Application Gallery&lt;/a&gt;. It was approved and, to my surprise, is now the top editor's pick!&lt;br /&gt;&lt;br /&gt;Recently I have been playing with ASP.NET AJAX RC1, and also the &lt;a href="http://ajax.asp.net/ajaxtoolkit/"&gt;Ajax Control Toolkit&lt;/a&gt; listed on ajax.asp.net. I have to say that the control toolkit is pretty sweet. Take a look at that link to see a demo of all the controls. I will probably make another post about this soon with some examples.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-4602810663317666686?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/4602810663317666686/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=4602810663317666686' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/4602810663317666686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/4602810663317666686'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2006/12/application-repository-online.html' title='Application repository online'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-6868672171744597254</id><published>2006-12-17T14:54:00.000-05:00</published><updated>2006-12-17T15:00:32.297-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='visual studio 2005'/><category scheme='http://www.blogger.com/atom/ns#' term='sp1'/><title type='text'>Visual Studio 2005 SP1 will break your apps</title><content type='html'>Not the ones that you build but probably ones that you have installed. After I installed SP1 I rebooted only to have a bunch of applications give me errors and die. One of them was the Dell SetPoint which I don't care about. Aversoft Sticker did the same thing but worked after I reinstalled it. The &lt;a href="http://flickr.com/tools/" target="_blank"&gt;Flickr Uploadr&lt;/a&gt; that I was using also does not work, even after uninstall/reinstalling it.&lt;br /&gt;&lt;br /&gt;I am sure there are more that do not work but these are the ones I have run into so far. Has anyone else had this problem?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-6868672171744597254?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/6868672171744597254/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=6868672171744597254' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/6868672171744597254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/6868672171744597254'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2006/12/visual-studio-2005-sp1-will-break-your.html' title='Visual Studio 2005 SP1 will break your apps'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-6343361985622215819</id><published>2006-12-16T01:18:00.000-05:00</published><updated>2006-12-16T01:46:48.083-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='guid'/><category scheme='http://www.blogger.com/atom/ns#' term='uniqueidentifier'/><category scheme='http://www.blogger.com/atom/ns#' term='command paramters'/><category scheme='http://www.blogger.com/atom/ns#' term='SelectParameters'/><title type='text'>Passing UniqueIdentifier (Guid) command parameters</title><content type='html'>I am starting to use guid's as primary keys instead of incrementing int's. I have a page that needs to fill a gridview which has a select parameter of a guid. Guid is not an object type you can choose while defining your parameter so I first tried passing it as an Object type, thinking that the conversion would happen behind the scenes. It didn't. I did some research on how to make this work and found a couple of articles on how to create custom parameter types. The articles were a little confusing and I ended up not being able to figure it out. Instead I did it my way - the easy way! I passed my parameter as a string and then converted it to a uniqueidentifier in my stored procedure. In my procedure I declared the parameter as a varchar with a size of 36. You can &lt;a href="http://msdn2.microsoft.com/en-us/library/ms187928.aspx"&gt;read more about the t-sql convert function&lt;/a&gt; if you'd like, or just copy my example. Here is my procedure:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;&lt;br /&gt;ALTER PROCEDURE [dbo].[Version_Fill]&lt;br /&gt;@Application varchar(36)&lt;br /&gt;AS&lt;br /&gt;&lt;br /&gt;DECLARE @guid uniqueidentifier&lt;br /&gt;SELECT @guid = CONVERT(uniqueidentifier, @Application)&lt;br /&gt;&lt;br /&gt;SELECT * FROM [Version] WHERE [Application]=@guid ORDER BY ReleaseDate DESC&lt;br /&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;Here is my data source object:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="&amp;lt;%$ ConnectionStrings:rushapps %&amp;gt;" SelectCommand="Version_Fill" SelectCommandType="StoredProcedure"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;SelectParameters&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;asp:QueryStringParameter DefaultValue="0" Name="Application" QueryStringField="ID" Type="String" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/SelectParameters&amp;gt;&lt;br /&gt;&amp;lt;/asp:SqlDataSource&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;This is the easiest way, in my opinion.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-6343361985622215819?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/6343361985622215819/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=6343361985622215819' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/6343361985622215819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/6343361985622215819'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2006/12/passing-uniqueidentifier-guid-command.html' title='Passing UniqueIdentifier (Guid) command parameters'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-6242932615270462469</id><published>2006-12-12T22:20:00.000-05:00</published><updated>2006-12-12T22:30:15.094-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='Gran Paradiso Alpha 1'/><title type='text'>Firefox 3 Alpha 1 Release</title><content type='html'>I installed it yesterday and gave it a whirl. What happened? I ended up uninstalling it and going back to 2.0. Unless you are a complete hardcore web designer and feel the need to help Mozilla out, then I would stay away from this release. My experience with it was that it did not load CSS from certain websites so I was left viewing the plain HTML. Since most sites are designed using CSS these days I was stuck viewing sites that looked like they were made in the early 90's. Another bad thing about the release is that it installs over Firefox 2. In my opinion it should have been installed along side of 2.0 so that I would have the option to run 2.0 or 3.0. Also the alpha release did not have the "Firefox" logo anywhere. It was simply the globe without the fox. Lastly it installed itself as "Gran Paradiso Alpha 1" instead of being called "Firefox".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-6242932615270462469?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/6242932615270462469/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=6242932615270462469' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/6242932615270462469'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/6242932615270462469'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2006/12/firefox-3-alpha-1-release.html' title='Firefox 3 Alpha 1 Release'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-92093535188168246</id><published>2006-12-12T13:50:00.000-05:00</published><updated>2006-12-12T14:07:01.315-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ItemCommand'/><category scheme='http://www.blogger.com/atom/ns#' term='CommandName'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Repeater'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='CommandArgument'/><title type='text'>Using Repeater ItemCommand</title><content type='html'>This is very similar to &lt;a href="http://dotnetrush.blogspot.com/2006/11/using-gridview-rowcommand.html"&gt;Using DataGrid RowCommand&lt;/a&gt; but with some slight changes.&lt;br /&gt;&lt;br /&gt;First create a repeater control and bind some data to it which ever way you like. Inside your ItemTemplate (or any other template associated with the repeater control) create a link button control (or button control, whatever you want). Set the CommandName to a descriptive name. Set the CommandArgument to your unique identifier. Mine looks like this:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;asp:LinkButton ID="btnDeleteComment" runat="server" Text="Delete" CommandName="DeleteComment" CommandArgument=&amp;lt;%#Eval("CommentID") %&amp;gt;&amp;gt;&amp;lt;/asp:LinkButton&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;I am setting the CommandArgument to the CommentID which is databound to my repeater. Now in design view, double click on your repeater control and Visual Studio will create a method for handling the ItemCommand event. Here we will test if the CommandName is the one we are looking for and then do some action with the CommandArgument. (In my case delete a comment). This is what mine looks like:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;protected void rptComments_ItemCommand(object source, RepeaterCommandEventArgs e) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(e.CommandName.ToLower().Equals("deletecomment")) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;clsComment comment = new clsComment("mediadb");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;comment.CommentID = int.Parse(((LinkButton)e.CommandSource).CommandArgument);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;comment.DeleteRecord();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rptComments.DataBind();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&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/661371502199197807-92093535188168246?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/92093535188168246/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=92093535188168246' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/92093535188168246'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/92093535188168246'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2006/12/using-repeater-itemcommand.html' title='Using Repeater ItemCommand'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-1811527156309495057</id><published>2006-12-05T21:07:00.000-05:00</published><updated>2006-12-12T14:08:11.333-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><category scheme='http://www.blogger.com/atom/ns#' term='varchar max'/><category scheme='http://www.blogger.com/atom/ns#' term='parameters'/><category scheme='http://www.blogger.com/atom/ns#' term='decimal'/><category scheme='http://www.blogger.com/atom/ns#' term='precision'/><category scheme='http://www.blogger.com/atom/ns#' term='nvarchar max'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='scale'/><title type='text'>SQL Command Parameters</title><content type='html'>varchar(MAX) and nvarchar(MAX) was introduced in SQL 2005. I started using these but when I added parameters to an sqlcommand I was never sure what to use as the size. I used to use int.MaxValue but I was looking at some code online today which used -1. Here is my example (I do everything inline to minimize lines of code.)&lt;br /&gt;&lt;br /&gt;&lt;code&gt;cmd.Parameters.Add("@Comment", SqlDbType.VarChar, -1).Value = _Comment;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Simple enough.&lt;br /&gt;&lt;br /&gt;Since I do everything inline and since I rarely use the decimal data type in sql, I was having problems. My numbers kept on getting rounded off. I was too lazy to look it up at first but this week I felt the need to finally do it the right way. Turns out you can't do it inline. Here is my example (for a decimal(10,2) field).&lt;br /&gt;&lt;br /&gt;&lt;code&gt;SqlParameter HoursParam = cmd.Parameters.Add("@Hours", SqlDbType.Decimal);&lt;br /&gt;HoursParam.Value = _Hours;&lt;br /&gt;HoursParam.Precision = 10;&lt;br /&gt;HoursParam.Scale = 2;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;10 (Precision) is the total number of digits in the number. 2 (Scale) is how many of those digits come after the decimal point.&lt;br /&gt;&lt;br /&gt;Simple also. This will probably serve as a quick reference for Googler's of the world, hope it helps.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-1811527156309495057?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/1811527156309495057/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=1811527156309495057' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/1811527156309495057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/1811527156309495057'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2006/12/sql-command-parameters.html' title='SQL Command Parameters'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-4709525976756635193</id><published>2006-11-29T10:31:00.000-05:00</published><updated>2006-11-29T10:39:29.203-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='asp.net 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='code generator'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='tabs'/><category scheme='http://www.blogger.com/atom/ns#' term='tab control'/><title type='text'>Simple ASP.NET Tab Generator</title><content type='html'>One of the tools ASP.NET should come with is a tab control. Since it doesn't I end up creating my own way to do this. I am sure there are components you can buy that do the same thing, but where is the fun in that? Instead I have created a code generator that you can use to create a "Tab Control". Once you drop it in your page make sure to put some content in each View control. Also you should specify an ActiveViewIndex for the tabViews control (usually 0).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.rushfrisby.com/TabGenerator/"&gt;Simple ASP.NET Tab Generator&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-4709525976756635193?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.rushfrisby.com/TabGenerator/' title='Simple ASP.NET Tab Generator'/><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/4709525976756635193/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=4709525976756635193' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/4709525976756635193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/4709525976756635193'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2006/11/simple-aspnet-tab-generator.html' title='Simple ASP.NET Tab Generator'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-4558949996478964238</id><published>2006-11-21T14:29:00.000-05:00</published><updated>2006-12-05T21:07:22.003-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='asp.net 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='gridview'/><category scheme='http://www.blogger.com/atom/ns#' term='rowcommand'/><title type='text'>Using GridView RowCommand</title><content type='html'>I haven't used this in 6 months and had to lookup how to do it. For some reason the built-in GridView "delete" feature does not work for me (have tried it on multiple setups). Fortunately it is not hard to replicate.&lt;br /&gt;&lt;br /&gt;First your GridView has a property called DataKeyNames. Set this to the primary key of your data source. Now in your GridView create a ButtonField. Give it some text and specify the CommandName. CommandName can be any string but keep it simple.&lt;br/&gt;&lt;br /&gt;&lt;img src="http://files.rushfrisby.com/dotnetrush/images/RowCommand_01.jpg" style="border:0"&gt;&lt;br/&gt;&lt;br /&gt;Next create a RowCommand event for your GridView.&lt;br/&gt;&lt;br /&gt;&lt;img src="http://files.rushfrisby.com/dotnetrush/images/RowCommand_02.jpg" style="border:0"&gt;&lt;br/&gt;&lt;br /&gt;Next fill in the functionality for your command. In the event method you just have to test for which command was fired. Take a look at my example, it also shows how to get the GridView row index and the primary key so that I can delete the record from my sql table.&lt;br/&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;protected void gridServers_RowCommand(object sender, GridViewCommandEventArgs e) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;if (e.CommandName.ToLower().Equals("deleteserver")) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int index = Convert.ToInt32(e.CommandArgument);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int ServerID = Convert.ToInt32(gridServers.DataKeys[index].Value);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;clsServer server = new clsServer("mediadb");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;server.ServerID = ServerID;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;server.DeleteRecord();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gridServers.DataBind();&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;You can come up with other commands, just be creative.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-4558949996478964238?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/4558949996478964238/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=4558949996478964238' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/4558949996478964238'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/4558949996478964238'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2006/11/using-gridview-rowcommand.html' title='Using GridView RowCommand'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-2105396719377600091</id><published>2006-11-16T16:18:00.000-05:00</published><updated>2006-11-17T00:45:16.330-05:00</updated><title type='text'>Web Application Stress Tool</title><content type='html'>Just found this &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=E2C0585A-062A-439E-A67D-75A89AA36495&amp;displaylang=en"&gt;Web Application Stress Tool&lt;/a&gt; from Microsoft and thought I would share. I've never heard of it until today. When I get home from work I will install it on my server and check it out. I have a few sites I want to hammer :-)&lt;br /&gt;&lt;br /&gt;Edit: Just tested it out and it is pretty basic. I still like it though. My poor wireless connection at home would never "stress" my server but I got a glimpse of the program at least. I will try it tomorrow with 6 servers running the program on my site, that should give it a better test.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-2105396719377600091?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/2105396719377600091/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=2105396719377600091' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/2105396719377600091'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/2105396719377600091'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2006/11/web-application-stress-tool.html' title='Web Application Stress Tool'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-3588739505251282933</id><published>2006-11-10T09:02:00.000-05:00</published><updated>2006-11-10T09:08:40.879-05:00</updated><title type='text'>.NET 3.0 Downloadable</title><content type='html'>.NET 3.0 was released today. You can &lt;a href="http://msdn.microsoft.com/windowsvista/downloads/products/default.aspx"&gt;get all of the goodies&lt;/a&gt; from the Microsoft website.&lt;br /&gt;&lt;br /&gt;I will be installing it on my home laptop along with Vista beta 2. I should be posting on this soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-3588739505251282933?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/3588739505251282933/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=3588739505251282933' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/3588739505251282933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/3588739505251282933'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2006/11/net-30-downloadable.html' title='.NET 3.0 Downloadable'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-660842886527242684</id><published>2006-11-03T12:34:00.000-05:00</published><updated>2006-11-03T12:46:53.304-05:00</updated><title type='text'>Snippet Compiler</title><content type='html'>If you write lots of little applications to help get you through the day then you will find this useful. It creates a blank (C#) console project and lets you type in code real fast and run it. Saves time in loading up visual studio and creating a new project etc... You can save the code or just run it and discard when finished. I found this today and wrote a quick app with it which worked out well. Give it a try. (&lt;a href="http://www.sliver.com/dotnet/SnippetCompiler/"&gt;Snippet Compiler website&lt;/a&gt;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-660842886527242684?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/660842886527242684/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=660842886527242684' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/660842886527242684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/660842886527242684'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2006/11/snippet-compiler.html' title='Snippet Compiler'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-1193519423975026571</id><published>2006-10-27T15:53:00.000-04:00</published><updated>2006-12-12T14:08:57.489-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='regex'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='regular expressions'/><title type='text'>Find Links Using RegEx</title><content type='html'>I am writing a link crawler and found this useful. I found it on another site but modified it a little.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;string matchlinks = @"&lt;A[^&gt;]*?HREF\s*=\s*[""']?([^'"" &gt;]+?)[ '""]?[^&gt;]*?&gt;";&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This will match any &amp;lt;a href=""&amp;gt; tag, even if it has other elements in it or uses single quotes. I suggest stripping all line breaks. \r\n, \r, and \n before trying to match. For the match options I used SingleLine or IgnoreCase or IgnorePatternWhitespace. Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-1193519423975026571?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/1193519423975026571/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=1193519423975026571' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/1193519423975026571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/1193519423975026571'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2006/10/find-links-using-regex.html' title='Find Links Using RegEx'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-9072470852504617699</id><published>2006-10-23T19:26:00.000-04:00</published><updated>2006-12-14T04:03:36.081-05:00</updated><title type='text'>Tips for developers new to the game</title><content type='html'>I recently graduated from college and am now working at a fortune 500 company. Today I was given a very nice compliment that I was the strongest programmer in my department. All of this went straight to my head, of course, and so I've put together some tips for  the young (.net?) developers of the world.&lt;br /&gt;&lt;br /&gt;&lt;div style="font-face:Arial;font-size:11pt;color:#000080;"&gt;Read, read, read&lt;/div&gt;&lt;div&gt;Get a news reader and subscribe to as much stuff as you can handle. The more the better. Check it all the time, because some sites flip through news very quick. Most of the time the news is trash but you'll always find a few good articles a day. This will help keep you on top of your game.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="font-face:Arial;font-size:11pt;color:#000080;"&gt;Attend conferences, workshops, and other events&lt;/div&gt;&lt;div&gt;This is the best way to share ideas, meet new people, and start personal relationships that can help you during the length of your career. Not only that but you will learn more at these events than you can by reading online because the exchange of information is so much faster and richer because you can interact one-on-one with people who have experience. Go to hacker events, developer events, and related technology events. They all will bring their own level of value and will help you grow.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="font-face:Arial;font-size:12pt;color:#000080;"&gt;Become good at something&lt;/div&gt;&lt;div&gt;Have something that is your niche. This should be the CORE of your knowledge aka what you are known for! Perhaps it is .NET? Whatever it is make sure you know it inside-and-out. It would be best if you could belt out a few technologies (like .NET + SQL Server for example) but just start out with one.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="font-face:Arial;font-size:12pt;color:#000080;"&gt;Jack of all trades&lt;/div&gt;&lt;div&gt;Compliment your core knowledge with an abundance of knownledge in other areas. If you know C# for instance you can pick up PHP very quick. You don't have to know the ins-and-outs of all these other technologies but know enough to be proficient and get the job done when needed. Don't just focus on programming either. Become good with using Photoshop, Excel, Word, and other software. Being a well rounded person is very valuable.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="font-face:Arial;font-size:12pt;color:#000080;"&gt;Push the envelope&lt;/div&gt;&lt;div&gt;As soon as you hear of a new technology you should at least give it a go (or two). It may seem hazy to get into things that aren't totally defined yet or are out of your comfort zone but it will keep your mind active and creative. Doing something the first time is always the hardest. It usually takes me many tries to get something down to an art - and even then, you are always refining your ways. Don't be afraid to try new things! Test your newfound technologies in things you do on the side. Once you've got them down-pat is when you can bring them to the table at your job.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="font-face:Arial;font-size:12pt;color:#000080;"&gt;Work Hard&lt;/div&gt;&lt;div&gt;I've had jobs where I've been lazy and also jobs where I've worked hard. It makes a big difference and people will notice. If you work you ass off it will pay off. It won't happen right away so you need to be persistant. No one likes the lazy guy anyways! Don't be afraid to show-off your skills. If no one sees your work then everything you've done is for nothing. You could even end up getting fired after all your hard work (I speak from experience). Be involved in the core of what your business is doing. Do something that is meaningful and do not take the easy assignments. Communicate and share with your group.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;There is my list. It's simple and plain common sense. Just so you know I am not a total n00b in the work force. I have over 6 years of development under my belt. I've seen what works and what doesn't work. I got lucky early in life and scored an awesome development job. Thanks Andrew.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-9072470852504617699?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/9072470852504617699/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=9072470852504617699' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/9072470852504617699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/9072470852504617699'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2006/10/tips-for-developers-new-to-game.html' title='Tips for developers new to the game'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-6343591680196001472</id><published>2006-10-06T13:06:00.000-04:00</published><updated>2006-10-06T13:12:53.361-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.net 3.0'/><title type='text'>Spotlight on: .NET Framework 3.0</title><content type='html'>I get the MSDN Flash newsletter and every once in a while I browse through just to get an idea of new stuff that is out. In the latest newsletter there is some stuff on .NET 3.0. This is taken straight out of the newsletter:&lt;blockquote&gt;Featured downloads...&lt;br /&gt; &lt;br /&gt;&lt;a href="http://go.microsoft.com/?linkid=5561913"&gt;Microsoft Pre-Release Software Microsoft .NET Framework 3.0 - September CTP&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;&lt;a href="http://go.microsoft.com/?linkid=5561914"&gt;Microsoft Visual Studio Code Name "Orcas" Community Technology Preview - Development Tools for .NET Framework 3.0&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;&lt;a href="http://go.microsoft.com/?linkid=5561915"&gt;Microsoft .NET Framework 3.0 Uninstall Tool&lt;/a&gt;&lt;br /&gt;This article describes how to uninstall pre-release versions of Microsoft .NET Framework 3.0 if the typical uninstall process is unsuccessful.&lt;br /&gt; &lt;br /&gt;&lt;a href="http://go.microsoft.com/?linkid=5561916"&gt;.NET Framework 3.0 Webcast Series&lt;/a&gt;&lt;br /&gt;In this series of free webcasts, we cover Windows Presentation Foundation, Windows Communication Foundation, Windows Workflow Foundation, Windows CardSpace, and XAML.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;I am a little scared to install 3.0 but I will probably cave in once I hear some cool new stuff about it. I have heard that it is .NET 2.0 with WinFX and probably Atlas built into it. When I check it out I'll share with everyone :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-6343591680196001472?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/6343591680196001472/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=6343591680196001472' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/6343591680196001472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/6343591680196001472'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2006/10/spotlight-on-net-framework-30.html' title='Spotlight on: .NET Framework 3.0'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-8202298281966484048</id><published>2006-10-03T12:10:00.000-04:00</published><updated>2006-12-22T14:22:04.290-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wallpaper'/><category scheme='http://www.blogger.com/atom/ns#' term='apps'/><category scheme='http://www.blogger.com/atom/ns#' term='yahoo'/><category scheme='http://www.blogger.com/atom/ns#' term='hackday06'/><category scheme='http://www.blogger.com/atom/ns#' term='hackday'/><title type='text'>Flickr Wallpaper Rotator - Update</title><content type='html'>An API key is no longer required. The user name search option is now enabled.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;The download for this application has moved to my application repository.&lt;/i&gt; &lt;a href="http://www.rushfrisby.com/apps/Flickr-Wallpaper-Rotator.aspx"&gt;Click here to go there now!&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-8202298281966484048?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/8202298281966484048/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=8202298281966484048' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/8202298281966484048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/8202298281966484048'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2006/10/flickr-wallpaper-rotator.html' title='Flickr Wallpaper Rotator - Update'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-3189289490266270134</id><published>2006-09-30T15:19:00.000-04:00</published><updated>2006-12-22T14:21:49.660-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wallpaper'/><category scheme='http://www.blogger.com/atom/ns#' term='apps'/><category scheme='http://www.blogger.com/atom/ns#' term='yahoo'/><category scheme='http://www.blogger.com/atom/ns#' term='hackday06'/><category scheme='http://www.blogger.com/atom/ns#' term='hackday'/><title type='text'>http://www.rushfrisby.com/apps/Flickr-Wallpaper-Rotator.aspx</title><content type='html'>This program is my "hack" submission for Yahoo Hackday. It rotates your wallpaper using images from Flickr.&lt;br /&gt;&lt;br /&gt;Requirements: .NET 2.0 Framework&lt;br /&gt;&lt;br /&gt;&lt;i&gt;The download for this application has moved to my application repository.&lt;/i&gt; &lt;a href="http://www.rushfrisby.com/apps/Flickr-Wallpaper-Rotator.aspx"&gt;Click here to go there now!&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-3189289490266270134?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/3189289490266270134/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=3189289490266270134' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/3189289490266270134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/3189289490266270134'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2006/09/wallpaper-flickr-my-hackday-hack.html' title='http://www.rushfrisby.com/apps/Flickr-Wallpaper-Rotator.aspx'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-1272267046853418657</id><published>2006-09-14T12:55:00.000-04:00</published><updated>2006-09-14T12:59:37.540-04:00</updated><title type='text'>Atlas roadmap and naming</title><content type='html'>Atlas is finally going to be officially supported by Microsoft. You can &lt;a href="http://weblogs.asp.net/scottgu/archive/2006/09/11/_2200_Atlas_2200_-1.0-Naming-and-Roadmap.aspx"&gt;read this article&lt;/a&gt; to find out what all is happening.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-1272267046853418657?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://weblogs.asp.net/scottgu/archive/2006/09/11/_2200_Atlas_2200_-1.0-Naming-and-Roadmap.aspx' title='Atlas roadmap and naming'/><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/1272267046853418657/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=1272267046853418657' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/1272267046853418657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/1272267046853418657'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2006/09/atlas-roadmap-and-naming.html' title='Atlas roadmap and naming'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-7136708824359161625</id><published>2006-09-06T10:51:00.000-04:00</published><updated>2006-12-22T14:23:55.860-05:00</updated><title type='text'>HTML Stripper Update</title><content type='html'>I updated the interface so it looks a little better plus added a form to choose which tags you want removed so you don't have to edit the txt file manually.&lt;br /&gt;&lt;br /&gt;I also added htmlStripperQuick.exe which will copy text from the clipboard, replace the tags listed in RemoveTags.txt and then paste it back to the clipboard. I figure if you put this in your quick launch toolbar it would work real nice.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;The download for this application has moved to my application repository.&lt;/i&gt; &lt;a href="http://www.rushfrisby.com/apps/HTML-Stripper.aspx"&gt;Click here to go there now!&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-7136708824359161625?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/7136708824359161625/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=7136708824359161625' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/7136708824359161625'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/7136708824359161625'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2006/09/html-stripper-update.html' title='HTML Stripper Update'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-5248095370785274408</id><published>2006-09-01T17:15:00.000-04:00</published><updated>2006-12-22T14:23:03.796-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='html stripper'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='html tags'/><category scheme='http://www.blogger.com/atom/ns#' term='downloads'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><title type='text'>HTML Stripper</title><content type='html'>Today I wrote a program that will strip HTML of out of a blob of text. I am posting it here in case someone else has a use for it. When you extract the archive you will notice that there are 4 files:&lt;ol&gt;&lt;li&gt;htmlStripper.exe - You must have the .NET 2.0 Framework installed to run this.&lt;/li&gt;&lt;li&gt;RemoveTags.txt - Any tags listed in this file will be removed from the blob of text when you run the program.&lt;/li&gt;&lt;li&gt;HtmlTags.txt - A reference list of most HTML tags.&lt;/li&gt;&lt;li&gt;readme.txt - Gives a description of the program.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;The download for this application has moved to my application repository.&lt;/i&gt; &lt;a href="http://www.rushfrisby.com/apps/HTML-Stripper.aspx"&gt;Click here to go there now!&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-5248095370785274408?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/5248095370785274408/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=5248095370785274408' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/5248095370785274408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/5248095370785274408'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2006/09/html-stripper.html' title='HTML Stripper'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-920750812057901412</id><published>2006-08-22T09:12:00.000-04:00</published><updated>2006-08-22T09:34:03.585-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='stored procedures'/><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><category scheme='http://www.blogger.com/atom/ns#' term='codesmith'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='downloads'/><category scheme='http://www.blogger.com/atom/ns#' term='csharp'/><title type='text'>Do not write repetitive code!</title><content type='html'>About 6 years ago I was doing ASP development. After a while I found myself writing classes and stored procedures that all followed the same structure. This was when I decided to stop writing "repetative" code and instead I wrote a program that would create my ASP and and stored procedures for me. I would still be using my program today except I did not want to maintain the program. Instead I've found something better to do the job! It is called &lt;a href="http://www.codesmithtools.com/"&gt;CodeSmith&lt;/a&gt;. What you do is create a codesmith template, open it, run it, and either save or copy/paste whatever your output is.&lt;br /&gt;&lt;br /&gt;I have create two templates which I will be sharing with you. The first one is a template which will create a C# class based on a sql database table. The second is a template which will create 5 stored procedures which your class uses to interact with the same table. The only catch is that the table must contain one field which is the primary key. When you open these templates check out the properties pane in CodeSmith. In the C# class template there is a property called ConnectionString_Name. You must set this to a named connection from your web.config file. In both templates you will see a property called SourceTable. Click on the field which will bring up the "..." button. When you click on this you can choose your datasource and select a table. If you do not have any datasources you will be able to add one.&lt;br /&gt;&lt;br /&gt;Every time I use CodeSmith to generate this code it saves me about a days worth of work. You may also want to check out the &lt;a href="http://community.codesmithtools.com/files/default.aspx"&gt;CodeSmith template gallery&lt;/a&gt;. I hope you will find this as useful as I do.&lt;br /&gt;&lt;div style="margin: 0 0 15px 0;"&gt;&lt;a href="http://files.rushfrisby.com/dotnetrush/code/codesmith_templates.zip"&gt;&lt;img src="http://photos1.blogger.com/blogger2/4207/80733825952050/1600/save_icon_en-US.gif" alt="Download Rush's CodeSmith templates" border="0" style="padding:0 5px 0 0; border:0;" align="absmiddle" /&gt;Download Rush's CodeSmith templates&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-920750812057901412?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/920750812057901412/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=920750812057901412' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/920750812057901412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/920750812057901412'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2006/08/do-not-write-repetitive-code.html' title='Do not write repetitive code!'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-2858594537540631187</id><published>2006-08-20T19:01:00.001-04:00</published><updated>2007-05-15T14:10:24.893-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sha-1'/><category scheme='http://www.blogger.com/atom/ns#' term='sha1'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='md5'/><category scheme='http://www.blogger.com/atom/ns#' term='encryption'/><category scheme='http://www.blogger.com/atom/ns#' term='downloads'/><title type='text'>MD5 &amp; SHA1 Encryption</title><content type='html'>This post has been updated - more methods on &lt;a href="http://dotnetrush.blogspot.com/2007/04/c-sha-2-cryptography-sha-256-sha-384.html"&gt;MD5, SHA-1 and SHA-2 Encryption&lt;/a&gt;.&lt;br /&gt;&lt;hr size="1" color="#c0c0c0"&gt;&lt;br /&gt;Encryption  in .NET is pretty simple. Here I will show you two types of encryption you can use - &lt;a href="http://en.wikipedia.org/wiki/MD5"&gt;MD5&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/SHA_hash_functions"&gt;SHA1&lt;/a&gt;. I have built a simple class to do the encryption. I will just post the code and a link to my example since it's pretty easy to follow along.&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;using System.Security.Cryptography;&lt;br /&gt;using System.Text;&lt;br /&gt;&lt;br /&gt;public class clsCrypto {&lt;br /&gt;&lt;img src="http://files.rushfrisby.com/images/pixel.gif" style="border: 0; height: 1px; width:12px; padding: 0;"&gt;public clsCrypto() {&lt;br /&gt;&lt;img src="http://files.rushfrisby.com/images/pixel.gif" style="border: 0; height: 1px; width:12px; padding: 0;"&gt;}&lt;br /&gt;&lt;img src="http://files.rushfrisby.com/images/pixel.gif" style="border: 0; height: 1px; width:12px; padding: 0;"&gt;public string md5encrypt(string phrase) {&lt;br /&gt;&lt;img src="http://files.rushfrisby.com/images/pixel.gif" style="border: 0; height: 1px; width:24px; padding: 0;"&gt;UTF8Encoding encoder = new UTF8Encoding();&lt;br /&gt;&lt;img src="http://files.rushfrisby.com/images/pixel.gif" style="border: 0; height: 1px; width:24px; padding: 0;"&gt;MD5CryptoServiceProvider md5hasher = new MD5CryptoServiceProvider();&lt;br /&gt;&lt;img src="http://files.rushfrisby.com/images/pixel.gif" style="border: 0; height: 1px; width:24px; padding: 0;"&gt;byte[] hashedDataBytes = md5hasher.ComputeHash(encoder.GetBytes(phrase));&lt;br /&gt;&lt;img src="http://files.rushfrisby.com/images/pixel.gif" style="border: 0; height: 1px; width:24px; padding: 0;"&gt;return byteArrayToString(hashedDataBytes);&lt;br /&gt;&lt;img src="http://files.rushfrisby.com/images/pixel.gif" style="border: 0; height: 1px; width:12px; padding: 0;"&gt;}&lt;br /&gt;&lt;img src="http://files.rushfrisby.com/images/pixel.gif" style="border: 0; height: 1px; width:12px; padding: 0;"&gt;public string sha1encrypt(string phrase) {&lt;br /&gt;&lt;img src="http://files.rushfrisby.com/images/pixel.gif" style="border: 0; height: 1px; width:24px; padding: 0;"&gt;UTF8Encoding encoder = new UTF8Encoding();&lt;br /&gt;&lt;img src="http://files.rushfrisby.com/images/pixel.gif" style="border: 0; height: 1px; width:24px; padding: 0;"&gt;SHA1CryptoServiceProvider sha1hasher = new SHA1CryptoServiceProvider();&lt;br /&gt;&lt;img src="http://files.rushfrisby.com/images/pixel.gif" style="border: 0; height: 1px; width:24px; padding: 0;"&gt;byte[] hashedDataBytes = sha1hasher.ComputeHash(encoder.GetBytes(phrase));&lt;br /&gt;&lt;img src="http://files.rushfrisby.com/images/pixel.gif" style="border: 0; height: 1px; width:24px; padding: 0;"&gt;return byteArrayToString(hashedDataBytes);&lt;br /&gt;&lt;img src="http://files.rushfrisby.com/images/pixel.gif" style="border: 0; height: 1px; width:12px; padding: 0;"&gt;}&lt;br /&gt;&lt;img src="http://files.rushfrisby.com/images/pixel.gif" style="border: 0; height: 1px; width:12px; padding: 0;"&gt;public string byteArrayToString(byte[] inputArray) {&lt;br /&gt;&lt;img src="http://files.rushfrisby.com/images/pixel.gif" style="border: 0; height: 1px; width:24px; padding: 0;"&gt;StringBuilder output = new StringBuilder("");&lt;br /&gt;&lt;img src="http://files.rushfrisby.com/images/pixel.gif" style="border: 0; height: 1px; width:24px; padding: 0;"&gt;for(int i = 0; i &lt; inputArray.Length; i++) {&lt;br /&gt;&lt;img src="http://files.rushfrisby.com/images/pixel.gif" style="border: 0; height: 1px; width:36px; padding: 0;"&gt;output.Append(inputArray[i].ToString("X2"));&lt;br /&gt;&lt;img src="http://files.rushfrisby.com/images/pixel.gif" style="border: 0; height: 1px; width:24px; padding: 0;"&gt;}&lt;br /&gt;&lt;img src="http://files.rushfrisby.com/images/pixel.gif" style="border: 0; height: 1px; width:24px; padding: 0;"&gt;return output.ToString();&lt;br /&gt;&lt;img src="http://files.rushfrisby.com/images/pixel.gif" style="border: 0; height: 1px; width:12px; padding: 0;"&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;Just a reminder that if you store data that is encrypted, generally you won't be able to decrypt it unless you are a serious hacker or something. I would use this for storing passwords, discount codes, or anything similar.&lt;br/&gt;&lt;br/&gt;Here is &lt;a href="http://files.rushfrisby.com/dotnetrush/examples/encryption/"&gt;my example&lt;/a&gt;. You can &lt;a href="http://files.rushfrisby.com/dotnetrush/code/encryption.zip"&gt;download the code for this here&lt;/a&gt;. I am curious to try SHA512 so you might see a future post with that. Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-2858594537540631187?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://dotnetrush.blogspot.com/2007/04/c-sha-2-cryptography-sha-256-sha-384.html' title='MD5 &amp; SHA1 Encryption'/><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/2858594537540631187/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=2858594537540631187' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/2858594537540631187'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/2858594537540631187'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2006/08/encrypting-text_20.html' title='MD5 &amp; SHA1 Encryption'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-9222437741743786797</id><published>2006-08-18T23:00:00.000-04:00</published><updated>2006-08-18T23:33:52.902-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='api'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='yahoo'/><title type='text'>Yahoo API is awesome</title><content type='html'>I downloaded the Yahoo API tonight. I have only used the search service which I must say is pretty nice. It took about 5 minutes to get a developer id, download the api, setup a website, and put the code to use. &lt;a href="http://yahoo.rushfrisby.com/"&gt;Check out my example&lt;/a&gt;. It is very simple and I think I will leave it that way for now. I am excited by how easy it is to use. Now I will show you show you how I created my example. Here are the steps:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Grab an application id from &lt;a href="http://api.search.yahoo.com/webservices/register_application"&gt;here&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://developer.yahoo.com/download/"&gt;Download the API&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Extract the archive and look for the folder: yws-2.01\Csharp\yahooSearch\Yahoo.API\&lt;/li&gt;&lt;li&gt;Open Visual Studio and create a new website&lt;/li&gt;&lt;li&gt;In the project explorer add the asp.net folder App_Code&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Copy all of the .cs files from the Yahoo.API folder to your App_Code folder, except AssemblyInfo.cs&lt;/li&gt;&lt;li&gt;Add a new web form to your project&lt;/li&gt;&lt;li&gt;Add a textbox and a button to your web form. Put a div tag below these with the property runat="server"&lt;/li&gt;&lt;li&gt;In your code behind file include Yahoo.API&lt;/li&gt;&lt;li&gt;Create a click event for your button and put in some search code.&lt;/li&gt;&lt;/ol&gt;Thats all of the steps. The C# sample included in the api is a windows app so what we did was copy what we needed to use it for a website. I copied the source files in case I wanted to modify the api. Now for the search button code I pretty much copied the code from the example search button but modified my application id and output html to my div tag. This is my code: &lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;YahooSearchService yahoo = new YahooSearchService();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        Yahoo.API.WebSearchResponse.ResultSet resultSet = yahoo.WebSearch("YOUR_APPLICATION_ID", txtQuery.Text.Trim(), "all", 10, 1, "any", true, true, "en");&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        StringBuilder sb = new StringBuilder("");&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        foreach (Yahoo.API.WebSearchResponse.ResultType result in resultSet.Result) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            sb.Append("&amp;lt;a href=\"" + result.Url + "\"&amp;gt;" + result.Title + "&amp;lt;/a&amp;gt;&amp;lt;br/&amp;gt;" + result.Summary + "&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        results.InnerHtml = sb.ToString();&lt;/span&gt;&lt;/blockquote&gt;Also I forgot to mention that I included System.Text so I could use the StringBuilder class. I hope you have as much fun with this as I will and that you are headed in the right direction now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-9222437741743786797?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://yahoo.rushfrisby.com' title='Yahoo API is awesome'/><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/9222437741743786797/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=9222437741743786797' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/9222437741743786797'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/9222437741743786797'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2006/08/yahoo-api-is-awesome.html' title='Yahoo API is awesome'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-8709944352858317652</id><published>2006-08-17T15:23:00.000-04:00</published><updated>2006-08-17T16:20:36.857-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='url rewrite'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net 2.0'/><title type='text'>URL Rewriting using UrlRewritingNet.UrlRewrite</title><content type='html'>To rewrite URL's I am actually going to use a component from &lt;a href="http://www.urlrewriting.net/"&gt;urlrewriting.net&lt;/a&gt;. You will need to &lt;a href="http://www.urlrewriting.net/Download/UrlRewritingNet_20_SampleWeb.zip"&gt;download a sample project&lt;/a&gt; from their site in order to follow along. I will run through what you will need to copy from that project to use in your own projects. I'll also show you how I am using it in my projects.&lt;br /&gt;&lt;br /&gt;In order to use url rewriting in your project copy UrlRewritingNet.UrlRewriter.dll from the sample's bin folder to your bin folder. Also copy the "xsd" folder to your project. If your project was created from the Atlas template or if you have modified your web.config file then you will have to copy some code out of the sample web.config file. Otherwise you will be okay to copying the sample web.config file to your project.&lt;br /&gt;&lt;br /&gt;If you are modifying your web.config file:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Find the &lt;span style="font-family:courier new;"&gt;configSections&lt;/span&gt; section. Copy the "section" tag from the sample to your configSections. If you don't have one just copy the entire configSections tag.&lt;/li&gt;&lt;li&gt;Under the system.web section find httpModules and copy the "add" tag from the sample to your httpModules section. If you do not have these sections you can copy them from the sample.&lt;/li&gt;&lt;li&gt;Copy the entire "urlrewritingnet" section from the sample to your web.config file. Delete everything that is within the "rewrites" section.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Now we will need to add our own custom rewrite tags. A big advantage of this component is that you can use regular expressions in your urls. This is what my rewrite tag looks like:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;blockquote&gt;&amp;lt;add virtualUrl="^~/(.*)/(.*).aspx" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="~/Default.aspx?PageID=$1&amp;Title=$2" ignoreCase="true"/&amp;gt;&lt;/blockquote&gt;&lt;/span&gt;The first wildcard I use as the Page ID. In my Default.aspx page I can then query my database and return some content based on whatever page I am on. The second wildcard can be whatever I want - I strictly use it for SEO purposes. Of couse you will have to add some error checking because your first wildcard might not be a Page ID, but you get the idea.&lt;br /&gt;&lt;br /&gt;This component is free, easy to use, and I highly recommend it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-8709944352858317652?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.urlrewriting.net' title='URL Rewriting using UrlRewritingNet.UrlRewrite'/><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/8709944352858317652/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=8709944352858317652' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/8709944352858317652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/8709944352858317652'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2006/08/url-rewriting-using-urlrewritingneturlr.html' title='URL Rewriting using UrlRewritingNet.UrlRewrite'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-5730157427114360334</id><published>2006-08-17T13:14:00.000-04:00</published><updated>2006-08-17T13:15:57.177-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='API'/><title type='text'>Yahoo! Answers API</title><content type='html'>&lt;a href="http://developer.yahoo.com/answers/"&gt;Yahoo delivers another API&lt;/a&gt;. This one looks VERY useful. I will check it out and make a future post on how to implement this.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-5730157427114360334?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.techcrunch.com/2006/08/15/yahoo-answers-launches-api/trackback/' title='Yahoo! Answers API'/><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/5730157427114360334/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=5730157427114360334' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/5730157427114360334'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/5730157427114360334'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2006/08/yahoo-answers-api.html' title='Yahoo! Answers API'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-6537194890767841635</id><published>2006-08-17T13:11:00.000-04:00</published><updated>2006-08-17T13:13:57.278-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='API'/><title type='text'>Facebook API</title><content type='html'>&lt;a href="http://developers.facebook.com/"&gt;Facebook released an API&lt;/a&gt; on Monday. Looks like I could find some ways to use this.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-6537194890767841635?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.techcrunch.com/2006/08/15/facebook-requests-developer-friends-with-new-api/trackback/' title='Facebook API'/><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/6537194890767841635/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=6537194890767841635' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/6537194890767841635'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/6537194890767841635'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2006/08/facebook-api.html' title='Facebook API'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-2494621420123630811</id><published>2006-08-17T00:21:00.000-04:00</published><updated>2006-08-17T01:17:18.504-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='atlas'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><title type='text'>Creating Atlas Update Panels</title><content type='html'>I am in the middle of a project and am using Atlas UpdatePanels which I thought would make for a good post. Atlas is the codename for Microsoft's &lt;a href="http://en.wikipedia.org/wiki/Ajax_%28programming%29"&gt;AJAX&lt;/a&gt; framework.&lt;br /&gt;&lt;br /&gt;First off go to the &lt;a href="http://atlas.asp.net/"&gt;official Atlas website&lt;/a&gt;: download the framework and install it. Open visual studio and in your list of project templates you will see "Atlas Web Site".&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger2/4207/80733825952050/1600/create_atlas_web_site.gif"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger2/4207/80733825952050/400/create_atlas_web_site.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Provide a path for the project and click OK. Once created go the the project explorer and delete the readme.txt and eula.rtf files. If you look at the web.config file you will notice that there is a lot of new things added. Also you will find Microsoft.Web.Atlas.dll in your bin folder.&lt;br /&gt;&lt;br /&gt;Now open the Default.aspx file in source mode. You can delete the &lt;span style="font-family:courier new;"&gt;script&lt;/span&gt; block at the bottom. Find the atlas:ScriptManager control and set EnablePartialRendering to true like this:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;blockquote&gt;&amp;lt;atlas:scriptmanager id="ScriptManager1" runat="server" enablepartialrendering="true"/&amp;gt;&lt;/blockquote&gt;&lt;/span&gt;This will let us update content panels without posting back. In your page add a Button control with an OnClick event which we will be using later. Just below the button add an Atlas UpdatePanel. If you type "&amp;lt;atlas:" you will see all of the available Atlas controls. Your UpdatePanel should look something like this:&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;atlas:updatepanel id="UpdatePanel1" runat="server"&amp;gt;&lt;br /&gt;&amp;lt;/atlas:UpdatePanel&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;Within your update panel type an open carrot ("&amp;lt;") and you will see the intellisense come up with two tags: "ContentTemplate" and "Triggers". Everything placed within the ContentTemplate we will be able to update. This is where we will put all of our asp controls. The Triggers tag is where we will catch events which will cause our UpdatePanel to be updated. I like to add my triggers first so it is easy to locate.&lt;br /&gt;&lt;br /&gt;Within the Triggers tag type an open carrot again. You will see two tags come up. We will be using atlas:ControlEventTrigger. This control has two properties: ControlID and EventName. Set the ControlID to the ID of the Button control we created earlier. Set the EventName to "Click".&lt;br /&gt;&lt;br /&gt;After the Triggers tag add the ContentTemplate tag and put a Label control within it. So far your code should look something like this:&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;atlas:scriptmanager id="ScriptManager1" runat="server" enablepartialrendering="true"/&amp;gt;&lt;br /&gt;&amp;lt;asp:button id="Button1" runat="server" text="Show me the money!" onclick="Button1_Click"&amp;gt;&lt;br /&gt;&amp;lt;atlas:updatepanel id="UpdatePanel1" runat="server"&amp;gt;&lt;br /&gt; &amp;lt;triggers&amp;gt;&lt;br /&gt;  &amp;lt;atlas:controleventtrigger controlid="Button1" eventname="OnClick"&amp;gt;&lt;br /&gt; &amp;lt;/triggers&amp;gt;&lt;br /&gt; &amp;lt;contenttemplate&amp;gt;&lt;br /&gt;  &amp;lt;asp:label id="Label1" runat="server" text=""&amp;gt;&amp;lt;/asp:Label&amp;gt;&lt;br /&gt; &amp;lt;/contenttemplate&amp;gt;&lt;br /&gt;&amp;lt;/atlas:UpdatePanel&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;Now we are ready to add some functionality. In our Button OnClick event add something like this: (I used a C# code behind file)&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;blockquote&gt;Label1.Text = String.Format("{0:c}", DateTime.Now.Ticks);&lt;/blockquote&gt;&lt;/span&gt;Save everything and view your page in a browser. When you click the button it will update the label without posting back. Thats it! Play around with it and be creative. You will find other uses for your update panels.&lt;br /&gt;&lt;br /&gt;The source code for this example can be downloaded &lt;a href="http://files.rushfrisby.com/dotnetrush/code/AtlasUpdatePanel.zip"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;a href="http://atlas.asp.net/"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-2494621420123630811?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/2494621420123630811/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=2494621420123630811' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/2494621420123630811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/2494621420123630811'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2006/08/creating-atlas-update-panels.html' title='Creating Atlas Update Panels'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661371502199197807.post-2752548266124459493</id><published>2006-08-15T14:24:00.000-04:00</published><updated>2006-08-15T14:35:46.462-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='asp.net 2.0'/><title type='text'>How to use web.config application settings</title><content type='html'>In your web.config file you can define a number of key/value settings and then access them from your web page. In your web.config file find appSettings and add the following key/value like this:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;appsettings&amp;gt;&lt;br /&gt;&amp;lt;add key="FullName" value="Rush Frisby"/&amp;gt;&lt;br /&gt;&amp;lt;/appsettings&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;In your aspx file create a label control called lblFullName. In your code behind file you can then say:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;lblFullName.Text = ConfigurationSettings.AppSettings["FullName"];&lt;/span&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661371502199197807-2752548266124459493?l=dotnetrush.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetrush.blogspot.com/feeds/2752548266124459493/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=661371502199197807&amp;postID=2752548266124459493' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/2752548266124459493'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661371502199197807/posts/default/2752548266124459493'/><link rel='alternate' type='text/html' href='http://dotnetrush.blogspot.com/2006/08/how-to-use-webconfig-application.html' title='How to use web.config application settings'/><author><name>Rush Frisby</name><uri>http://www.blogger.com/profile/00908078994262746825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://files.rushfrisby.com/images/rush_pic.jpg'/></author><thr:total>1</thr:total></entry></feed>
