<?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-6130375726605677119</id><updated>2011-08-21T15:04:59.685-10:00</updated><category term='Port Forwardiing'/><category term='LINQ'/><category term='JQuery'/><category term='nHibernate'/><category term='RenderPartial'/><category term='developers'/><category term='Designers'/><category term='MySQL'/><category term='Subversion'/><category term='Custom Configuration'/><category term='SQL Server'/><category term='Completely Absurd'/><category term='asp.net'/><category term='Grails'/><category term='web development'/><category term='VB.Net'/><category term='VisualSVN Server'/><category term='SVN'/><category term='NetBeans'/><category term='IIS'/><category term='asp.net mvc'/><category term='Silverlight'/><category term='bees'/><category term='Templates'/><title type='text'>Blog au Vin</title><subtitle type='html'>No wining allowed</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://vinbrown.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://vinbrown.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Vincent Brown Jr</name><uri>http://www.blogger.com/profile/05494473432492624534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>28</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6130375726605677119.post-9035251205338968839</id><published>2011-01-31T10:55:00.003-10:00</published><updated>2011-01-31T11:00:15.555-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JQuery'/><title type='text'>jQuery 1.5 released</title><content type='html'>This seems like a huge performance winner based on the stats given by the jQuery team. You can download it here: &lt;a href="http://blog.jquery.com/2011/01/31/jquery-15-released/" target="_blank"&gt;jQuery 1.5&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As a side note, it's pretty funny to see how much faster every other browser is than Internet Explorer. &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6130375726605677119-9035251205338968839?l=vinbrown.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinbrown.blogspot.com/feeds/9035251205338968839/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinbrown.blogspot.com/2011/01/jquery-15-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/9035251205338968839'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/9035251205338968839'/><link rel='alternate' type='text/html' href='http://vinbrown.blogspot.com/2011/01/jquery-15-released.html' title='jQuery 1.5 released'/><author><name>Vincent Brown Jr</name><uri>http://www.blogger.com/profile/05494473432492624534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6130375726605677119.post-341218370712815828</id><published>2010-03-12T03:56:00.004-10:00</published><updated>2010-03-12T04:05:16.170-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><title type='text'>Sharing an Encrypted Authentication Ticket Between ASP.NET 1.1 and ASP.NET 2.0 (or higher)</title><content type='html'>Thank you to Dan Sellers's WebLog for this little tidbit regarding sharing an encrypted Authentication ticket between a .NET 1.1 application and .NET 2.0 (or higher). I am posting it here more for my benefit as it seems I've been doing this a lot lately. You can read up on the details on &lt;a href="http://blogs.msdn.com/dansellers/archive/2006/02/16/533249.aspx" target="_blank"&gt;his site&lt;/a&gt;, but the important bit is that the first machine key section goes in the .net 1.1 app and the second one goes in the .net 2.0 or higher app. Poof. Magic. Like anything else, really simple if you know how to do it. Hope this helps.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Snippet of the machine config for an ASP.NET 1.1 Application:&lt;/b&gt;&lt;br/&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;machineKey&lt;br /&gt;validationKey='5C9D7A8F3E336275166075E596F19EB9B478F771C7FE45B65BF6E9B41BA9575F04672CCC4242B2245200CD0E63A8991CA6BFB2D77FE9C5B0D69889359574C5F3'&lt;br /&gt;decryptionKey='AF96F355CEC57EFD2F996515BF465DD399FAF7B806B2CD55' validation='SHA1'/&amp;gt;&lt;br /&gt; &lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Snippet of Web Config for an ASP.NET 2.0 Application with decryption attribute specified:&lt;/b&gt;&lt;br/&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;system.web&amp;gt;&lt;br /&gt;&amp;lt;machineKey&lt;br /&gt;validationKey='5C9D7A8F3E336275166075E596F19EB9B478F771C7FE45B65BF6E9B41BA9575F04672CCC4242B2245200CD0E63A8991CA6BFB2D77FE9C5B0D69889359574C5F3'&lt;br /&gt;decryptionKey='AF96F355CEC57EFD2F996515BF465DD399FAF7B806B2CD55'&lt;br /&gt;validation='SHA1' decryption='3DES' /&amp;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/6130375726605677119-341218370712815828?l=vinbrown.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinbrown.blogspot.com/feeds/341218370712815828/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinbrown.blogspot.com/2010/03/sharing-encrypted-authentication-ticket.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/341218370712815828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/341218370712815828'/><link rel='alternate' type='text/html' href='http://vinbrown.blogspot.com/2010/03/sharing-encrypted-authentication-ticket.html' title='Sharing an Encrypted Authentication Ticket Between ASP.NET 1.1 and ASP.NET 2.0 (or higher)'/><author><name>Vincent Brown Jr</name><uri>http://www.blogger.com/profile/05494473432492624534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6130375726605677119.post-9197240961223488027</id><published>2009-12-30T12:27:00.004-10:00</published><updated>2009-12-30T12:31:25.310-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Templates'/><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='developers'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='Designers'/><title type='text'>Silverlight Templates: Hot Sheet</title><content type='html'>Just added the 'Hot Sheet' for silverlight developers at &lt;a _target="blank" href="http://www.silverlighttemplates.com"&gt;SilverlightTemplates.com.&lt;/a&gt; So now, Registered designers can have their contact info listed on our hot sheet. All you need to do is register and upload at least one template. Check it out at &lt;a href="http://www.silverlighttemplates.com/Home/Developers"&gt;http://www.silverlighttemplates.com/Home/Developers&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6130375726605677119-9197240961223488027?l=vinbrown.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinbrown.blogspot.com/feeds/9197240961223488027/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinbrown.blogspot.com/2009/12/silverlight-templates-hot-sheet.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/9197240961223488027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/9197240961223488027'/><link rel='alternate' type='text/html' href='http://vinbrown.blogspot.com/2009/12/silverlight-templates-hot-sheet.html' title='Silverlight Templates: Hot Sheet'/><author><name>Vincent Brown Jr</name><uri>http://www.blogger.com/profile/05494473432492624534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6130375726605677119.post-1973843314397935584</id><published>2009-12-16T05:23:00.004-10:00</published><updated>2009-12-16T05:31:40.504-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Templates'/><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='Designers'/><title type='text'>Getting Started With SilverlightTemplates</title><content type='html'>&lt;span class="Apple-style-span"   style="  ;font-family:Arial, Helvetica, sans-serif;font-size:13px;"&gt;Check out SilverlightTemplates.com and its Getting Started Guide for Silverlight designers. If you follow this link: &lt;a href="http://www.silverlighttemplates.com/Home/GettingStarted" target="_blank" style="color: rgb(73, 118, 153); text-decoration: none; "&gt;Getting Started&lt;/a&gt; it should give you all the information you need to start using the site. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The intent with SilverlightTemplates.com is to give Silverlight designers/developers a community portal to get their work out in front of as large an audience as possible. To that end, we are working hard with bloggers, user groups and other commercial sites to spread the word. If you belong to a Silverlight-oriented group, please spread the word. They will gladly do a "link exchange" (you know, you link to us and we'll link to you) as this is a great way to build a strong community. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Contact them at Info@SilverlightTemplates.com&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6130375726605677119-1973843314397935584?l=vinbrown.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinbrown.blogspot.com/feeds/1973843314397935584/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinbrown.blogspot.com/2009/12/getting-started-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/1973843314397935584'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/1973843314397935584'/><link rel='alternate' type='text/html' href='http://vinbrown.blogspot.com/2009/12/getting-started-with.html' title='Getting Started With SilverlightTemplates'/><author><name>Vincent Brown Jr</name><uri>http://www.blogger.com/profile/05494473432492624534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6130375726605677119.post-7019513676578500434</id><published>2009-11-05T04:15:00.003-10:00</published><updated>2009-11-05T05:01:53.119-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net mvc'/><title type='text'>Load a Xap file from Binary</title><content type='html'>Recently I was faced with a situation where I needed to load a .xap file from a database and preview the file using Silverlight. Typically, to display a Silverlight app hosted in a web site, one would use the &lt;div&gt;&lt;object&gt; tag. A detailed description of how to use this with all the available parameters can be found &lt;a href="http://weblogs.asp.net/lduveau/archive/2009/07/22/silverlight-3-object-tag-param-list-aka-where-is-my-asp-silverlight-control.aspx"&gt;here&lt;/a&gt;. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The .xap file, which is really just a compressed package of all the necessary bits needed to run a Silverlight application, typically is stored in the file system and is referenced using the src attribute of the &lt;object&gt; tag. So right there is the problem. Our .xap files are not stored in the file system, but rather in binary fields in our SQL Server 2008 database. The src property is a string indicating the path and file name of the .xap package. Argh.&lt;/object&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To deal with this, what was needed is a way to reference the .xap file (stored in the database) with a relative url. A Silverlight application has a mime type of application/x-silverlight. This is important to note because of an interesting way one can use an .aspx page to render binary content. Prior to this, I had used an .aspx page to render jpeg images from a binary stream. Basically, this is done by clearing the response content completely in the code-behind of the page and writing the bits to the response content stream. Set the content-type and your good to go. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Well, as it turns out, this technique not only works for images, but *any* binary format that has an associated mime type.  A comprehensive list of mime types can be found &lt;a href="http://www.webmaster-toolkit.com/mime-types.shtml"&gt;here&lt;/a&gt;. In the case of images, to set the image source to a binary file stored in a database all you do is create a page as I described and then set the src property to the url of that page. So let's say you want to retrieve an image from your database and render it using an img tag and the url of your page is ../mySite/ImageLoader.aspx. You could call the page passing it the id of the record you want to load and render the image like so:  &lt;/div&gt;&lt;div&gt;&lt;pre&gt;&amp;lt;img src="..mySite/ImageLoader.aspx?imgId=42" /&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;That's it. Simple. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;See where I'm going with this? How is that different from:&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;object type="application/x-silverlight-2"&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;data="data:application/x-silverlight," width="450" height="220"&amp;gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;&amp;lt;param name="source" value="../mySite/ImageLoader.aspx?xapId=42"/&amp;gt;&lt;br /&gt;object&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Answer: It's not. Just have the page set the content type to application/x-silverlight and you are good to go.  For reference, here's the code that rewrites the output stream:&lt;br /&gt;&lt;div&gt;&lt;pre&gt;&lt;br /&gt;int bufferSize = 1024 * 100;   // load 100KB at a time&lt;br /&gt;byte[] buffer = new byte[bufferSize];&lt;br /&gt;int bytesRead = 0;&lt;br /&gt;long bytesToRead;&lt;br /&gt;MemoryStream ms = new MemoryStream(src.ToArray());&lt;br /&gt;&lt;br /&gt;// src is the binary file to read. How you load that is a story for another day&lt;br /&gt;&lt;br /&gt;bytesToRead = src.Length;&lt;br /&gt;Response.ContentType = this.GetContentType(filetype);&lt;br /&gt;try&lt;br /&gt;{&lt;br /&gt;  while (bytesToRead &gt; 0)&lt;br /&gt;  {&lt;br /&gt;      if (Response.IsClientConnected)&lt;br /&gt;      {&lt;br /&gt;          bytesRead = ms.Read(buffer, 0, bufferSize);&lt;br /&gt;          Response.OutputStream.Write(buffer, 0, bytesRead);&lt;br /&gt;          Response.Flush();&lt;br /&gt;&lt;br /&gt;          bytesToRead -= bytesRead;&lt;br /&gt;&lt;br /&gt;          // re-initialize the buffer and counter&lt;br /&gt;          bytesRead = 0;&lt;br /&gt;          Array.Clear(buffer, 0, buffer.Length);&lt;br /&gt;      }&lt;br /&gt;      else&lt;br /&gt;      {&lt;br /&gt;          // make sure to break out of the loop if the client disconnects prematurely&lt;br /&gt;          bytesToRead = -1;&lt;br /&gt;      }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;catch (Exception ex)&lt;br /&gt;{&lt;br /&gt;  string err = ex.Message;&lt;br /&gt;  Response.Write("&lt;span class="\&amp;quot;ErrorMessage\&amp;quot;"&gt;" + ERROR_READING_FILE + "&lt;/span&gt;");&lt;br /&gt;}&lt;br /&gt;finally&lt;br /&gt;{&lt;br /&gt;  if (ms != null)&lt;br /&gt;  {&lt;br /&gt;      ms.Close();&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/object&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/6130375726605677119-7019513676578500434?l=vinbrown.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinbrown.blogspot.com/feeds/7019513676578500434/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinbrown.blogspot.com/2009/11/load-xap-file-from-binary.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/7019513676578500434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/7019513676578500434'/><link rel='alternate' type='text/html' href='http://vinbrown.blogspot.com/2009/11/load-xap-file-from-binary.html' title='Load a Xap file from Binary'/><author><name>Vincent Brown Jr</name><uri>http://www.blogger.com/profile/05494473432492624534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6130375726605677119.post-5710033840207345438</id><published>2009-10-23T02:49:00.002-10:00</published><updated>2009-10-23T02:55:34.568-10:00</updated><title type='text'>Silverlight Templates</title><content type='html'>Well, it's finally here. I am proud to announce the launch of a new site: SilverlightTemplates.com. This site is a portal for designers/developers to show off their stuff and give them a place to sell their wares. It's a place for people looking for web site templates using Silverlight to hook up with talent from around the world to get some of the hottest site templates money can buy. Are there free Silverlight tempates available. Absolutely. And, you get what you pay for. With SilverlightTemplates.com, you not only get top-quality web site templates using Silverlight, but also a portal to the vast resources in the world of Silverlight and .NET development in general. Check it out and register: &lt;a href="http://SilverlightTemplates.com"&gt;SilverlightTemplates.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6130375726605677119-5710033840207345438?l=vinbrown.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinbrown.blogspot.com/feeds/5710033840207345438/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinbrown.blogspot.com/2009/10/silverlight-templates.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/5710033840207345438'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/5710033840207345438'/><link rel='alternate' type='text/html' href='http://vinbrown.blogspot.com/2009/10/silverlight-templates.html' title='Silverlight Templates'/><author><name>Vincent Brown Jr</name><uri>http://www.blogger.com/profile/05494473432492624534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6130375726605677119.post-201799342035195787</id><published>2009-09-29T04:05:00.001-10:00</published><updated>2009-09-29T04:06:44.464-10:00</updated><title type='text'>The Chronicles of George</title><content type='html'>If you have some time to fall off your chair in tears laughing, this is a must read.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://chroniclesofgeorge.nanc.com/"&gt;http://chroniclesofgeorge.nanc.com/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6130375726605677119-201799342035195787?l=vinbrown.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinbrown.blogspot.com/feeds/201799342035195787/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinbrown.blogspot.com/2009/09/chronicles-of-george.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/201799342035195787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/201799342035195787'/><link rel='alternate' type='text/html' href='http://vinbrown.blogspot.com/2009/09/chronicles-of-george.html' title='The Chronicles of George'/><author><name>Vincent Brown Jr</name><uri>http://www.blogger.com/profile/05494473432492624534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6130375726605677119.post-103442323545723831</id><published>2009-07-03T07:57:00.006-10:00</published><updated>2009-07-03T08:27:40.734-10:00</updated><title type='text'>Generate A Schema from a SQL Server Table</title><content type='html'>Xml Serialization can help if you have to save some very complex data from the web. This is the process:&lt;div&gt;&lt;ol&gt;&lt;li&gt;Post an xml document representing the business object(s) of what you want to save. This should conform to a valid schema (which I'll show you how to generate in just a second).&lt;/li&gt;&lt;li&gt;Deserialize (unmarshall) the xml document on the server.&lt;/li&gt;&lt;li&gt;Save the data to the database&lt;/li&gt;&lt;li&gt;Return something (depends on your specific requirements).&lt;/li&gt;&lt;/ol&gt;So, to start with, you'll need a valid schema for the tables(s) to which you want to save data. Here's the code (in the form of a console application) to generate those schemas (unless you have some sick affinity with writing these by hand):&lt;/div&gt;&lt;div&gt;&lt;div&gt;using System;&lt;/div&gt;&lt;div&gt;using System.Collections.Generic;&lt;/div&gt;&lt;div&gt;using System.Linq;&lt;/div&gt;&lt;div&gt;using System.Text;&lt;/div&gt;&lt;div&gt;using System.Data.SqlClient;&lt;/div&gt;&lt;div&gt;using System.Data;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;namespace GenSchema&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;class Program&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;static void Main(string[] args)&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;string constr = @"Data Source=YOURSERVER\;Initial Catalog=YOURDB;Integrated Security=True";&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;string table = "yourTable";&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;SqlConnection conn = new SqlConnection(constr);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;using (conn)&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;SqlDataAdapter sql = new SqlDataAdapter("SELECT * FROM " + table, conn);&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;sql.TableMappings.Add("Table", table);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;DataSet ds = new DataSet("NewDataset");&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;sql.FillSchema(ds, SchemaType.Mapped);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;ds.WriteXmlSchema(table + ".xsd");&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;}&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Of course, you would fill in the information for your connection string and the table with which you want to work. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next, to deserialize the data, you must pass in an xml document that conforms to the schema you just generated. That may require some testing, but once you get it right you're golden. If you haven't already, use the xsd.exe utility to generate the C# class from your schema. You'll notice that there are various xml attributes assigned to each property. These will be used in the deserialization process. If you already have the classes (if you're using LINQ to SQL, for example) then simply rename this new class to something else. It's only purpose is to hold the deserialized information temporarily anyway. Here's the code to deserialize your data:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;using System;&lt;/div&gt;&lt;div&gt;using System.Collections.Generic;&lt;/div&gt;&lt;div&gt;using System.Linq;&lt;/div&gt;&lt;div&gt;using System.Text;&lt;/div&gt;&lt;div&gt;using System.Data.SqlClient;&lt;/div&gt;&lt;div&gt;using System.Data;&lt;/div&gt;&lt;div&gt;using System.Xml;&lt;/div&gt;&lt;div&gt;using System.Xml.Serialization;&lt;/div&gt;&lt;div&gt;using System.Text;&lt;/div&gt;&lt;div&gt;namespace GenSchema&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;class Program&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;static void DeSerialize(string xDoc)&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;XmlSerializer ser = new XmlSerializer(typeof(MyObject));&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;XmlTextReader reader = new XmlTextReader(xDoc);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;MyObject obj = (MyObject)ser.Deserialize(reader);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;reader.Close();&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;// Save using whatever method you choose.&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Certainly, your situation will require some modifications to the above code, but this should at least get you started in the right direction. Hope it helps.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6130375726605677119-103442323545723831?l=vinbrown.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinbrown.blogspot.com/feeds/103442323545723831/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinbrown.blogspot.com/2009/07/generate-schema-from-sql-server-table.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/103442323545723831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/103442323545723831'/><link rel='alternate' type='text/html' href='http://vinbrown.blogspot.com/2009/07/generate-schema-from-sql-server-table.html' title='Generate A Schema from a SQL Server Table'/><author><name>Vincent Brown Jr</name><uri>http://www.blogger.com/profile/05494473432492624534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6130375726605677119.post-1585642763191906909</id><published>2009-05-20T07:09:00.005-10:00</published><updated>2009-05-20T16:28:05.697-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Completely Absurd'/><title type='text'>Right From the Get Go</title><content type='html'>Ever hear someone use the expression "Right from the Get Go"? What does that mean? Get Go? What am I supposed to be getting? Where have I gone? Well, after a little research, I have discovered the roots of this seemingly silly expression. &lt;br /&gt;&lt;br /&gt;Turns out that just before the Renaissance, it was customary to start off large projects with gifts exchanged between all project members. These gifts would generally be of the exotic type - silk, exotic plants, even exotic animals. One of the most coveted gifts, usually only given on the eve of the most important projects, was the gecko. Yes, the little lizard of Geico fame. Soon it became so customary to receive one of these cute reptiles that the giving of a gecko soon became associated with the start of any substantial project - temples, major works of art, opera, etc. Over the centuries, the expression "Right From the Gecko" was transformed through translation and dialect (and perhaps lack of geckos) to "Right From the Get Go". &lt;br /&gt;&lt;br /&gt;There you have it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6130375726605677119-1585642763191906909?l=vinbrown.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinbrown.blogspot.com/feeds/1585642763191906909/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinbrown.blogspot.com/2009/05/right-from-get-go.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/1585642763191906909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/1585642763191906909'/><link rel='alternate' type='text/html' href='http://vinbrown.blogspot.com/2009/05/right-from-get-go.html' title='Right From the Get Go'/><author><name>Vincent Brown Jr</name><uri>http://www.blogger.com/profile/05494473432492624534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6130375726605677119.post-592534424636065821</id><published>2009-04-30T04:45:00.002-10:00</published><updated>2009-04-30T04:55:41.342-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IIS'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>Resolving Cannot generate SSPI context.</title><content type='html'>While there are some pretty complete explanations regarding this error (see links below), if you're looking for a post that forgoes the lengthy explanations and just gets to the good bits ... &lt;br /&gt;&lt;br /&gt;You are out of luck on this one :)&lt;br /&gt;&lt;br /&gt;That being said, I know that I would have benefited from someone mentioning some of the more basic places to look. In my team's case, the SQL Server account that our web app was using had the password expire on us. When we set up the account we inadvertently neglected to check off the bit about having the password never expire. In a production environment that's probably a good thing. But this is our test server. &lt;br /&gt;&lt;br /&gt;Here are those helpful links I mentioned earlier:&lt;br /&gt;&lt;a href="http://support.microsoft.com/?id=811889"&gt;How to troubleshoot the "Cannot generate SSPI context" error message&lt;/a&gt;&lt;br /&gt;&lt;a href="http://blogs.msdn.com/sql_protocols/archive/2005/10/19/482782.aspx"&gt;Cannot generate SSPI context” error message, when connect to local SQL Server outside domain&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6130375726605677119-592534424636065821?l=vinbrown.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinbrown.blogspot.com/feeds/592534424636065821/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinbrown.blogspot.com/2009/04/resolving-cannot-generate-sspi-context.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/592534424636065821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/592534424636065821'/><link rel='alternate' type='text/html' href='http://vinbrown.blogspot.com/2009/04/resolving-cannot-generate-sspi-context.html' title='Resolving Cannot generate SSPI context.'/><author><name>Vincent Brown Jr</name><uri>http://www.blogger.com/profile/05494473432492624534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6130375726605677119.post-9187446465239881562</id><published>2009-04-24T11:30:00.007-10:00</published><updated>2009-04-24T11:41:26.106-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JQuery'/><title type='text'>Filter Lists With JQuery</title><content type='html'>Here's a little snippet that will filter a list as the user types as well as bold the search expression within the list.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$("#searchMyProjects").keyup(function() {&lt;br /&gt;    var filter = $(this).val(), count = 0;&lt;br /&gt;    $("span.projectSelectionName").each(function() {&lt;br /&gt;    if ($(this).text().search(new RegExp(filter, "i")) &lt; 0) {&lt;br /&gt;     $(this).parent().parent().hide();&lt;br /&gt;     $(this).hide();&lt;br /&gt;    } else {&lt;br /&gt;     $(this).parent().parent().show();&lt;br /&gt;     $(this).html($(this).text().replace(new RegExp(filter, "i"), &amp;quot;&amp;lt;b&amp;gt;&amp;quot; + filter + &amp;quot;&amp;lt;/b&amp;gt;&amp;quot;));&lt;br /&gt;     $(this).show();&lt;br /&gt;     count++;&lt;br /&gt;    }&lt;br /&gt;   });&lt;br /&gt;   $("#filterCount").text(count);&lt;br /&gt;});      &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The filter expression s updated with &amp;lt;b&amp;gt; tags to highlight the search expression within the text. You can use whatever styling you want, of course. &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/6130375726605677119-9187446465239881562?l=vinbrown.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinbrown.blogspot.com/feeds/9187446465239881562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinbrown.blogspot.com/2009/04/filter-lists-with-jquery.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/9187446465239881562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/9187446465239881562'/><link rel='alternate' type='text/html' href='http://vinbrown.blogspot.com/2009/04/filter-lists-with-jquery.html' title='Filter Lists With JQuery'/><author><name>Vincent Brown Jr</name><uri>http://www.blogger.com/profile/05494473432492624534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6130375726605677119.post-3456792891534909471</id><published>2009-04-20T04:51:00.005-10:00</published><updated>2009-04-20T04:59:27.826-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='VisualSVN Server'/><title type='text'>Upgrading A Subversion Repository</title><content type='html'>I recently had to move several Subversion repositories from one server to another. Normally, this isn't a big deal, but these repositories were using an old version of Subversion (1.4.something) and had to be upgraded to 1.6.1 which was an entirely different file format. I was able to find the following documentation which fortunately made the process very simple. The following is taken from &lt;a href="http://svn.collab.net/repos/svn/trunk/notes/repos_upgrade_HOWTO"&gt;the Collabnet site&lt;/a&gt;. I actually only needed steps 1 and 2. Hope this helps.&lt;br /&gt;&lt;br /&gt;HOW TO UPGRADE/DOWNGRADE YOUR REPOSITORY:&lt;br /&gt;----------------------------------------&lt;br /&gt;&lt;br /&gt;  1. Use an 'svnadmin' binary from a release with the same schema version&lt;br /&gt;     as your repository to create a dumpfile of your repository:&lt;br /&gt;&lt;br /&gt;        $ mv myrepos old-repos&lt;br /&gt;        $ svnadmin dump old-repos &gt; dumpfile&lt;br /&gt;&lt;br /&gt;  2. Use an 'svnadmin' binary from a release with the same schema version&lt;br /&gt;     as you want your repository to have to load the dumpfile into a new&lt;br /&gt;     repository:&lt;br /&gt;&lt;br /&gt;        $ svnadmin create myrepos&lt;br /&gt;        $ svnadmin load myrepos &lt; dumpfile&lt;br /&gt;&lt;br /&gt;     OR, if you're feeling saucy, you can do it all at once with a pipe:&lt;br /&gt;&lt;br /&gt;        $ svnadmin-new create myrepos&lt;br /&gt;        $ svnadmin-old dump old-repos | svnadmin-new load myrepos&lt;br /&gt;&lt;br /&gt;     (If you are running at least version 1.4 and would like to make a&lt;br /&gt;     format 3 repository, pass the --pre-1.4-compatible flag to&lt;br /&gt;     "svnadmin create".)&lt;br /&gt;&lt;br /&gt;  3. [OPTIONAL] Loading a dumpfile is both time- and disk-consuming,&lt;br /&gt;     as it replays every commit.  If your new repository is a BDB&lt;br /&gt;     respository, then after the load is complete, you may want to&lt;br /&gt;     free up some disk space by removing unused BerkeleyDB logfiles:&lt;br /&gt;&lt;br /&gt;        $ svnadmin list-unused-dblogs newrepos | xargs rm&lt;br /&gt;&lt;br /&gt;     Note: If you're using BerkeleyDB 4.2 or newer this will be done&lt;br /&gt;     automatically for you, unless you've configured the repository&lt;br /&gt;     not to behave this way.&lt;br /&gt;&lt;br /&gt;  4. Don't forget to copy over any hook scripts (and DB_CONFIG for BDB&lt;br /&gt;     repositories, if you changed it) from the old to the new&lt;br /&gt;     repository:&lt;br /&gt;&lt;br /&gt;        $ cp old-repos/hooks/* repos/hooks/&lt;br /&gt;        $ cp old-repos/db/DB_CONFIG repos/db/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6130375726605677119-3456792891534909471?l=vinbrown.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinbrown.blogspot.com/feeds/3456792891534909471/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinbrown.blogspot.com/2009/04/upgrading-subversion-repository.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/3456792891534909471'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/3456792891534909471'/><link rel='alternate' type='text/html' href='http://vinbrown.blogspot.com/2009/04/upgrading-subversion-repository.html' title='Upgrading A Subversion Repository'/><author><name>Vincent Brown Jr</name><uri>http://www.blogger.com/profile/05494473432492624534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6130375726605677119.post-4299967564454107375</id><published>2009-04-13T05:25:00.004-10:00</published><updated>2009-04-13T07:04:44.335-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SVN'/><category scheme='http://www.blogger.com/atom/ns#' term='VisualSVN Server'/><category scheme='http://www.blogger.com/atom/ns#' term='Port Forwardiing'/><title type='text'>Setting Up a Subversion Server With Port Forwarding</title><content type='html'>Requirements:&lt;a href="http://www.visualsvn.com/server/download/"&gt; VisualSVN Server&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Setting up a Subversion repository, like anything else, is really easy if you know how to do it. Fortunately, VisualSVN Server handles most of the painful stuff that used to have to be done manually. Now it's as simple as installing and setting up your router.&lt;br /&gt;&lt;br /&gt;So first, install VisualSVN Server. It comes with it's own set of instructions that are very easy to follow.&lt;br /&gt;&lt;br /&gt;Next, open up the admin console to your router and find the section that handles port forwarding. VisualSVN Server gives you the option of using either port 8080 or 8443 for a secure connection. I'd recommend going the secure route, just because. Enter the ip address of the machine on which VisualSVN Server is installed and enter 8443 as the start and end for the ip range. If needed, enter HTTPS as the service type. &lt;br /&gt;&lt;br /&gt;That's it. Done. So now you should be able to access your repository from the internet using https://[router_ip_address]:8443/svn/. So let's say your router's ip address is 79.168.199.4 and you have a repository called MyCoolStuff. The url to your repository (from outside your network) would be https://79.168.199.4:8443/svn/MyCoolStuff.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6130375726605677119-4299967564454107375?l=vinbrown.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinbrown.blogspot.com/feeds/4299967564454107375/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinbrown.blogspot.com/2009/04/setting-up-subversion-server-with-port.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/4299967564454107375'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/4299967564454107375'/><link rel='alternate' type='text/html' href='http://vinbrown.blogspot.com/2009/04/setting-up-subversion-server-with-port.html' title='Setting Up a Subversion Server With Port Forwarding'/><author><name>Vincent Brown Jr</name><uri>http://www.blogger.com/profile/05494473432492624534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6130375726605677119.post-3516531032263330864</id><published>2009-03-02T12:49:00.004-10:00</published><updated>2009-04-13T07:05:26.675-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RenderPartial'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net mvc'/><title type='text'>Using RenderPartial() to Recursively Display Data</title><content type='html'>Scenario: You have hierarchical structure with n number of levels. This data must be displayed in nested divs/tables/lists. &lt;br /&gt;&lt;br /&gt;Using the ASP.NET MVC framework (currently at RC1), this can easily be achieved using partial views. Here's the jist of it:&lt;br /&gt;&lt;br /&gt;In the .aspx view page:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;% foreach(Thing parent in ViewData.Model) { %&amp;gt;&lt;br /&gt;&lt;br /&gt;   &amp;lt;% Html.RenderPartial("ThingControl", parent); %&amp;gt;&lt;br /&gt;&amp;lt;% } %&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;And then in the partial view:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;!--  display single item here --&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;% if (parent.children.Count &amp;gt; 0){ %&amp;gt;&lt;br /&gt;&amp;lt;% Html.RenderPartial("ThingControl", parent); %&amp;gt;&lt;br /&gt;&amp;lt;% } %&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;So the exit condition for the recursion is when parent.children.Count is zero. You can include some styling to indent the nested levels if you want, or not. It's very flexible. Once again, ASP.NET MVC proves it is miles above ASP.NET 2.0.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6130375726605677119-3516531032263330864?l=vinbrown.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinbrown.blogspot.com/feeds/3516531032263330864/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinbrown.blogspot.com/2009/03/using-renderpartial-to-recursively.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/3516531032263330864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/3516531032263330864'/><link rel='alternate' type='text/html' href='http://vinbrown.blogspot.com/2009/03/using-renderpartial-to-recursively.html' title='Using RenderPartial() to Recursively Display Data'/><author><name>Vincent Brown Jr</name><uri>http://www.blogger.com/profile/05494473432492624534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6130375726605677119.post-6835877584423741899</id><published>2009-02-17T05:03:00.003-10:00</published><updated>2009-04-29T09:01:51.051-10:00</updated><title type='text'>Solving the Late Binding Dilemma With the Factory Pattern</title><content type='html'>The scenario: Create an instance of a class polymorphically by evaluating a string at runtime.&lt;br /&gt;&lt;br /&gt;This could be done by calling Type.GetType("typename"), but this will only work if the type in question is COM visible. For example, &lt;br /&gt;&lt;pre&gt;&lt;br /&gt;   Dim oExcell as Object = Type.GetType("Excel.Application") &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;is the typical way of getting a reference to an Excel object. But if you want to create an instance of a custom class, there's a lot of complexity that you will need to add to your project. Why can't it just work? (How many times have I found myself asking *that* question?) The following is a concise alternative that will solve the problem. &lt;br /&gt;&lt;br /&gt;Here, we have a number of different report classes all based on a common base class. The PrintJobReportFactory class will return the correct instance based on a string. &lt;br /&gt;&lt;br /&gt;While most of the time, using hard-coded strings to control program flow impedes scalability, as Tom Cruise said "You know, Bill, there's one thing I learned in all my years. Sometimes you just gotta say, "What the ...". &lt;br /&gt;&lt;br /&gt;Of course, he also said "Porche, there is no substitute" to which I would answer with "Mustang GT 500". &lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;Public Class PrintJobReportFactory&lt;br /&gt; Public Shared Function GetReportInstance(ByVal type As String) As PrintJobBase&lt;br /&gt;&lt;br /&gt;  Dim retVal As PrintJobBase = Nothing&lt;br /&gt;  Select Case type&lt;br /&gt;   Case "WebDenialsStud"&lt;br /&gt;    retVal = New WebDenial()&lt;br /&gt;&lt;br /&gt;   Case "WebDenialsCoBor"&lt;br /&gt;    retVal = New WebDenial()&lt;br /&gt;&lt;br /&gt;   Case "WebCertifications"&lt;br /&gt;    retVal = New WebCertification()&lt;br /&gt;&lt;br /&gt;   Case "WebApprovals"&lt;br /&gt;    retVal = New WebDisclosers()&lt;br /&gt;&lt;br /&gt;   Case Else&lt;br /&gt;    retVal = Nothing&lt;br /&gt;  End Select&lt;br /&gt;&lt;br /&gt;  Return retVal&lt;br /&gt; End Function&lt;br /&gt;End Class&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/6130375726605677119-6835877584423741899?l=vinbrown.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinbrown.blogspot.com/feeds/6835877584423741899/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinbrown.blogspot.com/2009/02/solving-late-binding-delema-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/6835877584423741899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/6835877584423741899'/><link rel='alternate' type='text/html' href='http://vinbrown.blogspot.com/2009/02/solving-late-binding-delema-with.html' title='Solving the Late Binding Dilemma With the Factory Pattern'/><author><name>Vincent Brown Jr</name><uri>http://www.blogger.com/profile/05494473432492624534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6130375726605677119.post-3757277429415997764</id><published>2009-02-16T12:01:00.004-10:00</published><updated>2009-04-13T07:06:18.349-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB.Net'/><category scheme='http://www.blogger.com/atom/ns#' term='Custom Configuration'/><title type='text'>VB.NET Using custom configuration settings</title><content type='html'>Once again I am surprised at the lack of *working* examples of vb.net code. In this particular case, that may or may not be a completely fair statement because the examples I found (and there were quite a few) could very well have worked, they were just incomplete. Here is a complete example of using an app.config file to define a collection of reports. This will create a parent object with specific configuration information in it, and a collection of child elements which also have custom properties. While no two situations are alike, this should provide you with something that you can modify to suit your own needs. As it turns out, the most complete example I did find was on the msdn site. This is the example that I followed: &lt;a href="http://msdn.microsoft.com/en-us/library/system.configuration.configurationelementcollection.aspx" target="_blank"&gt;ConfigurationElementCollection Class&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In your app.config...&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;configsections&amp;gt;&lt;br /&gt;  &amp;lt;section name="ServerReports" type="assemblyName.RSPrintSetup, assemblyName" allowdefinition="Everywhere" allowExeDefinition="MachineToApplication" restartOnExternalChanges="true" /&amp;gt;&lt;br /&gt;       &amp;lt;/configsections&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;serverreports name="PrivateLoanLetters" lockallelementsexcept="Reports" servername="http://rijb-sql2/ReportServer/?" tempfolder="C:\Plexus\Private Loans Letters\Private Loans Letters\Temp\"&amp;gt;&lt;br /&gt;  &amp;lt;reports&amp;gt;&lt;br /&gt;   &amp;lt;clear&amp;gt;&lt;br /&gt;   &amp;lt;add name="WebApprovals" reporttype=".pdf" runtime="4:00:00" /&amp;gt;&lt;br /&gt;   &amp;lt;add name="WebDenialsS" reporttype=".pdf" runtime="2:00:00" /&amp;gt;&lt;br /&gt;   &amp;lt;add name="WebDenialsC" reporttype=".pdf" runtime="2:00:00" /&amp;gt;&lt;br /&gt;   &amp;lt;add name="WebCertifications" reporttype=".pdf" runtime="4:00:00" /&amp;gt;&lt;br /&gt;  &amp;lt;/reports&amp;gt;&lt;br /&gt; &amp;lt;/serverreports&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;And the VB.NET Classes...&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Imports System&lt;br /&gt;Imports System.Configuration&lt;br /&gt;Imports System.Collections&lt;br /&gt;Imports System.Collections.Generic&lt;br /&gt;Imports System.Collections.Specialized&lt;br /&gt;Imports System.Reflection&lt;br /&gt;Imports System.Text&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Public Class RSReport&lt;br /&gt; Inherits ConfigurationElement&lt;br /&gt;&lt;br /&gt; ' Test flag.&lt;br /&gt; Private Shared _displayIt As Boolean = False&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; Public Sub New()&lt;br /&gt;&lt;br /&gt; End Sub 'New&lt;br /&gt;&lt;br /&gt; &lt;configurationproperty("name",&gt; _&lt;br /&gt;Public Property Name() As String&lt;br /&gt;  Get&lt;br /&gt;   Return CStr(Me("name"))&lt;br /&gt;  End Get&lt;br /&gt;  Set(ByVal value As String)&lt;br /&gt;   Me("name") = value&lt;br /&gt;  End Set&lt;br /&gt; End Property&lt;br /&gt;&lt;br /&gt; &lt;configurationproperty("runtime",&gt; _&lt;br /&gt;   Public Property RunTime() As String&lt;br /&gt;  Get&lt;br /&gt;   Return CStr(Me("RunTime"))&lt;br /&gt;  End Get&lt;br /&gt;  Set(ByVal value As String)&lt;br /&gt;   Me("RunTime") = value&lt;br /&gt;  End Set&lt;br /&gt; End Property&lt;br /&gt;&lt;br /&gt; &lt;configurationproperty("reporttype",&gt; _&lt;br /&gt;Public Property ReportType() As String&lt;br /&gt;  Get&lt;br /&gt;   Return CStr(Me("ReportType"))&lt;br /&gt;  End Get&lt;br /&gt;  Set(ByVal value As String)&lt;br /&gt;   Me("ReportType") = value&lt;br /&gt;  End Set&lt;br /&gt; End Property&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; Protected Overrides Sub DeserializeElement(ByVal reader As System.Xml.XmlReader, ByVal serializeCollectionKey As Boolean)&lt;br /&gt;  MyBase.DeserializeElement(reader, serializeCollectionKey)&lt;br /&gt;&lt;br /&gt;  ' Enter your custom processing code here.&lt;br /&gt;  If _displayIt Then&lt;br /&gt;   Console.WriteLine( _&lt;br /&gt;   "UrlConfigElement.DeserializeElement({0, {1) called", _&lt;br /&gt;   IIf(reader Is Nothing, "null", _&lt;br /&gt;   reader.ToString()), _&lt;br /&gt;   serializeCollectionKey.ToString())&lt;br /&gt;  End If&lt;br /&gt;&lt;br /&gt; End Sub 'DeserializeElement&lt;br /&gt;&lt;br /&gt; Protected Overrides Function SerializeElement(ByVal writer _&lt;br /&gt; As System.Xml.XmlWriter, _&lt;br /&gt; ByVal serializeCollectionKey As Boolean) As Boolean&lt;br /&gt;&lt;br /&gt;  Dim ret As Boolean = MyBase.SerializeElement(writer, serializeCollectionKey)&lt;br /&gt;&lt;br /&gt;  ' Enter your custom processing code here.&lt;br /&gt;  If _displayIt Then&lt;br /&gt;   Console.WriteLine( _&lt;br /&gt;   "UrlConfigElement.SerializeElement({0, {1) called = {2", _&lt;br /&gt;   IIf(writer Is Nothing, "null", _&lt;br /&gt;   writer.ToString()), _&lt;br /&gt;   serializeCollectionKey.ToString(), _&lt;br /&gt;   ret.ToString())&lt;br /&gt;  End If&lt;br /&gt;&lt;br /&gt;  Return ret&lt;br /&gt;&lt;br /&gt; End Function 'SerializeElement&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; Protected Overrides Function IsModified() As Boolean&lt;br /&gt;  Dim ret As Boolean = MyBase.IsModified()&lt;br /&gt;&lt;br /&gt;  ' Enter your custom processing code here.&lt;br /&gt;  Console.WriteLine("UrlConfigElement.IsModified() called.")&lt;br /&gt;&lt;br /&gt;  Return ret&lt;br /&gt;&lt;br /&gt; End Function 'IsModified&lt;br /&gt;&lt;br /&gt;End Class&lt;br /&gt;&lt;br /&gt;&lt;configurationcollection(gettype(rsreport))&gt; _&lt;br /&gt;Public Class ReportsCollection&lt;br /&gt; Inherits ConfigurationElementCollection&lt;br /&gt;&lt;br /&gt; Public Sub New()&lt;br /&gt;  Dim url As RSReport = CType(CreateNewElement(), RSReport)&lt;br /&gt;&lt;br /&gt;  ' Testing: Manually add the element to the collection.&lt;br /&gt;  'Add(url)&lt;br /&gt;&lt;br /&gt; End Sub 'New&lt;br /&gt;&lt;br /&gt; Public Overrides ReadOnly Property CollectionType() _&lt;br /&gt; As ConfigurationElementCollectionType&lt;br /&gt;  Get&lt;br /&gt;   Return ConfigurationElementCollectionType.AddRemoveClearMap&lt;br /&gt;  End Get&lt;br /&gt; End Property&lt;br /&gt;&lt;br /&gt; Protected Overloads Overrides Function CreateNewElement() As ConfigurationElement&lt;br /&gt;  Return New RSReport()&lt;br /&gt;&lt;br /&gt; End Function 'CreateNewElement&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; Protected Overloads Overrides Function CreateNewElement(ByVal elementName As String) As ConfigurationElement&lt;br /&gt;  Return New RSReport(elementName)&lt;br /&gt;&lt;br /&gt; End Function 'CreateNewElement&lt;br /&gt;&lt;br /&gt; Protected Overrides Function GetElementKey( _&lt;br /&gt; ByVal element As ConfigurationElement) As [Object]&lt;br /&gt;  Return CType(element, RSReport).Name&lt;br /&gt;&lt;br /&gt; End Function 'GetElementKey&lt;br /&gt;&lt;br /&gt; Public Shadows Property AddElementName() As String&lt;br /&gt;  Get&lt;br /&gt;   Return MyBase.AddElementName&lt;br /&gt;  End Get&lt;br /&gt;  Set(ByVal value As String)&lt;br /&gt;   MyBase.AddElementName = value&lt;br /&gt;  End Set&lt;br /&gt; End Property&lt;br /&gt;&lt;br /&gt; Public Shadows Property ClearElementName() As String&lt;br /&gt;  Get&lt;br /&gt;   Return MyBase.ClearElementName&lt;br /&gt;  End Get&lt;br /&gt;  Set(ByVal value As String)&lt;br /&gt;   MyBase.AddElementName = value&lt;br /&gt;  End Set&lt;br /&gt; End Property&lt;br /&gt;&lt;br /&gt; Public Shadows ReadOnly Property RemoveElementName() As String&lt;br /&gt;  Get&lt;br /&gt;   Return MyBase.RemoveElementName&lt;br /&gt;  End Get&lt;br /&gt; End Property&lt;br /&gt;&lt;br /&gt; Public Shadows ReadOnly Property Count() As Integer&lt;br /&gt;&lt;br /&gt;  Get&lt;br /&gt;   Return MyBase.Count&lt;br /&gt;  End Get&lt;br /&gt; End Property&lt;br /&gt;&lt;br /&gt; Default Public Shadows Property Item( _&lt;br /&gt; ByVal index As Integer) As RSReport&lt;br /&gt;  Get&lt;br /&gt;   Return CType(BaseGet(index), RSReport)&lt;br /&gt;  End Get&lt;br /&gt;  Set(ByVal value As RSReport)&lt;br /&gt;   If Not (BaseGet(index) Is Nothing) Then&lt;br /&gt;    BaseRemoveAt(index)&lt;br /&gt;   End If&lt;br /&gt;   BaseAdd(index, value)&lt;br /&gt;  End Set&lt;br /&gt; End Property&lt;br /&gt;&lt;br /&gt; Default Public Shadows ReadOnly Property Item( _&lt;br /&gt; ByVal Name As String) As RSReport&lt;br /&gt;  Get&lt;br /&gt;   Return CType(BaseGet(Name), RSReport)&lt;br /&gt;  End Get&lt;br /&gt; End Property&lt;br /&gt;&lt;br /&gt; Public Function IndexOf( _&lt;br /&gt; ByVal rpt As RSReport) As Integer&lt;br /&gt;  Return BaseIndexOf(rpt)&lt;br /&gt;&lt;br /&gt; End Function 'IndexOf&lt;br /&gt;&lt;br /&gt; Public Sub Add(ByVal rpt As RSReport)&lt;br /&gt;  BaseAdd(rpt)&lt;br /&gt;  ' Add custom code here.&lt;br /&gt; End Sub 'Add&lt;br /&gt;&lt;br /&gt; Protected Overrides Sub BaseAdd( _&lt;br /&gt; ByVal element As ConfigurationElement)&lt;br /&gt;  BaseAdd(element, False)&lt;br /&gt;  ' Add custom code here.&lt;br /&gt; End Sub 'BaseAdd&lt;br /&gt;&lt;br /&gt; Public Overloads Sub Remove( _&lt;br /&gt; ByVal url As RSReport)&lt;br /&gt;  If BaseIndexOf(url) &gt;= 0 Then&lt;br /&gt;   BaseRemove(url.Name)&lt;br /&gt;  End If&lt;br /&gt;&lt;br /&gt; End Sub 'Remove&lt;br /&gt;&lt;br /&gt; Public Sub RemoveAt(ByVal index As Integer)&lt;br /&gt;  BaseRemoveAt(index)&lt;br /&gt;&lt;br /&gt; End Sub 'RemoveAt&lt;br /&gt;&lt;br /&gt; Public Overloads Sub Remove(ByVal name As String)&lt;br /&gt;  BaseRemove(name)&lt;br /&gt;&lt;br /&gt; End Sub 'Remove&lt;br /&gt;&lt;br /&gt; Public Sub Clear()&lt;br /&gt;  BaseClear()&lt;br /&gt;&lt;br /&gt; End Sub 'Clear ' Add custom code here.&lt;br /&gt;End Class&lt;br /&gt;&lt;br /&gt;Public Class RSPrintSetup&lt;br /&gt; Inherits ConfigurationSection&lt;br /&gt;&lt;br /&gt; Public Sub New()&lt;br /&gt;  Me.OutputOptions = New List(Of String)&lt;br /&gt; End Sub&lt;br /&gt;&lt;br /&gt; &lt;configurationproperty("name", _=""&gt; _&lt;br /&gt;  Public Property Name() As String&lt;br /&gt;&lt;br /&gt;  Get&lt;br /&gt;   Return CStr(Me("name"))&lt;br /&gt;  End Get&lt;br /&gt;  Set(ByVal value As String)&lt;br /&gt;   Me("name") = value&lt;br /&gt;  End Set&lt;br /&gt; End Property&lt;br /&gt;&lt;br /&gt; &lt;configurationproperty("tempfolder",&gt; _&lt;br /&gt;   Public Property TempFolder() As String&lt;br /&gt;&lt;br /&gt;  Get&lt;br /&gt;   Return CStr(Me("TempFolder"))&lt;br /&gt;  End Get&lt;br /&gt;  Set(ByVal value As String)&lt;br /&gt;   Me("TempFolder") = value&lt;br /&gt;  End Set&lt;br /&gt; End Property&lt;br /&gt;&lt;br /&gt; ' Declare a collection element represented&lt;br /&gt; ' in the configuration file by the sub-section&lt;br /&gt; ' &lt;urls&gt; &lt;add&gt; &lt;/add&gt;&lt;/urls&gt;&lt;br /&gt; ' Note: the "IsDefaultCollection = false"&lt;br /&gt; ' instructs the .NET Framework to build a nested&lt;br /&gt; ' section like &lt;urls&gt; ...&lt;/urls&gt;.&lt;br /&gt; &lt;configurationproperty("reports",&gt; _&lt;br /&gt;  Public ReadOnly Property Reports() _&lt;br /&gt;  As ReportsCollection&lt;br /&gt;  Get&lt;br /&gt;   Dim urlsCollection _&lt;br /&gt;    As ReportsCollection = _&lt;br /&gt;    CType(Me("Reports"), ReportsCollection)&lt;br /&gt;   Return urlsCollection&lt;br /&gt;  End Get&lt;br /&gt; End Property&lt;br /&gt;&lt;br /&gt; Protected Overrides Sub DeserializeSection( _&lt;br /&gt;  ByVal reader As System.Xml.XmlReader)&lt;br /&gt;&lt;br /&gt;  MyBase.DeserializeSection(reader)&lt;br /&gt;  ' Enter custom processing code here.&lt;br /&gt; End Sub 'DeserializeSection&lt;br /&gt;&lt;br /&gt; Protected Overrides Function SerializeSection( _&lt;br /&gt;  ByVal parentElement As ConfigurationElement, _&lt;br /&gt;  ByVal name As String, _&lt;br /&gt;  ByVal saveMode As ConfigurationSaveMode) As String&lt;br /&gt;&lt;br /&gt;  Dim s As String = _&lt;br /&gt;   MyBase.SerializeSection(parentElement, _&lt;br /&gt;   name, saveMode)&lt;br /&gt;  ' Enter custom processing code here.&lt;br /&gt;  Return s&lt;br /&gt; End Function 'SerializeSection&lt;br /&gt;&lt;br /&gt;End Class&lt;br /&gt;&lt;/configurationproperty("reports",&gt;&lt;/configurationproperty("tempfolder",&gt;&lt;/configurationproperty("name",&gt;&lt;/configurationcollection(gettype(rsreport))&gt;&lt;/configurationproperty("reporttype",&gt;&lt;/configurationproperty("runtime",&gt;&lt;/configurationproperty("name",&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6130375726605677119-3757277429415997764?l=vinbrown.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinbrown.blogspot.com/feeds/3757277429415997764/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinbrown.blogspot.com/2009/02/vbnet-using-custom-configuration.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/3757277429415997764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/3757277429415997764'/><link rel='alternate' type='text/html' href='http://vinbrown.blogspot.com/2009/02/vbnet-using-custom-configuration.html' title='VB.NET Using custom configuration settings'/><author><name>Vincent Brown Jr</name><uri>http://www.blogger.com/profile/05494473432492624534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6130375726605677119.post-1935086620941232471</id><published>2009-02-09T10:07:00.005-10:00</published><updated>2009-02-09T10:56:18.672-10:00</updated><title type='text'>Saving PDF reports from SQL Server Reporting Services using VB.NET</title><content type='html'>While there are plenty of C# examples, there are surprisingly few *working* examples of vb.net code to print reports from Reporting Services via code. Hopefully this will help to fill that void. This sample uses SSRS 2005 and VB.NET and should prove to be a welcome change from using third-party com objects for generating pdf files.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;  Dim strCreateUrl As String = yourServer + yourReportFolder + "?" + yourReportName + "&amp;amp;rs:Command=Render&amp;amp;rs:format=PDF"&lt;br /&gt;&lt;br /&gt;  Dim webRequest As System.Net.WebRequest = System.Net.WebRequest.Create(strCreateUrl)&lt;br /&gt;  webRequest.Credentials = System.Net.CredentialCache.DefaultCredentials&lt;br /&gt;&lt;br /&gt;  ' Return the response.&lt;br /&gt;  Dim webResponse As System.Net.HttpWebResponse = CType(webRequest.GetResponse(), System.Net.HttpWebResponse)&lt;br /&gt;  Dim ReceiveStream As System.IO.Stream = webResponse.GetResponseStream()&lt;br /&gt;&lt;br /&gt;  Dim binByte As Byte()&lt;br /&gt;  Dim rdBinaryReader As BinaryReader = New BinaryReader(webResponse.GetResponseStream)&lt;br /&gt;  binByte = rdBinaryReader.ReadBytes(webResponse.ContentLength)&lt;br /&gt;  rdBinaryReader.Close()&lt;br /&gt;&lt;br /&gt;  Dim outstream As New MemoryStream()&lt;br /&gt;  outstream.Write(binByte, 0, binByte.Length)&lt;br /&gt;&lt;br /&gt;  Dim buffer(binByte.Length) As Byte&lt;br /&gt;  Using stream As FileStream = File.OpenWrite(outputName)&lt;br /&gt;&lt;br /&gt;   stream.Write(binByte, 0, binByte.Length)&lt;br /&gt;   webResponse.Close()&lt;br /&gt;&lt;br /&gt;  End Using&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/6130375726605677119-1935086620941232471?l=vinbrown.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinbrown.blogspot.com/feeds/1935086620941232471/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinbrown.blogspot.com/2009/02/saving-pdf-reports-from-sql-server.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/1935086620941232471'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/1935086620941232471'/><link rel='alternate' type='text/html' href='http://vinbrown.blogspot.com/2009/02/saving-pdf-reports-from-sql-server.html' title='Saving PDF reports from SQL Server Reporting Services using VB.NET'/><author><name>Vincent Brown Jr</name><uri>http://www.blogger.com/profile/05494473432492624534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6130375726605677119.post-8008568753424772621</id><published>2009-02-03T07:13:00.004-10:00</published><updated>2009-02-03T07:25:16.375-10:00</updated><title type='text'>MVC RC1 Released!</title><content type='html'>We're in the end game, folks! &lt;br /&gt;&lt;br /&gt;Coolest features (IMO):&lt;br /&gt;1. Add Controller Command&lt;br /&gt;2. Scaffolding&lt;br /&gt;3. Adding and Customizing Scaffold Templates&lt;br /&gt;4. Quick navigation with Go To Controller / Go To View&lt;br /&gt;5. MSBuild Task for Compiling Views - no more waiting until run time to find view errors.&lt;br /&gt;6. Cross Site Request Forgery (CSRF) Protection with Html.AntiForgeryToken()&lt;br /&gt;7. File Uploading Support&lt;br /&gt;&lt;br /&gt;Read all about it...&lt;br /&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2009/01/27/asp-net-mvc-1-0-release-candidate-now-available.aspx" target="_blank"&gt;MVC RC1 Released!&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6130375726605677119-8008568753424772621?l=vinbrown.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinbrown.blogspot.com/feeds/8008568753424772621/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinbrown.blogspot.com/2009/02/mvc-rc1-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/8008568753424772621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/8008568753424772621'/><link rel='alternate' type='text/html' href='http://vinbrown.blogspot.com/2009/02/mvc-rc1-released.html' title='MVC RC1 Released!'/><author><name>Vincent Brown Jr</name><uri>http://www.blogger.com/profile/05494473432492624534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6130375726605677119.post-3413406435308718304</id><published>2009-01-12T05:21:00.001-10:00</published><updated>2009-01-12T05:27:43.659-10:00</updated><title type='text'>Event Bubbling in JQuery</title><content type='html'>The scenario: Nested divs representing an outline structure. When the user clicks a heading, the sub-nodes should toggle.&lt;br /&gt;&lt;br /&gt;The code would look something like this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$(".OutlineHeading1 &gt; label").click(function(){&lt;br /&gt; $(this).nextAll(".OutlineHeading2").toggle('slow');               &lt;br /&gt;});&lt;br /&gt;$(".OutlineHeading2 &gt; label").click(function(){&lt;br /&gt; $(this).nextAll(".OutlineHeading3").toggle('slow');               &lt;br /&gt;});&lt;br /&gt;$(".OutlineHeading3 &gt; label").click(function(){&lt;br /&gt; $(this).nextAll(".OutlineHeading4").toggle('slow');               &lt;br /&gt;});&lt;br /&gt;$(".OutlineHeading4 &gt; label").click(function(){&lt;br /&gt; $(this).nextAll(".OutlineHeading5").toggle('slow');               &lt;br /&gt;});&lt;br /&gt;$(".OutlineHeading5 &gt; label").click(function(){&lt;br /&gt; $(this).nextAll(".OutlineHeading6").toggle('slow');               &lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The problem: In Internet Explorer, the click event gets fired multiple times in the nested divs because of event bubbling. &lt;br /&gt;&lt;br /&gt;The solution: return false. As in:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$(".OutlineHeading1 &gt; label").click(function(){&lt;br /&gt; $(this).nextAll(".OutlineHeading2").toggle('slow');               &lt;br /&gt;        return false;&lt;br /&gt;});&lt;br /&gt;$(".OutlineHeading2 &gt; label").click(function(){&lt;br /&gt; $(this).nextAll(".OutlineHeading3").toggle('slow');               &lt;br /&gt;        return false;&lt;br /&gt;});&lt;br /&gt;$(".OutlineHeading3 &gt; label").click(function(){&lt;br /&gt; $(this).nextAll(".OutlineHeading4").toggle('slow');               &lt;br /&gt;        return false;&lt;br /&gt;});&lt;br /&gt;$(".OutlineHeading4 &gt; label").click(function(){&lt;br /&gt; $(this).nextAll(".OutlineHeading5").toggle('slow');               &lt;br /&gt;        return false;&lt;br /&gt;});&lt;br /&gt;$(".OutlineHeading5 &gt; label").click(function(){&lt;br /&gt; $(this).nextAll(".OutlineHeading6").toggle('slow');    &lt;br /&gt;        return false;           &lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Simple as that.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6130375726605677119-3413406435308718304?l=vinbrown.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinbrown.blogspot.com/feeds/3413406435308718304/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinbrown.blogspot.com/2009/01/event-bubbling-in-jquery.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/3413406435308718304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/3413406435308718304'/><link rel='alternate' type='text/html' href='http://vinbrown.blogspot.com/2009/01/event-bubbling-in-jquery.html' title='Event Bubbling in JQuery'/><author><name>Vincent Brown Jr</name><uri>http://www.blogger.com/profile/05494473432492624534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6130375726605677119.post-6194476350195450753</id><published>2008-12-04T05:27:00.000-10:00</published><updated>2008-12-04T06:41:06.039-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nHibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net mvc'/><category scheme='http://www.blogger.com/atom/ns#' term='LINQ'/><title type='text'>Single Table Inheritance With LINQ</title><content type='html'>For a while now I've been using LINQ in my ASP.NET applications and it has been a huge time saver. Having used nHibernate prior to this, the prospect of not having to deal with config files was a double bonus. One thing I do miss from nHibernate, however is the ability to add a simple Where clause in the class definition. For example, I regularly use a deleted flag in tables so as to avoid doing 'hard' deletes. In the nHibernate world, in order to exclude deleted records the config file would use something like this:&lt;br /&gt;&lt;pre&gt;&amp;lt;class name="Core.ELSField, Core" table="dbo.tblFields" Where="fDeleted=0"&amp;gt;&lt;/pre&gt;&lt;br /&gt;I've yet to find anything in the LINQ world that equates to this so I'm left including 'where !deleted' in all my queries. Oh well.&lt;br /&gt;&lt;br /&gt;Inheritance in nHibernate is handled through discriminator columns and looks like this:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;class name="IPayment" table="PAYMENT"&amp;gt;&lt;br /&gt;   &amp;lt;id name="Id" type="Int64" column="PAYMENT_ID"&amp;gt;&lt;br /&gt;       &amp;lt;generator class="native"/&amp;gt;&lt;br /&gt;   &amp;lt;/id&amp;gt;&lt;br /&gt;   &amp;lt;discriminator column="PAYMENT_TYPE" type="String"/&amp;gt;&lt;br /&gt;   &amp;lt;property name="Amount" column="AMOUNT"/&amp;gt;&lt;br /&gt;   ...&lt;br /&gt;   &amp;lt;subclass name="CreditCardPayment" discriminator-value="CREDIT"&amp;gt;&lt;br /&gt;       ...&lt;br /&gt;   &amp;lt;/subclass&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/class&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;For the longest time, I was coding the equivalent LINQ version by hand. Little did I know that the O/R designer in Visual Studio handles this. MSDN provides a very nice &lt;a target=_blank href="http://msdn.microsoft.com/en-us/library/bb384467.aspx"&gt;example&lt;/a&gt; which you should be able to apply to your own situation. Hopefully you will find it as useful as I did.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6130375726605677119-6194476350195450753?l=vinbrown.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinbrown.blogspot.com/feeds/6194476350195450753/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinbrown.blogspot.com/2008/12/single-table-inheritance-with-linq.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/6194476350195450753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/6194476350195450753'/><link rel='alternate' type='text/html' href='http://vinbrown.blogspot.com/2008/12/single-table-inheritance-with-linq.html' title='Single Table Inheritance With LINQ'/><author><name>Vincent Brown Jr</name><uri>http://www.blogger.com/profile/05494473432492624534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6130375726605677119.post-6724345041493410561</id><published>2008-11-17T11:11:00.000-10:00</published><updated>2008-11-18T04:33:26.464-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><category scheme='http://www.blogger.com/atom/ns#' term='Grails'/><title type='text'>Using Grails to Store Generic Data Sets</title><content type='html'>TASK: Build a generic data structure to represent grid data, then use the Grails framework to implement it. &lt;br /&gt;&lt;br /&gt;At a high level, what is needed is a set of tables that can hold sets of varying numbered rows and columns. This means we have collections of grids representing the individual data sets. Each grid has a collection of rows (we’ll call them results for this discussion) and data columns.  Each result has a collection of data points. And finally, each datapoint is associated with a data column.&lt;br /&gt;&lt;br /&gt;I’ve been using Grails now for about a month and I’ve found the documentation to be lacking in comparison with other frameworks that I’ve used. So hopefully this example of representing result sets will be usefull to others who, like myself, learn best from checking out example code and applying it to the task at hand. For the purposes of this example, I am using Grails 1.0.3, MySQL 5.0, NetBeans 6.5, and Navicat 8 Lite for MySQL (very helpful for setting up MySQL for those who aren't keen on command-line stuff). I won't get into the whole setup of the Grails plugin for NetBeans and I'll assume that you already have your MySQL database created. The tables will be automagically generated by Grails so all you need is an empty database.&lt;br /&gt;&lt;br /&gt;First, the domain classes:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;DataSet:&lt;br /&gt;class DataRow {&lt;br /&gt;    int Id&lt;br /&gt;    int DataSetId&lt;br /&gt;    static hasMany = [results:DataPoint]&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;DataPoint:&lt;br /&gt;class DataPoint {&lt;br /&gt;  int Id&lt;br /&gt;  DataPointColumn Column&lt;br /&gt;  String Val&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;DataPointColumn &lt;br /&gt;class DataPointColumn {&lt;br /&gt;  int Id&lt;br /&gt;  String ColumnName&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;And now the code to save your data. For this example, you will have some java structure that stores results rows and columns. I won't muddy the waters here with my implementation of that since this is supposed to be about Grails. Suffice it to say that you will need to have some mechanism of retrieving a collection of column names, and each data item should be associated with a column.&lt;br /&gt;&lt;pre&gt;          &lt;br /&gt;IResults res = &amp;lt;execute some query&amp;gt;&lt;br /&gt;String[] column_names = res.getColumnNames() &lt;br /&gt;&lt;br /&gt;for (Result r : res.getResults())&lt;br /&gt;{&lt;br /&gt;    def savedResults = new DataRow()&lt;br /&gt;    savedResults.DataSetId = res.getId()&lt;br /&gt;&lt;br /&gt;    for (int i=0; i&lt; column_names.length; i++)&lt;br /&gt;    {&lt;br /&gt;        def col = DataPointColumn.find("from DataPointColumn as dp where dp.columnName=?",[column_names[i]])                                            &lt;br /&gt;        if (col==null){&lt;br /&gt;        col = new DataPointColumn()&lt;br /&gt;        col.ColumnName = column_names[i]&lt;br /&gt;        col.save()&lt;br /&gt;    }&lt;br /&gt;    String val = r.getDatapointValue(column_names[i]);&lt;br /&gt;&lt;br /&gt;    def dp = new DataPoint()&lt;br /&gt;    dp.Val = val&lt;br /&gt;    dp.Column = col&lt;br /&gt;&lt;br /&gt;    savedResults.addToResults(dp)&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;savedResults.save() // Save the row &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This is actually a slight modification to the actual code that I implemented so that my business-specific names and code are left out. The most interesting piece of the code (IMHO) is the addTo* function. There's actually a nice explanation of how that works on the Grails site (&lt;a href="http://docs.huihoo.com/grails/1.0.3/ref/Domain%20Classes/addTo.html"&gt;Grails: addTo*&lt;/a&gt;). If you absolutely must use java (I'm trying to hide my .NET bias here, really) Grails is a good MVC framework to use. Any changes to the domain model are automatically implemented in the database. One thing you will find usefull in tracking down errors is this code snippet:&lt;br /&gt;(b is some domain object)&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;if( !b.save() ) {&lt;br /&gt;   b.errors.each {&lt;br /&gt;        println it&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;As of right now, Grails does not have any built-in debugging support, which means that you are limmited to spitting out error descriptions. Hopefully someday it will be possible to step through a Grails app, but for the same price as this short example, you get a pretty slick development environment and framework.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6130375726605677119-6724345041493410561?l=vinbrown.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinbrown.blogspot.com/feeds/6724345041493410561/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinbrown.blogspot.com/2008/11/using-grails-to-store-generic-data-sets.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/6724345041493410561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/6724345041493410561'/><link rel='alternate' type='text/html' href='http://vinbrown.blogspot.com/2008/11/using-grails-to-store-generic-data-sets.html' title='Using Grails to Store Generic Data Sets'/><author><name>Vincent Brown Jr</name><uri>http://www.blogger.com/profile/05494473432492624534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6130375726605677119.post-7519026834711250247</id><published>2008-11-12T05:47:00.000-10:00</published><updated>2008-11-12T12:04:45.217-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>PADR, PADL and PADC for SQL Server</title><content type='html'>Thanks to Igor Nikiforov for these very helpful UDFs. One of the biggest things I have on my wish list for SQL Server is more support for string functions. Here's the link...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=51290"&gt;UDFs PADL, PADC, PADR&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6130375726605677119-7519026834711250247?l=vinbrown.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinbrown.blogspot.com/feeds/7519026834711250247/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinbrown.blogspot.com/2008/11/padr-padl-and-padc-for-sql-server.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/7519026834711250247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/7519026834711250247'/><link rel='alternate' type='text/html' href='http://vinbrown.blogspot.com/2008/11/padr-padl-and-padc-for-sql-server.html' title='PADR, PADL and PADC for SQL Server'/><author><name>Vincent Brown Jr</name><uri>http://www.blogger.com/profile/05494473432492624534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6130375726605677119.post-3703677775684890042</id><published>2008-11-06T11:41:00.000-10:00</published><updated>2008-11-07T03:35:50.767-10:00</updated><title type='text'>Can Anybody Learn To Sing?</title><content type='html'>In a prior life, before I discovered how cool it is to play with computers, I was a music teacher - arguably a pretty darn good one. Specifically, I was a voice teacher with a masters degree in Vocal Pedagogy from New England Conservatory of Music and an undergrad in Music Education. Fresh out of school I was convinced that I could teach *anybody* to sing. I had the theory, the technique and the practical experience. That, combined with a lack of money, fueled my desire to take on any and all who would fancy themselves a singer.&lt;br /&gt;&lt;br /&gt;Yeah, about that...&lt;br /&gt;&lt;br /&gt;To this day, I still cannot explain why there are some people who, knowing that they can't carry a tune in a handbasket, cling to the hope that they can learn to sing as easily as learning the fingerings on a piano. To borrow a phrase, "To those that have will be given more, and those that don't have - try gardening". Ok, I'm paraphrasing.&lt;br /&gt;&lt;br /&gt;Here are my supporting arguments:&lt;p&gt;&lt;strong&gt;The voice is deeply connected to a person's identity.&lt;/strong&gt;&lt;br/&gt; For a person to even stand a chance at changing the way their voice sounds, they have to be able to acknowledge that there is something that needs to be changed. Right off the bat, that eliminates most who would endeavor through voice lessons. The simple reason is the diva/divo complex that brought them there in the first place.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;There is no way to directly affect the mechanism by which we sing&lt;/strong&gt;&lt;br/&gt;Let me say that again: The musculature involved in making vocal sounds, for the most part, is beyond the level of conscious control. The task of the voice teacher is to provide an environment to which the vocal apparatus will reflexively respond. Because we are talking about muscle memorization, the process can take a very long time. It has been my experience that most would-be singers don't have the patience to stick it out. This is assuming that there are no external forces that would get in their way such as smoking, drinking, pregnancy, old age. And yes, I had at least a couple of students from each of these groups. Lovely people. No chance of singing.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;The human lifespan is at best 120 years.&lt;/strong&gt;&lt;br/&gt;The length of time it would take a person with no ear to learn to sing is far longer than most would stick to it. Nuff said.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Damn it Jim, I'm a voice teacher, not a doctor...&lt;/strong&gt;&lt;br/&gt;Or something like that. There are some people who have physical characteristics which make it impossible for them to produce the kind of vocal sounds that they would hope to achieve. For example, I had one gentleman who actually had a lot of musical ability being a fairly accomplished guitarist. The problem was that he was also heavily into weight lifting and, being a rather short and stocky individual, had the sort of build that made it impossible to put his arms by his side. That is to say, his arms, when at rest, were always in a position that made him look like he was getting ready for an old-style western quick-draw shoot out. Because of that, he could never seem to relax enough to allow the vocal apparatus to operate freely. &lt;br/&gt;&lt;br/&gt;That was just one case. Others either smoked so much that they could neither breathe properly nor overcome the swelling and irritation of the vocal folds to make a focused sound. Then there was one poor woman who was pregnant. Now let me be clear. Being a man, I have no direct insight as to what she was going through. But I can only imagine the discomfort she felt when I asked her to take a deep breath, knowing full well that the tiny human in her abdomen had no intention of allowing her mom's diaphragm to descend more than a couple of inches.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;I welcome any and all arguments. Even though I've moved on professionally to other things, I still find the science of vocal pedagogy fascinating and enjoy discussing it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6130375726605677119-3703677775684890042?l=vinbrown.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinbrown.blogspot.com/feeds/3703677775684890042/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinbrown.blogspot.com/2008/11/can-anybody-learn-to-sing.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/3703677775684890042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/3703677775684890042'/><link rel='alternate' type='text/html' href='http://vinbrown.blogspot.com/2008/11/can-anybody-learn-to-sing.html' title='Can Anybody Learn To Sing?'/><author><name>Vincent Brown Jr</name><uri>http://www.blogger.com/profile/05494473432492624534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6130375726605677119.post-7543823184203070226</id><published>2008-11-06T06:09:00.000-10:00</published><updated>2008-11-06T06:18:33.388-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>Avoid Inserting Duplicate Records</title><content type='html'>Here's a quick solution to the problem where you don't want to insert duplicate records into a SQL Server table. Of course, the easier way to do this is to set up a constraint, but there are times when you can't do that. For example, if you have a table where you are using a deleted flag as opposed to doing hard deletes. If you have foreign keys to deal with, I would suggest creating a table variable (again, assuming you are using SQL Server) and inserting the denormalized records there, and then doing the insert as listed below. You could probably do it in one statement, but just because you *can* do something doesn't necessarily mean you should. The two step process would be easier to read and more clearly indicates the intent of the code. Comments are great, but code should be self-documenting.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;INSERT INTO TABLE_A&lt;br /&gt;SELECT field_1, field_2, field_3&lt;br /&gt; FROM TABLE_NEW_RECORDS B&lt;br /&gt;WHERE NOT EXISTS&lt;br /&gt; (&lt;br /&gt; SELECT DISTINCT B.comp_1, B.comp_2, B.comp_3&lt;br /&gt;  FROM  TABLE_LOOKUP LU&lt;br /&gt;  WHERE B.comp_1 = LU.comp_1 And&lt;br /&gt;   B.comp_2 = LU.comp_2 And &lt;br /&gt;   B.comp_3 = LU.comp_3&lt;br /&gt; )&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Hope this helps.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6130375726605677119-7543823184203070226?l=vinbrown.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinbrown.blogspot.com/feeds/7543823184203070226/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinbrown.blogspot.com/2008/11/avoid-inserting-duplicate-records.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/7543823184203070226'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/7543823184203070226'/><link rel='alternate' type='text/html' href='http://vinbrown.blogspot.com/2008/11/avoid-inserting-duplicate-records.html' title='Avoid Inserting Duplicate Records'/><author><name>Vincent Brown Jr</name><uri>http://www.blogger.com/profile/05494473432492624534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6130375726605677119.post-2775391384493551554</id><published>2008-10-25T15:23:00.000-10:00</published><updated>2008-11-08T13:43:09.821-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bees'/><title type='text'>So Long and Thanks for All the Sugar Water</title><content type='html'>If you are a bee keeper reading this then I'm sure you know where this post is headed. If not, let me briefly explain what happens when a bee colony decides it has outgrown its current facilities and wants to look elsewhere for other arrangements. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When starting a hive, as my wife and I did this past summer, it is very important to check on the little critters at least once per week - which unfortunately my wife and I did *not* do this past summer. In our defense, we were very well intentioned but we just had way too much going on. Even though we had the benefit of attending 'bee school' provided by the local Bee Keepers Association (which I would highly recommend to anyone interested in getting started with their own apiary), I figured that even though they were a little neglected, they were being fed and seemed active so all was good. Wrong. I had only installed the lower hive with frames and had just recently finished assembling the next 10 frames to put in the second hive body but had not put it out yet. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Well, one day in early June I came home from work and saw a frightening sight. Now, I knew there were a lot of bees in the hive - some 12 or 13,000 - but it wasn't until I saw most of them in a huge clump on the side of the hive that I really got the full effect. I was witnessing a swarm. Now, a swarm is not what the name has come to imply from horror movies. Rather, it just means that they had outgrown their current space and were ready to pack up and move. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When bees swarm, they send out a small bunch of explorers to find a new location. When they find it, they signal back to the rest of the colony which is waiting patiently in a big ball and they relocate taking their queen with them. When this happens with bees in the woods or elsewhere, you might find them dangling from a tree limb. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So now here I am faced with this swarm of bees. I had to work quickly, so I ran in the house to tell my wife and we jumped into the bee suits, opened up the hive and literally dumped the bees back into the hive. You would think that they would have just flown off at that point, but it seemed at the time that we had caught it just in time. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Unfortunately there's not a happy ending to this story. Our hive did not survive the summer. While it seemed that through July and August the bees were reproducing and staying active, we never did find our queen. The only thing that we could think of is that either the queen had in fact flown off with a good portion of the colony, or somewhere along the way we (or the other bees) had killed her. We'll never know what really happened, but it turns out the bees were reproducing, but without a queen. We had a condition wherein the worker bees start laying eggs instead of the queen. Eventually the colony will die off when this occurs.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The upside to this whole thing (if one can be found) is that my wife and I learned the hard way some very useful stuff about bee keeping including how to check for a queen cell, the right way (and wrong way) to remove frames from the hive without squishing anybody along with the simple hands-on inspection of the hive. We plan on attending the bee school sessions again this winter and trying again in the spring with a new colony. At least now we've got all the equipment ready to go this time around. Here are some pictures of the hive taken prior to the mass exodus...&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_9oU42axCr4Q/SQPOd2JT7PI/AAAAAAAAAAc/M-3CO5K2jak/s1600-h/bees_3.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_9oU42axCr4Q/SQPOd2JT7PI/AAAAAAAAAAc/M-3CO5K2jak/s320/bees_3.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5261275801844968690" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_9oU42axCr4Q/SQPOdSxKhqI/AAAAAAAAAAU/CP9kMrYG7jA/s1600-h/bees_2.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_9oU42axCr4Q/SQPOdSxKhqI/AAAAAAAAAAU/CP9kMrYG7jA/s320/bees_2.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5261275792348448418" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_9oU42axCr4Q/SQPOc34JNDI/AAAAAAAAAAM/0I8yDLkUbog/s1600-h/bees_1.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_9oU42axCr4Q/SQPOc34JNDI/AAAAAAAAAAM/0I8yDLkUbog/s320/bees_1.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5261275785129964594" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6130375726605677119-2775391384493551554?l=vinbrown.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinbrown.blogspot.com/feeds/2775391384493551554/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinbrown.blogspot.com/2008/10/so-long-and-thanks-for-all-sugar-water.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/2775391384493551554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/2775391384493551554'/><link rel='alternate' type='text/html' href='http://vinbrown.blogspot.com/2008/10/so-long-and-thanks-for-all-sugar-water.html' title='So Long and Thanks for All the Sugar Water'/><author><name>Vincent Brown Jr</name><uri>http://www.blogger.com/profile/05494473432492624534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_9oU42axCr4Q/SQPOd2JT7PI/AAAAAAAAAAc/M-3CO5K2jak/s72-c/bees_3.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6130375726605677119.post-4944449936262985681</id><published>2008-10-23T06:57:00.000-10:00</published><updated>2008-10-23T10:47:12.761-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net mvc'/><title type='text'>Mvc Framework Model Binders</title><content type='html'>In the preview 5 version of the asp.net mvc framework they introduced the ModelBinder. The team at my company actually started a very similar implementation for use with nHibernate. Unfortunately, it - like the project - never really took off. So along comes the mvc framework and the ModelBinder. Preview 5 supports built in support for basic binding, but allows you to build your own custom binding. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As I mentioned in a previous post, I'll be a little different and post this example using vb.net code. Truth to be told, I prefer C#, but there seems to be a real lack of vb.net examples so far. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To add custom binding/serialization support for your custom class it needs to implement IModelBinder. There's only one required method to implement which is GetValue() in which you take the form from the controllerContext.HttpContext.Request object and map the fields to your class. Here's a sample: &lt;/div&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;div style="line-height:10px"&gt;&amp;lt;modelbinder(GetType(fedloanrule))&amp;gt; _&lt;br /&gt;&lt;br /&gt;Partial Public Class FedLoanRule&lt;br /&gt;&lt;br /&gt;  Implements IModelBinder&lt;/div&gt;&lt;br /&gt;  &lt;div&gt;    Public Function GetValue(ByVal controllerContext As System.Web.Mvc.ControllerContext, ByVal modelName As String, ByVal modelType As System.Type, ByVal modelState As System.Web.Mvc.ModelStateDictionary) As Object&lt;br /&gt;  Implements System.Web.Mvc.IModelBinder.GetValue&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;        Dim request As HttpRequestBase = controllerContext.HttpContext.Request&lt;/div&gt;&lt;div&gt;        Dim rule As FedLoanRule = New FedLoanRule()&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;        rule.LoanType = request("LoanType")&lt;/div&gt;&lt;div&gt;        rule.LateDisbInterval = Integer.Parse(request("LateDisbInterval"))&lt;/div&gt;&lt;div&gt;        rule.MaxCombinedDepLoan = Integer.Parse(request("MaxCombinedDepLoan"))&lt;/div&gt;&lt;div&gt;        rule.MaxCombinedGradLoan = Integer.Parse(request("MaxCombinedGradLoan"))&lt;/div&gt;&lt;div&gt;&lt;div&gt;        Return rule&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;    End Function&lt;/div&gt;&lt;/div&gt;&lt;div&gt;End Class&lt;/div&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;When an instance of a FedLoanRule is passed into my controller action, GetValue is called first. This would be useful if you had some special mapping that had to be done since it takes the mapping code out of your save/update code. In this simple case it would seem that it would have been easier just to call TryUpdateModel(). But this is good for an example. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When the code gets into the controller action, the updated object instance is there and ready to use. Here's the catch. As of the Preview 5 version (I say that because the beta was just released),  this only seems to be useful for creating new records. If you want to do an update, even though your object is bound to the form prior to reaching your controller action, once in the controller action the Model does not see that anything has been changed. You have to retrieve the object from the model, make your change and &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;then &lt;/span&gt;you can do the update. If you just call SubmitChanges()  on the object that is passed in from GetValue(), nothing is submitted. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;While it's cool functionality, it doesn't seem to make a whole lot of sense to have separate methods for inserting new records - a scenerio in which the model binder does work - and for updating existing records. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Hey, this is still preview code and I've yet to try out the beta. Somebody else brought up this point on &lt;a href="http://weblogs.asp.net/Scottgu/"&gt;ScottGu's blog&lt;/a&gt;. And he mentioned that it might be addressed in the beta. &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6130375726605677119-4944449936262985681?l=vinbrown.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinbrown.blogspot.com/feeds/4944449936262985681/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinbrown.blogspot.com/2008/10/mvc-framework-model-binders.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/4944449936262985681'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/4944449936262985681'/><link rel='alternate' type='text/html' href='http://vinbrown.blogspot.com/2008/10/mvc-framework-model-binders.html' title='Mvc Framework Model Binders'/><author><name>Vincent Brown Jr</name><uri>http://www.blogger.com/profile/05494473432492624534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6130375726605677119.post-5930859546589643546</id><published>2008-10-23T04:02:00.000-10:00</published><updated>2008-10-23T04:46:28.251-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net mvc'/><title type='text'>ASP.Net MVC Framework</title><content type='html'>We've been using the new mvc framework at my company since the Preview 2 version. For those who are keeping score the beta was released about a week ago. I've been fortunate to have been able to work on projects that have spanned the evolution of this framework and had to upgrade a couple so I thought I'd share some of the highlights.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Let me state for the purpose of full disclosure that I've only been doing web development for about a year and a half though I've been an application developer for over 10 years now. But it's been a very full year and a half as I've been very fortunate to work for a company that embraces new technology. &lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;First of all, the mvc framework, certainly not a new idea having been around for some time, is a relief from having to deal with web forms. One of the biggest headaches of trying to incorporate javascript, for example, in a web forms app was having to use the ClientId property of html elements and pass that id back to the server rather than just using the id that I assign. This illustrates what seems to be the key feature that one would look to when considering switching development frameworks. With web forms the focus is on the server processing. Anytime you want to do client side processing you'll more than likely have to do some work around / hack to get it to work. It's not so much that the mvc framework gives you new functionality that web forms doesn't. It's the fact that you don't have to fight tooth and nail to get simple things to work. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For example, take any web forms application and view the source of a page. You'll find all the nasty looking element ids that are auto generated along with html that, if you were the developer, would leave you scratching your head wondering where it came from. Now take that same page written using the mvc framework and you'll see ... wait for it ... yep, pretty much the same html that the developer wrote. You have control of every single tag that is written. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here's another gem. You have a datagrid control and you want to include a checkbox column. And to each checkbox you want to assign a custom attribute. Go ahead and try it. I'll wait. Hopefully when you get back here you won't have pulled out all your hair after you notice that each checkbox is enclosed in a span tag and your custom attribute is not assigned to the checkbox, BUT TO THE SPAN! Somebody with more experience please explain that to me. That same exercise using the mvc framework involves either using the Html.Checkbox helper function or just simply writing the input tag yourself and assigning whatever attribute you want. I'd call it What You Write Is What You Get. And while the world certainly doesn't need another acronym, if you try saying WYWIWYG a few times you'll soon be reverting to an Elmer Fud voice and rolling on the floor as I am right now. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Excuse me.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ok, I'm back.  If you want further information regarding the mvc framework, I'd check out &lt;a href="http://weblogs.asp.net/Scottgu/"&gt;Scott Guthrie's blog&lt;/a&gt;. One thing that does seem to be lacking, at least for now, is a good set of VB.Net examples. I say this because I'm currently working on an application for a client that requires VB.net and having heavily relied on example code to learn this new framework, I spent a lot of time trying to convert some of the features. Admittedly, though, much of the difficulty in conversion was dealing with LINQ and not specifically the mvc framework. I'll post some of the more interesting examples another time. &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6130375726605677119-5930859546589643546?l=vinbrown.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinbrown.blogspot.com/feeds/5930859546589643546/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinbrown.blogspot.com/2008/10/aspnet-mvc-framework.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/5930859546589643546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/5930859546589643546'/><link rel='alternate' type='text/html' href='http://vinbrown.blogspot.com/2008/10/aspnet-mvc-framework.html' title='ASP.Net MVC Framework'/><author><name>Vincent Brown Jr</name><uri>http://www.blogger.com/profile/05494473432492624534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6130375726605677119.post-6094843424446366130</id><published>2008-10-22T10:19:00.000-10:00</published><updated>2008-11-06T07:18:10.744-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bees'/><title type='text'>Getting Started in Beekeeping</title><content type='html'>My wife and I took a shot at beekeeping this past summer and had some mixed results. We started by attending 'bee school'. The RI Beekeepers Association sponsored the session that we attended and I have to say it was very interesting. The class met once per week for about 10 weeks and by the end we had the knowledge (and contacts) necessary to get started. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We hooked up with someone who regularly goes down south to get what are called installation packages. This is basically just a small box with about 10,000 bees in it and 1 queen. The queen is kept in a small wooden box with a couple of attendants in there with her. More on that later. We got our bees around the end of April. I have to admit I was a little freaked out driving home with 10,000 bees in the back of my truck. Fortunately, it was an uneventful ride home.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When we got them home, my wife and I put on the bee suits (which look strikingly similar to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;hazmat&lt;/span&gt; suits), opened up the empty hive and dumped the bees into it. There were still some left in the box, but we just left it opened in front of the hive. They found their way in eventually. Next, we took the queen box and gently placed it in the hive. What is supposed to happen is that the queen is protected inside the box. If she wasn't in there, the other bees would kill her. The purpose of the box is to allow the queen to gradually get introduced to the rest of the colony. The queen box has a little hole in the top which is plugged up with a piece of hard sugar. Over the course of about 3 days, the queen's attendants eat through the sugar so that by the time they are free, the queen should be &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_1"&gt;acclimated&lt;/span&gt; to the rest of the colony. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;That's it. Pretty simple. I'll post some more regarding some of the more interesting things that we encountered in our little experiment.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6130375726605677119-6094843424446366130?l=vinbrown.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vinbrown.blogspot.com/feeds/6094843424446366130/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vinbrown.blogspot.com/2008/10/getting-started-in-beekeeping.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/6094843424446366130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6130375726605677119/posts/default/6094843424446366130'/><link rel='alternate' type='text/html' href='http://vinbrown.blogspot.com/2008/10/getting-started-in-beekeeping.html' title='Getting Started in Beekeeping'/><author><name>Vincent Brown Jr</name><uri>http://www.blogger.com/profile/05494473432492624534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
