<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>naspinski</title>
    <description>development :: programming :: design</description>
    <link>http://naspinski.net/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>BlogEngine.Net Syndication Generator 1.0.0.0 (http://dotnetblogengine.net/)</generator>
    <language>en-GB</language>
    <blogChannel:blogRoll>http://naspinski.net/opml.axd</blogChannel:blogRoll>
    <blogChannel:blink>http://www.naspinski.net/syndication.axd</blogChannel:blink>
    <dc:creator>naspinski</dc:creator>
    <dc:title>naspinski</dc:title>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/naspinski" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
      <title>Parsing Strings to Enums with a Simple Univeral Extension</title>
      <description>&lt;h2&gt;getting an enum to a string is easy, but switching back can be a pain&lt;/h2&gt;

If I have an enum:
&lt;pre class="prettyprint"&gt;public enum WhatToShow { All, Courses, Seminars };&lt;/pre&gt;
&lt;br /&gt;
and I want to turn a string "Courses" back into that enum Type, there are a few ways I could do it.  The most basic way would be to use a switch statement; that is a pain, especially for large enums, plus it has to be re-written for each enum. Here is a simple extension you can use to convert strings back into enums:
&lt;pre class="prettyprint"&gt;public static T ToEnum&amp;lt;T&amp;gt;(this string strOfEnum)
{
    return (T)Enum.Parse(typeof(T), strOfEnum);
}&lt;/pre&gt;
&lt;br /&gt;
Now if I have a simple string, it is simple to turn it back to an enum:
&lt;pre class="prettyprint"&gt;string str = "Courses";
WhatToShow en = str.ToEnum&amp;lt;WhatToShow&amp;gt;();&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7jMY0qN0ZEvMfk0ULEDCSlKBqes/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7jMY0qN0ZEvMfk0ULEDCSlKBqes/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7jMY0qN0ZEvMfk0ULEDCSlKBqes/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7jMY0qN0ZEvMfk0ULEDCSlKBqes/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/naspinski?a=GvgFVvgV9fA:Vw7b62lN4EQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/naspinski?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/naspinski?a=GvgFVvgV9fA:Vw7b62lN4EQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/naspinski?i=GvgFVvgV9fA:Vw7b62lN4EQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/naspinski?a=GvgFVvgV9fA:Vw7b62lN4EQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/naspinski?i=GvgFVvgV9fA:Vw7b62lN4EQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/naspinski/~4/GvgFVvgV9fA" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/naspinski/~3/GvgFVvgV9fA/post.aspx</link>
      <author>naspinski</author>
      <comments>http://naspinski.net/post/Parsing-Strings-to-Enums-with-a-Simple-Univeral-Extension.aspx#comment</comments>
      <guid isPermaLink="false">http://naspinski.net/post.aspx?id=ad6ba067-7460-4bf2-bf4d-f4986f01a728</guid>
      <pubDate>Thu, 29 Oct 2009 04:24:00 -0500</pubDate>
      <category>c#</category>
      <dc:publisher>naspinski</dc:publisher>
      <pingback:server>http://naspinski.net/pingback.axd</pingback:server>
      <pingback:target>http://naspinski.net/post.aspx?id=ad6ba067-7460-4bf2-bf4d-f4986f01a728</pingback:target>
      <slash:comments>5</slash:comments>
      <trackback:ping>http://naspinski.net/trackback.axd?id=ad6ba067-7460-4bf2-bf4d-f4986f01a728</trackback:ping>
      <wfw:comment>http://naspinski.net/post/Parsing-Strings-to-Enums-with-a-Simple-Univeral-Extension.aspx#comment</wfw:comment>
      <wfw:commentRss>http://naspinski.net/syndication.axd?post=ad6ba067-7460-4bf2-bf4d-f4986f01a728</wfw:commentRss>
    <feedburner:origLink>http://naspinski.net/post.aspx?id=ad6ba067-7460-4bf2-bf4d-f4986f01a728</feedburner:origLink></item>
    <item>
      <title>Forganizer - unobtrusive network file organizer - new open source project</title>
      <description>&lt;h2&gt;An unobtrusive intranet ASP.NET MVC application for logically tagging, organizing and searching network files in one centralized location with a fast and simple interface&lt;/h2&gt;

&lt;div&gt;
    Me and some friends have a network set up where we share movies and music.  
    This is a Windows domain network and we all simply share our folders as 'shares' across the network.
    The problem is that there are so many different files and they are all spread out, there was no way to browse them all at once in any sort of convenient way.
    That is where the idea for forganizer came up, it is simply a tagging and search interface for multiple shared drives (or just your local ones if you want). 
    Since I hadn't really made any MVC projects yet, I decided to do this one in ASP.NET MVC, a great new technology.  
    Also, this was my first attempt at many new programming techniques I hadn't really used in the past such as Unit Testing, Inversion of Control (Dependency Injection) and Mocking, all very useful!
&lt;br /&gt;&lt;br /&gt;
I want to say right up front, this is for a Windows network, and will work best with... err... IE7+, because it works best with your file explorer - some features like folder opening and downloads may not work with other browsers.
&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
    You can always check out my &lt;a href="http://forganizer.codeplex.com/SourceControl/ListDownloadableCommits.aspx"&gt;source code&lt;/a&gt; 
    if you want to see how something was done, here I am just going to explain what the program does from a user point of view.
&lt;/div&gt;
&lt;br /&gt;
&lt;h4&gt;clean install&lt;/h4&gt;
&lt;div&gt;
    Once forganizer is installed (just run &lt;b&gt;Content/setup.sql&lt;/b&gt; and publish the rest to a website, making sure you have MVC installed and all that good stuff) you will see this:
    &lt;div style="text-align:center;"&gt;
        &lt;a href="http://naspinski.net/image.axd?picture=1_forganizer_blank.png"&gt;&lt;img style="float:none;width:450px;" src="http://naspinski.net/image.axd?picture=1_forganizer_blank.png" alt="" /&gt;&lt;/a&gt;
    &lt;/div&gt;
    &lt;br /&gt;
    &lt;div&gt;
        &lt;img  src="http://naspinski.net/image.axd?picture=folder_to_upload_.png" alt="" /&gt;
        Now you need to add some files to the system, here is the directory we are going to add for the demo.
        Notice that there are some files in the top folder, and also some folders that go down (quite a few nested folders actually).
    &lt;/div&gt;
&lt;/div&gt;
&lt;h4&gt;adding some files&lt;/h4&gt;
&lt;div&gt;
    To add new files in, simply click on the 'manage' tab on the upper right. 
    The default page for manage is 'add files' so you simply enter the network path in the 'from folder' field and click 'run it'.
    &lt;div style="text-align:center;"&gt;
        &lt;a href="http://naspinski.net/image.axd?picture=2_forganizer_upload_non_recursive_.png"&gt;
            &lt;img style="float:none;width:450px;" src="http://naspinski.net/image.axd?picture=2_forganizer_upload_non_recursive_.png" alt="" /&gt;
        &lt;/a&gt;
    &lt;/div&gt;
    &lt;br  /&gt;
    Notice that it only uploaded 8 files, those are the files in the root.  If you check the 'recursive' checkbox, if will go ahead and run through all of the files regardless of depth:
    &lt;div style="text-align:center;"&gt;
        &lt;a href="http://naspinski.net/image.axd?picture=3_forganizer_upload_recursive_.png"&gt;
            &lt;img style="float:none;width:450px;" src="http://naspinski.net/image.axd?picture=3_forganizer_upload_recursive_.png" alt="" /&gt;
        &lt;/a&gt;
    &lt;/div&gt;
    &lt;br /&gt;
    The system will never add a file more than once, so feel free to run the same folders over and over, in fact, that is how you enter new files that have been put on the shares - I think later I will implement and auto-updater.
    Now if we were to will in more of the textboxes the system would be more selective.  
    Say I wanted to exclude all of the .txt files I have, I would just fill '.txt' in the 'exclude extensions' blank.
    Similarly, if I am only interested in video files, I would just put '.avi .mpg .mpeg' in the 'include only these extensions' field - it's really pretty self-explanatory.
&lt;/div&gt;
&lt;br /&gt;
&lt;h4&gt;now you are up and running&lt;/h4&gt;
&lt;div&gt;
    Click on the 'search' tab or on 'forganizer' and you will see that you now have a tidy list of files.
    Also, you will notice that on the right side, all of the file extensions that were in your folders are now represented in the extensions cloud, sized by the relation of file count - in my example, there are many more .cs files than anything else:
    &lt;div style="text-align:center;"&gt;
        &lt;a href="http://naspinski.net/image.axd?picture=4_forganizer_search1_.png"&gt;
            &lt;img style="float:none;width:450px;" src="http://naspinski.net/image.axd?picture=4_forganizer_search1_.png" alt="" /&gt;
        &lt;/a&gt;
    &lt;/div&gt;
    &lt;br /&gt;
    Each file has download, open folder and delete links next to it.  They all do what you think they would, except delete does not actually delete a file, just the reference in forganizer.
    If you delete a reference, then later restore it, it will still hold all the tags you previously assigned to it.
&lt;/div&gt;
&lt;br /&gt;
&lt;h4&gt;tag some stuff&lt;/h4&gt;
&lt;div&gt;
    As of right now, this doesn't do us much good, they are searchable by file extension (just click on the file extension on the right), but you could do that in Explorer.
    We want to add some tags, so click on 'manage' again, and then on 'mass tag adding' on the right side menu.
    &lt;div style="text-align:center;"&gt;
        &lt;a href="http://naspinski.net/image.axd?picture=5_forganizer_mass_tag_.png"&gt;
            &lt;img style="float:none;width:450px;" src="http://naspinski.net/image.axd?picture=5_forganizer_mass_tag_.png" alt="" /&gt;
        &lt;/a&gt;
    &lt;/div&gt;
    &lt;br /&gt;
    In this example, I am adding the tag 'Testing' to all the files in the directory \\network_drive\share\folder\forganizer\Forganizer.Tests.
    Now go back to the search, and you can see that many of the files have been tagged:
    &lt;div style="text-align:center;"&gt;
        &lt;a href="http://naspinski.net/image.axd?picture=6_forganizer_after_mass_tag.png"&gt;
            &lt;img style="float:none;width:450px;" src="http://naspinski.net/image.axd?picture=6_forganizer_after_mass_tag.png" alt="" /&gt;
        &lt;/a&gt;
    &lt;/div&gt;
    &lt;br /&gt;
    The 'mass tag delete' and 'mass tag edit' work just the same as above (actually runs the same exact code).
    Notice that I also manually added the 'wallpaper' tags to a couple .jpg files - that was done simply by typing 'wallpaper' in the small textbox by each file and clicking '+tags' or pressing enter.
    You will also see that now there is a cloud tag on the right showing the tags that are in the present search.
&lt;/div&gt;
&lt;br /&gt;
&lt;h4&gt;create categories&lt;/h4&gt;
&lt;div&gt;
    Now you can make some categories to make searching easier. 
    Categories are just groups of file extensions, I am going to make a 'programming' category that includes .js and .cs files:
    &lt;div style="text-align:center;"&gt;
        &lt;a href="http://naspinski.net/image.axd?picture=7_forganizer_add_cat.png"&gt;
            &lt;img style="float:none;width:450px;" src="http://naspinski.net/image.axd?picture=7_forganizer_add_cat.png" alt="" /&gt;
        &lt;/a&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;h4&gt;the manual tagging interface&lt;/h4&gt;
&lt;div&gt;
    Now going back to the main search, you will see that a 'programming' category is now in the sidebar.
    In the following picture, you can see that I have clicked on the 'WebUI' tag and the '.js' file extension.
    Now all I see is the .js files that are tagged with 'WebUI', it's just that simple! Also take note of the intuitive urls achieved with MVC.   
    &lt;div style="text-align:center;"&gt;
        &lt;a href="http://naspinski.net/image.axd?picture=8_forganizer_ui_js_files.png"&gt;
            &lt;img style="float:none;width:450px;" src="http://naspinski.net/image.axd?picture=8_forganizer_ui_js_files.png" alt="" /&gt;
        &lt;/a&gt;
    &lt;/div&gt;
    &lt;br /&gt;
    I also typed MS in some of the .js file blanks as I am going to tag those as MS javascript files by pressing enter:
    &lt;div style="text-align:center;"&gt;
        &lt;a href="http://naspinski.net/image.axd?picture=9_forganizer_added_tags_manually.png"&gt;
            &lt;img style="float:none;width:450px;" src="http://naspinski.net/image.axd?picture=9_forganizer_added_tags_manually.png" alt="" /&gt;
        &lt;/a&gt;
    &lt;/div&gt;
    &lt;br /&gt;
    Those MS tags are now inserted.  &lt;br /&gt;&lt;br /&gt;
    Now if you want to delete a tag, simply hover over it and a [delete] link will show up:
    &lt;div style="text-align:center;"&gt;
        &lt;a href="http://naspinski.net/image.axd?picture=10_forganizer_delete_tag_.png"&gt;
            &lt;img style="float:none;width:450px;" src="http://naspinski.net/image.axd?picture=10_forganizer_delete_tag_.png" alt="" /&gt;
        &lt;/a&gt;
    &lt;/div&gt;
    &lt;br /&gt;
    Click it and the tag is removed:
    &lt;div style="text-align:center;"&gt;
        &lt;a href="http://naspinski.net/image.axd?picture=11_tag_deleted.png"&gt;
            &lt;img style="float:none;width:450px;" src="http://naspinski.net/image.axd?picture=11_tag_deleted.png" alt="" /&gt;
        &lt;/a&gt;
    &lt;/div&gt;
    &lt;br /&gt;
    Pretty basic stuff and simple to figure out and use.  This same add/delete interface is used for categories as well.
&lt;/div&gt;
&lt;br /&gt;
&lt;h4&gt;file cleanup&lt;/h4&gt;
&lt;div&gt;
    Now what if someone went and deleted some files, since forganizer does not actually constantly monitor the files, it will be out of date.
    That is why I built a cleanup feature - say I delete these files:
    &lt;div style="text-align:center;"&gt;
        &lt;img style="float:none;" src="http://naspinski.net/image.axd?picture=12_forganizer_delete_files_.png" alt="" /&gt;
    &lt;/div&gt;
    &lt;br /&gt;
    I can just go to manage -&gt; file cleanup and click the big button:
    &lt;div style="text-align:center;"&gt;
        &lt;a href="http://naspinski.net/image.axd?picture=13_forganizer_cleanup_.png"&gt;
            &lt;img style="float:none;width:450px;" src="http://naspinski.net/image.axd?picture=13_forganizer_cleanup_.png" alt="" /&gt;
        &lt;/a&gt;
    &lt;/div&gt;
    &lt;br /&gt;
    And you are all cleaned up.
    One great feature on this is if any file is deleted, either manually or by the cleanup tool, its tags will be preserved;
    if that file is ever re-added, or restored, it will still have all the meta-data that it always had.
&lt;/div&gt;
&lt;br /&gt;
&lt;h4&gt;some more stuff&lt;/h4&gt;
&lt;div&gt;
    I went ahead and added the 'WebUI' tag to all the files in the \\network_drive\share\folder\forganizer\forganizer.WebUI folder,
    and 'DomainModel' to all files in the \\network_drive\share\folder\forganizer\forganizer.Tests folder, 
    and finally 'forganizer' to all the files in the \\\network_drive\share\folder\forganizer\forganizer folder, so I can easily discern all of those files.
    I also added a 'visual_studio' category that include .csproj, .sln and .suo extensions, as well as a documents and images category.
    &lt;br /&gt;&lt;br /&gt;
    So now I want to find all the Visual Studio related files in forganizer; all I need to do is click on 'visual_studio' in the categories, and 'forganizer' in the tags section and I get the files I am interested in:
    &lt;div style="text-align:center;"&gt;
        &lt;a href="http://naspinski.net/image.axd?picture=14_forganizer_final_search.png"&gt;
            &lt;img style="float:none;width:450px;" src="http://naspinski.net/image.axd?picture=14_forganizer_final_search.png" alt="" /&gt;
        &lt;/a&gt;
    &lt;/div&gt;
    &lt;br /&gt;
    Think of it now as "showing all the .csproj, .sln and .suo files with the forganizer tag"
    Notice that in the upper right, 'and' has a box around it, you can also choose 'or' and it will be a broader search.
    Say I clicked the 'or' link and then clicked the 'wallpaper' tag and 'images' as well, now forganizer would be showing
    "showing all the .csproj, .sln, .suo, .png, .jpg and .jpeg files with the forganizer tag OR the wallpaper tag"
    &lt;div style="text-align:center;"&gt;
        &lt;a href="http://naspinski.net/image.axd?picture=15_forganizer_final_search2_.png"&gt;
            &lt;img style="float:none;width:450px;" src="http://naspinski.net/image.axd?picture=15_forganizer_final_search2_.png" alt="" /&gt;
        &lt;/a&gt;
    &lt;/div&gt;
    &lt;br /&gt;
    You will also see that each cloud (tags/extensions/categories) will be broken into 2 parts, the active (green) links and the inactive (grey) links. 
    The active links are files that are showing in the search right now, the inactive ones are things you can add to the search that will broaden it; if you have 'and' picked in the tag section, you will not see and inactive tags, as that wouldn't make sense.
&lt;/div&gt;
&lt;br /&gt;
&lt;h4&gt;remember, this is all unobtrusive&lt;/h4&gt;
&lt;div&gt;
    This never actually does anything with the files, deleting only deleted the reference, the files will still be there!  This is just a layer on top to help sort/search.
&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
    I hope this is interesting to someone out there, if not, it was great to help learn MVC and some other great technologies.
&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/FEuiAzT1FIeKRSYLqyA4aojktIw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FEuiAzT1FIeKRSYLqyA4aojktIw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/FEuiAzT1FIeKRSYLqyA4aojktIw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FEuiAzT1FIeKRSYLqyA4aojktIw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/naspinski?a=COCCJhZ56Mk:rC-x96uJm5M:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/naspinski?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/naspinski?a=COCCJhZ56Mk:rC-x96uJm5M:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/naspinski?i=COCCJhZ56Mk:rC-x96uJm5M:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/naspinski?a=COCCJhZ56Mk:rC-x96uJm5M:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/naspinski?i=COCCJhZ56Mk:rC-x96uJm5M:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/naspinski/~4/COCCJhZ56Mk" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/naspinski/~3/COCCJhZ56Mk/post.aspx</link>
      <author>naspinski</author>
      <comments>http://naspinski.net/post/forganizer.aspx#comment</comments>
      <guid isPermaLink="false">http://naspinski.net/post.aspx?id=ccbc4d83-4383-4867-8863-5e33ecb2ce6d</guid>
      <pubDate>Wed, 21 Oct 2009 11:49:00 -0500</pubDate>
      <category>asp.net</category>
      <category>c#</category>
      <category>css</category>
      <category>linq-to-sql</category>
      <category>mvc</category>
      <category>my projects</category>
      <dc:publisher>naspinski</dc:publisher>
      <pingback:server>http://naspinski.net/pingback.axd</pingback:server>
      <pingback:target>http://naspinski.net/post.aspx?id=ccbc4d83-4383-4867-8863-5e33ecb2ce6d</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://naspinski.net/trackback.axd?id=ccbc4d83-4383-4867-8863-5e33ecb2ce6d</trackback:ping>
      <wfw:comment>http://naspinski.net/post/forganizer.aspx#comment</wfw:comment>
      <wfw:commentRss>http://naspinski.net/syndication.axd?post=ccbc4d83-4383-4867-8863-5e33ecb2ce6d</wfw:commentRss>
    <feedburner:origLink>http://naspinski.net/post.aspx?id=ccbc4d83-4383-4867-8863-5e33ecb2ce6d</feedburner:origLink></item>
    <item>
      <title>&lt;i&gt; is for image, sprite image</title>
      <description>&lt;h2&gt;a slightly modified, very simple approach to css sprites&lt;/h2&gt;

&lt;img style="margin:0 10px 10px 0;" src="http://naspinski.net/image.axd?picture=demo_sprites.png" alt="" /&gt;

&lt;style type="text/css"&gt;
i {background:url(http://naspinski.net/image.axd?picture=demo_sprites.png) no-repeat; 
   width:24px; height:24px; display:inline-block; }
i.danger { background-position: 0 0; } 
i.download { background-position: 0 -74px; } 
i.error { background-position: 0 -148px; } 
i.folder { background-position: 0 -222px; } 
i.reload { background-position: 0 -296px; } 
i.success { background-position: 0 -370px; } 
i.trash { background-position: 0 -444px; } 
i.warning { background-position: 0 -518px; }
&lt;/style&gt;

&lt;a href="http://www.alistapart.com/articles/sprites"&gt;Css Sprites&lt;/a&gt; are nothing new, it is a way to take one image and use it for everything for faster page loads; pretty simple.
On my latest project, I came across a simple way to to employ these sprites in a logical manner; this method even makes for intellisense images in Visual Studio.
&lt;br /&gt;&lt;br /&gt;
&lt;h4&gt;prepare your sprites&lt;/h4&gt;
The first thing to do, is to get your sprites together in a zip file. Basically gather up all the pictures and icons you will be using and put them into a single folder, then zip them up.
Here is the zip I am using for the demo &lt;a href="http://naspinski.net/file.axd?file=demo_sprite.zip" rel="enclosure"&gt;demo_sprite.zip (14.12 kb)&lt;/a&gt;.  Then simply go to &lt;a href="http://spritegen.website-performance.org/"&gt;Project Fondue&lt;/a&gt; set up your settings and process. For the purposes of this method, set the 'Css Prefix' to 'i' and clear the other 'Class Output option' fields. Now you have your css, and you can download the image that Fondue produced, which is the image directly to the left in this post.  The tough work is alreaday done, now you are ready to implement it.
&lt;br/ &gt;&lt;br /&gt;
&lt;h4&gt;the &amp;lt;i&amp;gt; tag&lt;/h4&gt;
As stated in the title, I chose to use the &amp;lt;i&amp;gt; tag. This tag was originally used for &lt;span style="font-style:italics"&gt;italics&lt;/span&gt;, but that practice is not always followed, and most people use CSS reset anyway, so it is up to us to choose what we want it to mean... and I chose 'image' (the img tag wont work as it rendered the ugly 'image not found' image in most browsers).  So for this to work, you are going to have to first reset the &amp;lt;i&amp;gt; tag to nothing in css, then set it's background to the sprite image; I will assume you are using your own css reset, and my sprite to the right is called &lt;b&gt;sprites.png&lt;/b&gt;.:
&lt;pre class="prettyprint lang-css"&gt;
i {background:url(Images/sprites.png) no-repeat; 
   display:inline-block; width:24px; height:24px; }

/* code produced by Fondue */
i.danger { background-position: 0 0; } 
i.download { background-position: 0 -74px; } 
i.error { background-position: 0 -148px; } 
i.folder { background-position: 0 -222px; } 
i.reload { background-position: 0 -296px; } 
i.success { background-position: 0 -370px; } 
i.trash { background-position: 0 -444px; } 
i.warning { background-position: 0 -518px; } 
&lt;/pre&gt;
&lt;br /&gt;
I am setting the default height/width to 24px because that is the size of my icons, if all of your are not the same, you can either set a default size here, or size every one indivually;  I recommend using the most common size as the default for the smallest css. &lt;br /&gt;&lt;br /&gt;*If you do have images of different sizes, be sure to set their height/width in their corresponding css classes.
&lt;br /&gt;&lt;br /&gt;
&lt;h4&gt;use it&lt;/h4&gt;
Now you are all set, the html:
&lt;p class="prettyprint"&gt;&amp;lt;&lt;span class="kwd"&gt;i&lt;/span&gt; class=&lt;span class="str"&gt;"danger"&lt;/span&gt;&amp;gt;&amp;lt;/i&amp;gt;&lt;/p&gt;
&lt;br /&gt;
Produces &lt;i class="danger"&gt;&lt;/i&gt; and:
&lt;p class="prettyprint"&gt;&amp;lt;&lt;span class="kwd"&gt;i&lt;/span&gt; class=&lt;span class="str"&gt;"download"&lt;/span&gt;&amp;gt;&amp;lt;/i&amp;gt;&lt;/p&gt;
&lt;br /&gt;

Produces &lt;i class="download"&gt;&lt;/i&gt; and so on. &lt;img src="http://naspinski.net/image.axd?picture=sprite_intellisense.png" alt="" /&gt; Plus, if you are using visual studio, you will notice since these are css classes, they pop up in your intellisense, so it is easy to push out images on the fly in code.
&lt;div style="clear:both;"&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/2mDqMhzMVW1MZa--6hSTcdQaQtk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2mDqMhzMVW1MZa--6hSTcdQaQtk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/2mDqMhzMVW1MZa--6hSTcdQaQtk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2mDqMhzMVW1MZa--6hSTcdQaQtk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/naspinski?a=H1yhb3XP-Bs:4W-CabuvdUM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/naspinski?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/naspinski?a=H1yhb3XP-Bs:4W-CabuvdUM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/naspinski?i=H1yhb3XP-Bs:4W-CabuvdUM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/naspinski?a=H1yhb3XP-Bs:4W-CabuvdUM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/naspinski?i=H1yhb3XP-Bs:4W-CabuvdUM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/naspinski/~4/H1yhb3XP-Bs" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/naspinski/~3/H1yhb3XP-Bs/post.aspx</link>
      <author>naspinski</author>
      <comments>http://naspinski.net/post/i-is-for-image2c-sprite-image.aspx#comment</comments>
      <guid isPermaLink="false">http://naspinski.net/post.aspx?id=89dc1d53-7f87-44bc-a926-f4e7a2600b15</guid>
      <pubDate>Sun, 11 Oct 2009 04:29:00 -0500</pubDate>
      <category>css</category>
      <category>html</category>
      <category>visual studio</category>
      <dc:publisher>naspinski</dc:publisher>
      <pingback:server>http://naspinski.net/pingback.axd</pingback:server>
      <pingback:target>http://naspinski.net/post.aspx?id=89dc1d53-7f87-44bc-a926-f4e7a2600b15</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://naspinski.net/trackback.axd?id=89dc1d53-7f87-44bc-a926-f4e7a2600b15</trackback:ping>
      <wfw:comment>http://naspinski.net/post/i-is-for-image2c-sprite-image.aspx#comment</wfw:comment>
      <wfw:commentRss>http://naspinski.net/syndication.axd?post=89dc1d53-7f87-44bc-a926-f4e7a2600b15</wfw:commentRss>
    <feedburner:origLink>http://naspinski.net/post.aspx?id=89dc1d53-7f87-44bc-a926-f4e7a2600b15</feedburner:origLink></item>
    <item>
      <title>Setting up Castle Windsor IoC (Inversion of Control) aka Dependency Injection</title>
      <description>&lt;h2&gt;it can be a bit confusing getting this thing running&lt;/h2&gt;

Dependency Injection is the new big thing, and I am late on that bandwagon.
But I recently began using &lt;a href="http://castleproject.org/castle/projects.html"&gt;Castle Windsor&lt;/a&gt; while learning &lt;a href="http://asp.net/mvc"&gt;ASP.NET MVC&lt;/a&gt; through reading 
&lt;a href="http://www.amazon.com/Pro-ASP-NET-Framework-Steven-Sanderson/dp/1430210079"&gt;Pro ASP.NET MVC Framework&lt;/a&gt; which is a fantastic book.
&lt;br /&gt;&lt;br /&gt;
Anyway, setup can be a little pain to go through, and is no longer exactly as written out by the book, so here is a quick and simple guide:
&lt;br /&gt;&lt;br /&gt;
&lt;h4&gt;download/reference&lt;/h4&gt;
&lt;ul class="list"&gt;
&lt;li&gt;Visit the &lt;a href="http://castleproject.org/castle/projects.html"&gt;Project Page&lt;/a&gt; and look for the &lt;b&gt;MicroKernel/Windsor&lt;/b&gt; project, download the latest stable version (it was 2.0.0 while writing this).&lt;/li&gt;
&lt;li&gt;Copy the dlls to your &lt;b&gt;bin&lt;/b&gt; or register them in your GAC.&lt;/li&gt;
&lt;li&gt;Reference the following libraries:
&lt;ul&gt;&lt;li&gt;Castle.Core&lt;/li&gt;&lt;li&gt;Castle.DynamicProxy2&lt;/li&gt;&lt;li&gt;Castle.MicroKernel&lt;/li&gt;&lt;li&gt;Castle.Windsor&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;h4&gt;alter your web.config&lt;/h4&gt;
Add in the following inside the &lt;b&gt;&amp;lt;configSections$gt;&lt;/b&gt;
&lt;p class="prettyprint"&gt;&amp;lt;&lt;span class="kwd"&gt;section&lt;/span&gt; name=&lt;span class="str"&gt;"castle"&lt;/span&gt; 
type=&lt;span class="str"&gt;"Castle.Windsor.Configuration.AppDomain. CastleSectionHandler, Castle.Windsor"&lt;/span&gt; 
/&amp;gt;&lt;/p&gt;
&lt;br /&gt;
Add this right before your &lt;b&gt;&amp;lt;system.web&amp;gt;&lt;/b&gt;
&lt;p class="prettyprint"&gt;
&amp;lt;&lt;span class="kwd"&gt;castle&lt;/span&gt;&amp;gt;&amp;lt;&lt;span class="kwd"&gt;components&lt;/span&gt;&amp;gt;&amp;lt;/&lt;span class="kwd"&gt;components&lt;/span&gt;&amp;gt;&amp;lt;/&lt;span class="kwd"&gt;castle&lt;/span&gt;&amp;gt;
&lt;/p&gt;
&lt;br /&gt;
&lt;h4&gt;that's it&lt;/h4&gt;
That's all it takes, your Castle Windsor should now be running.
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/lvf7T_ZGhKfJGF5fV6uUi-nBAuY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lvf7T_ZGhKfJGF5fV6uUi-nBAuY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/lvf7T_ZGhKfJGF5fV6uUi-nBAuY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lvf7T_ZGhKfJGF5fV6uUi-nBAuY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/naspinski?a=2NvXOQqldjI:2U_2kSpPRoY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/naspinski?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/naspinski?a=2NvXOQqldjI:2U_2kSpPRoY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/naspinski?i=2NvXOQqldjI:2U_2kSpPRoY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/naspinski?a=2NvXOQqldjI:2U_2kSpPRoY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/naspinski?i=2NvXOQqldjI:2U_2kSpPRoY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/naspinski/~4/2NvXOQqldjI" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/naspinski/~3/2NvXOQqldjI/post.aspx</link>
      <author>naspinski</author>
      <comments>http://naspinski.net/post/Setting-up-Castle-Windsor-IoC-(Inversion-of-Control)-aka-Dependency-Injection.aspx#comment</comments>
      <guid isPermaLink="false">http://naspinski.net/post.aspx?id=aa23115c-5df6-46cf-88f7-bbc88544fcae</guid>
      <pubDate>Sun, 04 Oct 2009 10:55:00 -0500</pubDate>
      <category>asp.net</category>
      <category>mvc</category>
      <dc:publisher>naspinski</dc:publisher>
      <pingback:server>http://naspinski.net/pingback.axd</pingback:server>
      <pingback:target>http://naspinski.net/post.aspx?id=aa23115c-5df6-46cf-88f7-bbc88544fcae</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://naspinski.net/trackback.axd?id=aa23115c-5df6-46cf-88f7-bbc88544fcae</trackback:ping>
      <wfw:comment>http://naspinski.net/post/Setting-up-Castle-Windsor-IoC-(Inversion-of-Control)-aka-Dependency-Injection.aspx#comment</wfw:comment>
      <wfw:commentRss>http://naspinski.net/syndication.axd?post=aa23115c-5df6-46cf-88f7-bbc88544fcae</wfw:commentRss>
    <feedburner:origLink>http://naspinski.net/post.aspx?id=aa23115c-5df6-46cf-88f7-bbc88544fcae</feedburner:origLink></item>
    <item>
      <title>Getting the Sheet Name(s) from an Excel Document with OleDb</title>
      <description>&lt;h2&gt;users name their sheets all sorts of crazy things, but sometimes, I want to be able to get the sheet names regardless of what they are named&lt;/h2&gt;

Considering that I already have my ConnectionString &lt;b&gt;strC&lt;/b&gt; set up to access my Excel file, I can just use the &lt;b&gt;GetOleDbSchemaTable&lt;/b&gt; method like this:
&lt;pre class="prettyprint"&gt;DataTable dtS;
using (OleDbConnection c = new OleDbConnection(strC))
{
  c.Open();
  dtS = c.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, 
    new object[] { null, null, null, "TABLE" });
  c.Close();
}&lt;/pre&gt;&lt;br /&gt;
Now &lt;b&gt;dtSchema&lt;/b&gt; holds the sheet names (in alphabetical order).
To get them out:
&lt;pre class="prettyprint"&gt;foreach(DataRow row in dtS.Rows)
  Console.WriteLine(row.Field&amp;lt;string&amp;gt;("TABLE_NAME"));&lt;/pre
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/NYlYJT5WO0f-GXGH7AOPuZrlqvw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NYlYJT5WO0f-GXGH7AOPuZrlqvw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/NYlYJT5WO0f-GXGH7AOPuZrlqvw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NYlYJT5WO0f-GXGH7AOPuZrlqvw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/naspinski?a=keJ4xe5AmH4:CV06UfgFjxM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/naspinski?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/naspinski?a=keJ4xe5AmH4:CV06UfgFjxM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/naspinski?i=keJ4xe5AmH4:CV06UfgFjxM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/naspinski?a=keJ4xe5AmH4:CV06UfgFjxM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/naspinski?i=keJ4xe5AmH4:CV06UfgFjxM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/naspinski/~4/keJ4xe5AmH4" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/naspinski/~3/keJ4xe5AmH4/post.aspx</link>
      <author>naspinski</author>
      <comments>http://naspinski.net/post/Getting-the-Sheet-Name(s)-from-an-Excel-Document-with-OleDb.aspx#comment</comments>
      <guid isPermaLink="false">http://naspinski.net/post.aspx?id=9018a855-b8c5-48f6-96f0-c47bbd307a2b</guid>
      <pubDate>Tue, 22 Sep 2009 10:21:00 -0500</pubDate>
      <category>c#</category>
      <category>excel</category>
      <dc:publisher>naspinski</dc:publisher>
      <pingback:server>http://naspinski.net/pingback.axd</pingback:server>
      <pingback:target>http://naspinski.net/post.aspx?id=9018a855-b8c5-48f6-96f0-c47bbd307a2b</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://naspinski.net/trackback.axd?id=9018a855-b8c5-48f6-96f0-c47bbd307a2b</trackback:ping>
      <wfw:comment>http://naspinski.net/post/Getting-the-Sheet-Name(s)-from-an-Excel-Document-with-OleDb.aspx#comment</wfw:comment>
      <wfw:commentRss>http://naspinski.net/syndication.axd?post=9018a855-b8c5-48f6-96f0-c47bbd307a2b</wfw:commentRss>
    <feedburner:origLink>http://naspinski.net/post.aspx?id=9018a855-b8c5-48f6-96f0-c47bbd307a2b</feedburner:origLink></item>
    <item>
      <title>Slick-Ticket v2.0 Released</title>
      <description>&lt;h2&gt;Many improvements across the board, mostly behind the scenes&lt;/h2&gt;

I am proud to say that I have released version 2 of my open-source trouble-ticketing/help desk system &lt;a href="http://slick-ticket.com"&gt;Slick-Ticket&lt;/a&gt;.  
I wasn't initially planning on making a new release, but the program has become suprisingly popular with over 3,000 downloads and an actual (small) community of users which is great!
&lt;br /&gt;&lt;br /&gt;
You can download 
&lt;a href="http://slickticket.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=21952"&gt;Slick-Ticket v2.0&lt;/a&gt; if you have never used it before.  
If you have already been using a previous version, you will need to replace your existing code with the &lt;a href="http://slickticket.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=33220"&gt;patching program&lt;/a&gt;, run it, then download version 2.  It does a few database modifications to cleanup the lack of seperation of markup/db which was done very poorly in a rush of the first version. 
As with any upgrade, I highly recommend you backup prior to running this upgrade!
&lt;br /&gt;&lt;br /&gt;
&lt;h4&gt;improvements&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Broke the dbi.cs class up into more discreet classes&lt;/li&gt;
&lt;li&gt;Renamed many methods properly&lt;/li&gt;
&lt;li&gt;Removed (non-user-added) markup from any of the database fields&lt;/li&gt;
&lt;li&gt;Moved some markup from the code-behinid to the .aspx pages&lt;/li&gt;
&lt;li&gt;Globalized and ready for translation&lt;/li&gt;
&lt;li&gt;Added ability to possibly delete attachments/comments/tickets in the future&lt;/li&gt;
&lt;li&gt;Introduced some more dependency injection&lt;/li&gt;
&lt;li&gt;Code is now much more robust!&lt;/li&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/kIhjQgHVaihMw-brukYcRoUgRbA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kIhjQgHVaihMw-brukYcRoUgRbA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/kIhjQgHVaihMw-brukYcRoUgRbA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kIhjQgHVaihMw-brukYcRoUgRbA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/naspinski?a=wWrH1wVG-z8:N6l6OghVlqg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/naspinski?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/naspinski?a=wWrH1wVG-z8:N6l6OghVlqg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/naspinski?i=wWrH1wVG-z8:N6l6OghVlqg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/naspinski?a=wWrH1wVG-z8:N6l6OghVlqg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/naspinski?i=wWrH1wVG-z8:N6l6OghVlqg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/naspinski/~4/wWrH1wVG-z8" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/naspinski/~3/wWrH1wVG-z8/post.aspx</link>
      <author>naspinski</author>
      <comments>http://naspinski.net/post/Slick-Ticket-v20-Released.aspx#comment</comments>
      <guid isPermaLink="false">http://naspinski.net/post.aspx?id=5ff1e585-61eb-44f7-b877-46c1eeb7c454</guid>
      <pubDate>Sun, 20 Sep 2009 13:24:00 -0500</pubDate>
      <category>asp.net</category>
      <category>c#</category>
      <category>linq-to-sql</category>
      <category>my projects</category>
      <dc:publisher>naspinski</dc:publisher>
      <pingback:server>http://naspinski.net/pingback.axd</pingback:server>
      <pingback:target>http://naspinski.net/post.aspx?id=5ff1e585-61eb-44f7-b877-46c1eeb7c454</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://naspinski.net/trackback.axd?id=5ff1e585-61eb-44f7-b877-46c1eeb7c454</trackback:ping>
      <wfw:comment>http://naspinski.net/post/Slick-Ticket-v20-Released.aspx#comment</wfw:comment>
      <wfw:commentRss>http://naspinski.net/syndication.axd?post=5ff1e585-61eb-44f7-b877-46c1eeb7c454</wfw:commentRss>
    <feedburner:origLink>http://naspinski.net/post.aspx?id=5ff1e585-61eb-44f7-b877-46c1eeb7c454</feedburner:origLink></item>
    <item>
      <title>Convert Month Integer into a Month Name in Asp.Net</title>
      <description>&lt;h2&gt;turn 12 into 'December', 1 into 'January', etc.&lt;/h2&gt;
Simple line of code that makes life easy, it's even culture sensitive:
&lt;pre class="prettyprint"&gt;CultureInfo.CurrentCulture.DateTimeFormat
  .GetMonthName(intMonth);&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ob-9ugAdEmCXYal3BwCwWlFERBg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ob-9ugAdEmCXYal3BwCwWlFERBg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ob-9ugAdEmCXYal3BwCwWlFERBg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ob-9ugAdEmCXYal3BwCwWlFERBg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/naspinski?a=ygcGmF7Lj3A:sE2fOH59wYE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/naspinski?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/naspinski?a=ygcGmF7Lj3A:sE2fOH59wYE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/naspinski?i=ygcGmF7Lj3A:sE2fOH59wYE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/naspinski?a=ygcGmF7Lj3A:sE2fOH59wYE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/naspinski?i=ygcGmF7Lj3A:sE2fOH59wYE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/naspinski/~4/ygcGmF7Lj3A" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/naspinski/~3/ygcGmF7Lj3A/post.aspx</link>
      <author>naspinski</author>
      <comments>http://naspinski.net/post/Convert-Month-Integer-into-a-Month-Name-in-AspNet.aspx#comment</comments>
      <guid isPermaLink="false">http://naspinski.net/post.aspx?id=23b431ca-2347-4629-885d-6d7f1db2e480</guid>
      <pubDate>Thu, 17 Sep 2009 06:38:00 -0500</pubDate>
      <category>asp.net</category>
      <category>c#</category>
      <dc:publisher>naspinski</dc:publisher>
      <pingback:server>http://naspinski.net/pingback.axd</pingback:server>
      <pingback:target>http://naspinski.net/post.aspx?id=23b431ca-2347-4629-885d-6d7f1db2e480</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://naspinski.net/trackback.axd?id=23b431ca-2347-4629-885d-6d7f1db2e480</trackback:ping>
      <wfw:comment>http://naspinski.net/post/Convert-Month-Integer-into-a-Month-Name-in-AspNet.aspx#comment</wfw:comment>
      <wfw:commentRss>http://naspinski.net/syndication.axd?post=23b431ca-2347-4629-885d-6d7f1db2e480</wfw:commentRss>
    <feedburner:origLink>http://naspinski.net/post.aspx?id=23b431ca-2347-4629-885d-6d7f1db2e480</feedburner:origLink></item>
    <item>
      <title>Translating an Asp.NET site to Another Language Using .resx Files</title>
      <description>&lt;h2&gt;translating the .resx files to another language does not require any programming knowledge at all&lt;/h2&gt;

&lt;div&gt;
    Translating a properly globalized site in asp.net is simple and does not require the least bit of development knowledge... which is good, 
    because most developers I know barely have a grasp on their own [non-programming] language.
    This post should probably come after one on how to globalize your asp.net site, but I have an urgent need to explain how to do this first 
    (someone has volunteered to translate my open-source project &lt;a href="http://slick-ticket.com"&gt;Slick-Ticket&lt;/a&gt; to Spanish; thanks Victor!).
&lt;/div&gt;
&lt;br /&gt;
&lt;h4&gt;how does it work?&lt;/h4&gt;
&lt;div&gt;
    First of all, you should understand how this actually works, it may make it easier.
    Every page in a site has access to two types of resources (when I say resources here I am referring to strings, words or phrases): &lt;b&gt;Global Resources&lt;/b&gt;, and &lt;b&gt;Local Resources&lt;/b&gt; - these resources are held in &lt;b&gt;.resx&lt;/b&gt; files.
    &lt;b&gt;Global Resources&lt;/b&gt; are commonly used resources that all pages can see, and &lt;b&gt;Local Resources&lt;/b&gt; are resources that only a specific page can see.
    Each language/dialect has a specific code, which you can see here: &lt;a href="http://msdn.microsoft.com/en-us/library/ms533052(VS.85).aspx"&gt;Language Codes&lt;/a&gt; (you can see your default setting in your browser options, for IE, check Tools-&gt;Internet Options-&gt;Languages).
    Each page then has place-holders where it will substitute a specific language's resource if it is available.
    For example, if your browser's settings are set to Mexican Spanish (es-mx) and you are trying to view &lt;b&gt;example.aspx&lt;/b&gt;, asp.net will look for the &lt;b&gt;example.aspx.es-mx.resx&lt;/b&gt; file to fill in the text.
    If that file is not present, it will default back down to the default resx file which is &lt;b&gt;example.aspx.resx&lt;/b&gt;.
&lt;/div&gt;
&lt;br /&gt;
&lt;h4&gt;simple enough, how do I edit them?&lt;/h4&gt;
&lt;div&gt;
    &lt;img src="http://naspinski.net/image.axd?picture=resx_.png" alt="" /&gt;
    .resx files are just xml files, and can be edited in a text editor, but that can be very confusing and error prone as there is no syntax and/or structure checking.
    I recommend you use a program such as Visual Studio if you have it, or &lt;a href="http://www.microsoft.com/express/vwd/"&gt;Visual Web Developer (free)&lt;/a&gt; if you don't; alternatively, there are a few more options such as Mads Kristensen's
    &lt;a href="http://madskristensen.net/post/A-NET-resource-editor-application-for-resx-files.aspx"&gt;.NET resource editor application for .resx files&lt;/a&gt;, and &lt;a href="http://sourceforge.net/projects/resx/"&gt;Resx Editor&lt;/a&gt; on SourceForge.
    &lt;br /&gt;&lt;br /&gt;
    Once you have your editor, just go through and edit the column to be translated, and *ONLY* that one column, messing with the key/name field will break the translation completely.
&lt;/div&gt;
&lt;div style="clear:both"&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;h4&gt;folder structure&lt;/h4&gt;
&lt;div&gt;
    &lt;img src="http://naspinski.net/image.axd?picture=resx_folders.png" alt="" /&gt;
    This is the only part that might be a bit confusing.  
    Each folder that contains .aspx, .ascx, etc. files (files with words to be translated) will have their own &lt;b&gt;App_LocalResources&lt;/b&gt; folder, and in this folder, there will be a corresponding &lt;b&gt;*.aspx.resx&lt;/b&gt; file for each file.
    Also, any additional languages will be held in a folder with the language abbreviation, and a corresponding file for each file as well.
    For example, in the &lt;b&gt;admin&lt;/b&gt; folder shown here, you can see that it has it's own &lt;b&gt;App_LocalResources&lt;/b&gt; folder, in that folder is each corresponding default (in blue) .resx file and there is a folder for each additional language.
    Here you see the &lt;b&gt;en-us&lt;/b&gt; folder (English - United States) and in that you see the same .resx file, but each is named &lt;b&gt;*.en-us.resx&lt;/b&gt; (in red) instead of just &lt;b&gt;*.resx&lt;/b&gt;.
    This is the same for each folder, so you will see many &lt;b&gt;App_LocalResources&lt;/b&gt; folders.  
    If you forget to change any of them, it will be pretty apparent when you run the program and a lot of stuff does not match up.
    &lt;br /&gt;&lt;br /&gt;
    Then there is the &lt;b&gt;App_GlobalResources&lt;/b&gt; folder in the root;
    the same thing applies here, just do the same and translate the value column.
    &lt;br /&gt;&lt;br /&gt;
    Remember that asp.net will first look for your desired language, and use it if it is there, if not, it will drop down to the default.
&lt;/div&gt;
&lt;br /&gt;
&lt;h4&gt;a couple notes&lt;/h4&gt;
&lt;div&gt;
    A couple things to keep in mind, if you see any html markup (not the best practice, but sometimes necessary), remember this:
    &lt;p class="prettyprint"&gt;&lt;span class="kwd"&gt;&amp;lt;do_not_edit&amp;gt;&lt;/span&gt;edit_this&lt;span class="kwd"&gt;&amp;lt;/do_not_edit&amp;gt;&lt;/span&gt;&lt;/p&gt;
    &lt;br /&gt;
    Also, if you see brackets with a number in them (i.e. &lt;b&gt;{0}&lt;/b&gt;, &lt;b&gt;{2}&lt;/b&gt;, etc.), be sure to leave those, the developer is using that as a word placeholder.
&lt;/div&gt;
&lt;br /&gt;
&lt;h4&gt;that's it&lt;/h4&gt;
&lt;div&gt;
    Now, as long as it is available, your users will see your site in their preferred language.
    It is a bit tedious to translate, but much easier than walking through the markup and screwing things up that way.
    Also, if a resx file is ever missing, it will not error out, it will simply use the default for any parts that are not available.
&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-8ed8gz1rjaptDxVslZ4q91WgBU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-8ed8gz1rjaptDxVslZ4q91WgBU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/-8ed8gz1rjaptDxVslZ4q91WgBU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-8ed8gz1rjaptDxVslZ4q91WgBU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/naspinski?a=euzCqkiO5pc:ls3Jo6jQ_YQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/naspinski?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/naspinski?a=euzCqkiO5pc:ls3Jo6jQ_YQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/naspinski?i=euzCqkiO5pc:ls3Jo6jQ_YQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/naspinski?a=euzCqkiO5pc:ls3Jo6jQ_YQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/naspinski?i=euzCqkiO5pc:ls3Jo6jQ_YQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/naspinski/~4/euzCqkiO5pc" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/naspinski/~3/euzCqkiO5pc/post.aspx</link>
      <author>naspinski</author>
      <comments>http://naspinski.net/post/Translating-an-AspNET-site-to-Another-Language-Using-resx-Files.aspx#comment</comments>
      <guid isPermaLink="false">http://naspinski.net/post.aspx?id=71187ca4-1e9c-4eaa-9ce7-80487a4d64ea</guid>
      <pubDate>Tue, 15 Sep 2009 10:35:00 -0500</pubDate>
      <category>asp.net</category>
      <category>tutorials</category>
      <dc:publisher>naspinski</dc:publisher>
      <pingback:server>http://naspinski.net/pingback.axd</pingback:server>
      <pingback:target>http://naspinski.net/post.aspx?id=71187ca4-1e9c-4eaa-9ce7-80487a4d64ea</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://naspinski.net/trackback.axd?id=71187ca4-1e9c-4eaa-9ce7-80487a4d64ea</trackback:ping>
      <wfw:comment>http://naspinski.net/post/Translating-an-AspNET-site-to-Another-Language-Using-resx-Files.aspx#comment</wfw:comment>
      <wfw:commentRss>http://naspinski.net/syndication.axd?post=71187ca4-1e9c-4eaa-9ce7-80487a4d64ea</wfw:commentRss>
    <feedburner:origLink>http://naspinski.net/post.aspx?id=71187ca4-1e9c-4eaa-9ce7-80487a4d64ea</feedburner:origLink></item>
    <item>
      <title>Drop all tables in a database with simple SQL</title>
      <description>&lt;h2&gt;sometimes you just want to drop the tables and leave the DB&lt;/h2&gt;
This is a very simple and useful bit of SQL shown to me by a colleague.  
Often times, there are a bunch of foreign keys preventing you form just dorpping tables - it can be a pain to figure out what order you need to delete them in in order to do it correctly.
Just run this until all the tables are gone:
&lt;pre class="prettyprint"&gt;exec sp_MSforeachtable "DROP TABLE ? PRINT '? dropped' "&lt;/pre&gt;
&lt;br /&gt;
You may see errors, that is normal (you are simply being notified of the foreign keys and such.
All the tables will be gone when you no longer see and error messages.
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/DI0_lme939iyk1-n_TNHhsR8WAk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DI0_lme939iyk1-n_TNHhsR8WAk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/DI0_lme939iyk1-n_TNHhsR8WAk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DI0_lme939iyk1-n_TNHhsR8WAk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/naspinski?a=_cnQr9k7dE4:GKU4l4ezPNg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/naspinski?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/naspinski?a=_cnQr9k7dE4:GKU4l4ezPNg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/naspinski?i=_cnQr9k7dE4:GKU4l4ezPNg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/naspinski?a=_cnQr9k7dE4:GKU4l4ezPNg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/naspinski?i=_cnQr9k7dE4:GKU4l4ezPNg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/naspinski/~4/_cnQr9k7dE4" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/naspinski/~3/_cnQr9k7dE4/post.aspx</link>
      <author>naspinski</author>
      <comments>http://naspinski.net/post/Drop-all-tables-in-a-database-with-simple-SQL.aspx#comment</comments>
      <guid isPermaLink="false">http://naspinski.net/post.aspx?id=c6ed5749-17ab-49d4-9821-5e138b948199</guid>
      <pubDate>Sat, 12 Sep 2009 06:31:00 -0500</pubDate>
      <category>sql</category>
      <dc:publisher>naspinski</dc:publisher>
      <pingback:server>http://naspinski.net/pingback.axd</pingback:server>
      <pingback:target>http://naspinski.net/post.aspx?id=c6ed5749-17ab-49d4-9821-5e138b948199</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://naspinski.net/trackback.axd?id=c6ed5749-17ab-49d4-9821-5e138b948199</trackback:ping>
      <wfw:comment>http://naspinski.net/post/Drop-all-tables-in-a-database-with-simple-SQL.aspx#comment</wfw:comment>
      <wfw:commentRss>http://naspinski.net/syndication.axd?post=c6ed5749-17ab-49d4-9821-5e138b948199</wfw:commentRss>
    <feedburner:origLink>http://naspinski.net/post.aspx?id=c6ed5749-17ab-49d4-9821-5e138b948199</feedburner:origLink></item>
    <item>
      <title>'System.Web.UI.WebControls.ListItem' in Assembly 'System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' is not marked as serializable</title>
      <description>&lt;h2&gt;Error drove me nuts... simple solution&lt;/h2&gt;
&lt;div&gt;
  You get this error when you are trying to Bind a &lt;b&gt;DropDownList&lt;/b&gt; in a &lt;b&gt;GridView&lt;/b&gt;, but the problem is that you are using the wrong property to bind it...
&lt;/div&gt;
&lt;br /&gt;
&lt;h5&gt;instead of:&lt;/h5&gt;
&lt;pre class="prettyprint"&gt;
SelectedItem='&amp;lt;%# Bind("some_value") %&amp;gt;'
&lt;/pre&gt;
&lt;br /&gt;
&lt;h5&gt;use this:&lt;/h5&gt;
&lt;pre class="prettyprint"&gt;
SelectedValue='&amp;lt;%# Bind("some_value") %&amp;gt;'
&lt;/pre&gt;
&lt;br /&gt;
&lt;div&gt;
Simple, but easy to overlook.
&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/WOPXZCwHHUJaGQmvZsTLNg_xcMY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/WOPXZCwHHUJaGQmvZsTLNg_xcMY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/WOPXZCwHHUJaGQmvZsTLNg_xcMY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/WOPXZCwHHUJaGQmvZsTLNg_xcMY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/naspinski?a=aq_CFFwKt78:Vr8acG_4WP8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/naspinski?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/naspinski?a=aq_CFFwKt78:Vr8acG_4WP8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/naspinski?i=aq_CFFwKt78:Vr8acG_4WP8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/naspinski?a=aq_CFFwKt78:Vr8acG_4WP8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/naspinski?i=aq_CFFwKt78:Vr8acG_4WP8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/naspinski/~4/aq_CFFwKt78" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/naspinski/~3/aq_CFFwKt78/post.aspx</link>
      <author>naspinski</author>
      <comments>http://naspinski.net/post/SystemWebUIWebControlsListItem-in-Assembly-SystemWeb2c-Version3d20002c-Culture3dneutral2c-PublicKeyToken3db03f5f7f11d50a3a-is-not-marked-as-serializable.aspx#comment</comments>
      <guid isPermaLink="false">http://naspinski.net/post.aspx?id=73d74a0f-3c6f-4778-8ba4-7da6b524b550</guid>
      <pubDate>Tue, 08 Sep 2009 06:28:00 -0500</pubDate>
      <category>asp.net</category>
      <dc:publisher>naspinski</dc:publisher>
      <pingback:server>http://naspinski.net/pingback.axd</pingback:server>
      <pingback:target>http://naspinski.net/post.aspx?id=73d74a0f-3c6f-4778-8ba4-7da6b524b550</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://naspinski.net/trackback.axd?id=73d74a0f-3c6f-4778-8ba4-7da6b524b550</trackback:ping>
      <wfw:comment>http://naspinski.net/post/SystemWebUIWebControlsListItem-in-Assembly-SystemWeb2c-Version3d20002c-Culture3dneutral2c-PublicKeyToken3db03f5f7f11d50a3a-is-not-marked-as-serializable.aspx#comment</wfw:comment>
      <wfw:commentRss>http://naspinski.net/syndication.axd?post=73d74a0f-3c6f-4778-8ba4-7da6b524b550</wfw:commentRss>
    <feedburner:origLink>http://naspinski.net/post.aspx?id=73d74a0f-3c6f-4778-8ba4-7da6b524b550</feedburner:origLink></item>
    <item>
      <title>No more comments</title>
      <description>&lt;h2&gt;Back from my month long vacation and I made a decision due to the amount of garbage in my inbox:&lt;/h2&gt;

I hate to do it, but until I can get some better spam filtering software for BlogEngine, I am turning off comments - the spam levels are just getting ridiculous and wasting too much of my time.  If you need to get a hold of me, there is always the &lt;a href="contact.aspx"&gt;contact page&lt;/a&gt;.
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-_RAlykGQdGpIwX1Va4QmoM3vb4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-_RAlykGQdGpIwX1Va4QmoM3vb4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/-_RAlykGQdGpIwX1Va4QmoM3vb4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-_RAlykGQdGpIwX1Va4QmoM3vb4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/naspinski?a=mYRk-5JwYGY:t02Ia-nmKqM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/naspinski?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/naspinski?a=mYRk-5JwYGY:t02Ia-nmKqM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/naspinski?i=mYRk-5JwYGY:t02Ia-nmKqM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/naspinski?a=mYRk-5JwYGY:t02Ia-nmKqM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/naspinski?i=mYRk-5JwYGY:t02Ia-nmKqM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/naspinski/~4/mYRk-5JwYGY" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/naspinski/~3/mYRk-5JwYGY/post.aspx</link>
      <author>naspinski</author>
      <comments>http://naspinski.net/post/No-more-comments.aspx#comment</comments>
      <guid isPermaLink="false">http://naspinski.net/post.aspx?id=2ba31e61-8fc2-4e4f-b5ea-af44fa6ee3f0</guid>
      <pubDate>Tue, 25 Aug 2009 08:10:00 -0500</pubDate>
      <category>other</category>
      <dc:publisher>naspinski</dc:publisher>
      <pingback:server>http://naspinski.net/pingback.axd</pingback:server>
      <pingback:target>http://naspinski.net/post.aspx?id=2ba31e61-8fc2-4e4f-b5ea-af44fa6ee3f0</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://naspinski.net/trackback.axd?id=2ba31e61-8fc2-4e4f-b5ea-af44fa6ee3f0</trackback:ping>
      <wfw:comment>http://naspinski.net/post/No-more-comments.aspx#comment</wfw:comment>
      <wfw:commentRss>http://naspinski.net/syndication.axd?post=2ba31e61-8fc2-4e4f-b5ea-af44fa6ee3f0</wfw:commentRss>
    <feedburner:origLink>http://naspinski.net/post.aspx?id=2ba31e61-8fc2-4e4f-b5ea-af44fa6ee3f0</feedburner:origLink></item>
    <item>
      <title>FormFields for ASP.net - New Open Source Project</title>
      <description>&lt;h2&gt;transform and simplify your markup by allowing inclusion of form validation, uniform display, Linq-to-SQL integration and databinding with minimal effort&lt;/h2&gt;
    &lt;div&gt;
        ASP.net forms are already simple, there are many tools such as DetailsView, ListView, etc. that can make our lives easier, but sometimes they just won't do. In those cases, we have to resort to writing repititous code for forms, that is what &lt;a href="http://formfields.naspinski.net"&gt;FormFields&lt;/a&gt; was developed for. 
        Writing markup over and over for things such as validation, regular expressions, dropdownlist databinding, etc gets old really fast, so I developed a way to simplify it as much as possible.
        &lt;br /&gt;&lt;br /&gt;
        Take for example a date entry field.  You have your TextBox, then the CompareValidator to make sure it's a valid date, then a Mask to limit the user's input, a RequiredFieldValidator to make sure they enter something, a WaterMarkExtender to guide the user and finally a CalendarExtender to make input easier.
    &lt;/div&gt;
    &lt;br /&gt;
    &lt;div&gt;
        &lt;img src="http://naspinski.net/image.axd?picture=ff_calendar.png" alt="" /&gt;
        Now this is great stuff for a UI, and not too hard to write, but when you have to do more and more entry fields such as SSN, phone number, a dropdown, then a CheckBoxList; 
        building forms can quickly become cumbersome and hard to understand, become incredibly tedious and turn into a ton of markup.
        &lt;br /&gt;&lt;br /&gt;
        This is the markup required to do everything mentioned above:
        &lt;p class="prettyprint"&gt;
&amp;lt;&lt;span class="kwd"&gt;div&lt;/span&gt; class=&lt;span class="str"&gt;"form-field"&lt;/span&gt;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;h3&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;span class="kwd"&gt;asp:RequiredFieldValidator&lt;/span&gt; ID=&lt;span class="str"&gt;"rfvSchoolDate"&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt;
        ControlToValidate=&lt;span class="str"&gt;"txtSchoolDate"&lt;/span&gt; ErrorMessage=&lt;span class="str"&gt;"Required"&lt;/span&gt; CssClass=&lt;span class="str"&gt;"right validate"&lt;/span&gt;
        Display=&lt;span class="str"&gt;"Dynamic"&lt;/span&gt; /&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;span class="kwd"&gt;asp:CompareValidator&lt;/span&gt; ID=&lt;span class="str"&gt;"cvSchoolDate"&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt; 
        ControlToValidate=&lt;span class="str"&gt;"txtSchoolDate"&lt;/span&gt; ErrorMessage=&lt;span class="str"&gt;"Invalid Date"&lt;/span&gt; CssClass=&lt;span class="str"&gt;"right validate"&lt;/span&gt; 
        Display=&lt;span class="str"&gt;"Dynamic"&lt;/span&gt; Operator=&lt;span class="str"&gt;"DataTypeCheck"&lt;/span&gt; Type=&lt;span class="str"&gt;"Date"&lt;/span&gt; /&amp;gt;&lt;br /&gt;
        &amp;nbsp;&amp;nbsp;&amp;nbsp; School Date&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;/&lt;span class="kwd"&gt;h3&lt;/span&gt;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;&lt;span class="kwd"&gt;asp:TextBox&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt; ID=&lt;span class="str"&gt;"txtSchoolDate"&lt;/span&gt; CssClass=&lt;span class="str"&gt;"full"&lt;/span&gt; /&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;&lt;span class="kwd"&gt;ajax:MaskedEditExtender&lt;/span&gt; ID=&lt;span class="str"&gt;"meeSchoolDate"&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt; Mask=&lt;span class="str"&gt;"99/99/9999"&lt;/span&gt; 
    MaskType=&lt;span class="str"&gt;"Date"&lt;/span&gt; TargetControlID=&lt;span class="str"&gt;"txtSchoolDate"&lt;/span&gt; /&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;&lt;span class="kwd"&gt;ajax:calendarextender&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt; id=&lt;span class="str"&gt;"calSchoolDate"&lt;/span&gt;  
    TargetControlID=&lt;span class="str"&gt;"txtSchoolDate"&lt;/span&gt; Format=&lt;span class="str"&gt;"MM/dd/yyyy"&lt;/span&gt; PopupPosition=&lt;span class="str"&gt;"TopLeft"&lt;/span&gt; /&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;&lt;span class="kwd"&gt;ajax:TextBoxWatermarkExtender&lt;/span&gt; ID=&lt;span class="str"&gt;"tweSchoolDate"&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt; 
    TargetControlID=&lt;span class="str"&gt;"txtSchoolDate"&lt;/span&gt; WatermarkCssClass=&lt;span class="str"&gt;"light full"&lt;/span&gt; WatermarkText=&lt;span class="str"&gt;"mm/dd/yyyy"&lt;/span&gt; /&amp;gt;&lt;br /&gt;
&amp;lt;/&lt;span class="kwd"&gt;div&lt;/span&gt;&amp;gt;
        &lt;/p&gt;
        &lt;br /&gt;
        All of that can be replaced with just this:
        &lt;p class="prettyprint"&gt;
            &amp;lt;&lt;span class="kwd"&gt;formField:textBox&lt;/span&gt; ID=&lt;span class="str"&gt;"tb_SchoolDate"&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt; Type=&lt;span class="str"&gt;"Date"&lt;/span&gt; Required=&lt;span class="str"&gt;"True"&lt;/span&gt;
            Title=&lt;span class="str"&gt;"School Date"&lt;/span&gt; /&amp;gt;
        &lt;/p&gt;
        &lt;br /&gt;
        Yes, it is just that easy.
        The payout and styling is all inherited from a single class and is easy to customize while making for uniform displays.
        There are multiple different presets for it including &lt;b&gt;SocialSecurityNumber&lt;/b&gt;, &lt;b&gt;Date&lt;/b&gt;, &lt;b&gt;ZipCode&lt;/b&gt;, and a 
        &lt;a href="http://formfields.naspinski.net/doc.aspx#textbox"&gt;ton more&lt;/a&gt;.  
        &lt;br /&gt;&lt;br /&gt;
        This is not only for &lt;a href="http://formfields.naspinski.net/textbox.aspx"&gt;TextBox&lt;/a&gt; fields, it also works for 
        &lt;a href="http://formfields.naspinski.net/checkbox.aspx"&gt;CheckBox&lt;/a&gt;,
        &lt;a href="http://formfields.naspinski.net/dropdownlist.aspx"&gt;DropDownList&lt;/a&gt;,
        &lt;a href="http://formfields.naspinski.net/listbox.aspx"&gt;ListBox&lt;/a&gt;, 
        &lt;a href="http://formfields.naspinski.net/checkboxlist.aspx"&gt;CheckBoxList&lt;/a&gt; and
        &lt;a href="http://formfields.naspinski.net/radiobuttonlist.aspx"&gt;RadioButtonList&lt;/a&gt;. 
        And it not only formats everything the same and takes care of validation (anything that is not automated can be easily added) but it also takes care of databinding as well.
        Instead of making a datasource, adding an initial entry, binding it to the data and adding a RequiredFieldValidator, you can simply do this:
        &lt;p class="prettyprint"&gt;
&amp;lt;&lt;span class="kwd"&gt;formField:dropDownList&lt;/span&gt; ID=&lt;span class="str"&gt;"ddl"&lt;/span&gt; runat=&lt;span class="str"&gt;"server"&lt;/span&gt; Title=&lt;span class="str"&gt;"Category"&lt;/span&gt; L2STableName=&lt;span class="str"&gt;"categories"&lt;/span&gt; Required=&lt;span class="str"&gt;"True"&lt;/span&gt; /&amp;gt;
        &lt;/p&gt;
        &lt;br /&gt;
        No DataSource needed, it is all taken care of 
        &lt;a href="http://formfields.naspinski.net/dropdownlist.aspx"&gt;within the control itself&lt;/a&gt; (this is using Linq-to-SQL and the defaults).
    &lt;/div&gt;
    &lt;br /&gt;
    &lt;h4&gt;documentation and download&lt;/h4&gt;
    &lt;div&gt;
        I just wanted to give a quick overview of what it does, I have it fully documented and have more examples here: &lt;a href="http://formfields.naspinski.net"&gt;http://formfields.naspinski.net&lt;/a&gt; and it is available for download from &lt;a href="http://formfields.codeplex.com"&gt;CodePlex&lt;/a&gt;.
        I hope some people get some use out of this and I would love if people would want to jump in and add new features.
    &lt;/div&gt;
    &lt;br /&gt;
    &lt;h4&gt;stuff I still want it to do&lt;/h4&gt;
    &lt;div&gt;
        It does not render in the designer, and you can't put them into the toolbox - I do not know how to do this just yet, I would love for someone to jump in and help out on this one!
    &lt;/div&gt;
    &lt;br /&gt;
    &lt;div&gt;
        I am taking a much needed 30 day vacation, so no new posts/updates will be happening for a while, but I will be right back to advancing this project when I get back.
    &lt;/div&gt;
&lt;br /&gt;

&lt;a rev="vote-for" href="http://dotnetshoutout.com/FormFields-for-ASPnet-New-Open-Source-Project"&gt;&lt;img alt="Shout it" src="http://dotnetshoutout.com/image.axd?url=http%3A%2F%2Fnaspinski.net%2Fpost%2FFormFields-for-ASPnet---New-Open-Source-Project.aspx" style="border:0px"/&gt;&lt;/a&gt;

&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fnaspinski.net%2fpost%2fFormFields-for-ASPnet---New-Open-Source-Project.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fnaspinski.net%2fpost%2fFormFields-for-ASPnet---New-Open-Source-Project.aspx&amp;border=003366&amp;bgcolor=003366&amp;cfgcolor=003366&amp;cbgcolor=FFFFFF" border="0" alt="kick it on DotNetKicks.com" /&gt;&lt;/a&gt;


&lt;script type="text/javascript"&gt;var dzone_url = 'http://naspinski.net/post/FormFields-for-ASPnet---New-Open-Source-Project.aspx';&lt;/script&gt;&lt;script type="text/javascript"&gt;var dzone_style = '2';&lt;/script&gt;
&lt;script language="javascript" src="http://widgets.dzone.com/links/widgets/zoneit.js"&gt;&lt;/script&gt; 


&lt;script type="text/javascript" src="http://www.reddit.com/button.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;reddit_url='http://www.reddit.com/r/dotnet/comments/90yta/formfields_for_aspnet_new_open_source_project/'&lt;/script&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Ecv9Ju1qZLEtyZIhlfeh80FraHI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Ecv9Ju1qZLEtyZIhlfeh80FraHI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Ecv9Ju1qZLEtyZIhlfeh80FraHI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Ecv9Ju1qZLEtyZIhlfeh80FraHI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/naspinski?a=e-y0onJ6SV0:wSpPkSFDvWg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/naspinski?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/naspinski?a=e-y0onJ6SV0:wSpPkSFDvWg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/naspinski?i=e-y0onJ6SV0:wSpPkSFDvWg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/naspinski?a=e-y0onJ6SV0:wSpPkSFDvWg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/naspinski?i=e-y0onJ6SV0:wSpPkSFDvWg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/naspinski/~4/e-y0onJ6SV0" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/naspinski/~3/e-y0onJ6SV0/post.aspx</link>
      <author>naspinski</author>
      <comments>http://naspinski.net/post/FormFields-for-ASPnet---New-Open-Source-Project.aspx#comment</comments>
      <guid isPermaLink="false">http://naspinski.net/post.aspx?id=0e02b145-859c-43a7-ac48-992e03d537c9</guid>
      <pubDate>Mon, 13 Jul 2009 14:19:00 -0500</pubDate>
      <category>asp.net</category>
      <category>c#</category>
      <category>my projects</category>
      <dc:publisher>naspinski</dc:publisher>
      <pingback:server>http://naspinski.net/pingback.axd</pingback:server>
      <pingback:target>http://naspinski.net/post.aspx?id=0e02b145-859c-43a7-ac48-992e03d537c9</pingback:target>
      <slash:comments>6</slash:comments>
      <trackback:ping>http://naspinski.net/trackback.axd?id=0e02b145-859c-43a7-ac48-992e03d537c9</trackback:ping>
      <wfw:comment>http://naspinski.net/post/FormFields-for-ASPnet---New-Open-Source-Project.aspx#comment</wfw:comment>
      <wfw:commentRss>http://naspinski.net/syndication.axd?post=0e02b145-859c-43a7-ac48-992e03d537c9</wfw:commentRss>
    <feedburner:origLink>http://naspinski.net/post.aspx?id=0e02b145-859c-43a7-ac48-992e03d537c9</feedburner:origLink></item>
    <item>
      <title>IQueryableSearch is now up on CodePlex</title>
      <description>&lt;h2&gt;another open-source project released into the wild&lt;/h2&gt;
&lt;div&gt;
  My &lt;a href="http://naspinski.net/post/Universal-IQueryable-Search-Version-2-with-Reflection.aspx"&gt;IQueryableSearch&lt;/a&gt; class has been infinitely useful to me and saved me a ton of time. I have also gotten some good feedback on how useful it is. For those of you that don't know what it does (probably most of you) it is simply a universal search for Linq IQueryable collections; a way to search a bunch of fields/properties on a bunch of objects with one simple interface, like google for your own objects.
&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;With that said, I decided to put it up on &lt;a href="http://iqueryablesearch.codeplex.com/"&gt;CodePlex&lt;/a&gt; to better track &lt;a href="http://iqueryablesearch.codeplex.com/SourceControl/ListDownloadableCommits.aspx"&gt;source code&lt;/a&gt; and &lt;a href="http://iqueryablesearch.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=29306"&gt;releases&lt;/a&gt;; as just posting them as zips on my blog is a pain when the code is being updated.  I am also hoping maybe some of you might want to critique/fix/add to my code to make it better - any interest is appreciated.  As always, I hope it helps.
&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
  To make it easier it is now available in a dll which you can simply put into your &lt;b&gt;bin&lt;/b&gt;, add a:
&lt;pre class="prettyprint"&gt;using Naspinski.IQueryableSearch;&lt;/pre&gt;&lt;br /&gt; And you are ready to start using it.&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
  On a somewhat related note, I am getting close to releasing another large open-source project I have been working on for quite some time that should prove to save huge amounts of time for ASP.net programmer - stay tuned!
&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/AY5RrbC67vXRfSdhmXHnL5LmXLo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AY5RrbC67vXRfSdhmXHnL5LmXLo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/AY5RrbC67vXRfSdhmXHnL5LmXLo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AY5RrbC67vXRfSdhmXHnL5LmXLo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/naspinski?a=FpnQjsOkuG8:83DQOG8cBgY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/naspinski?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/naspinski?a=FpnQjsOkuG8:83DQOG8cBgY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/naspinski?i=FpnQjsOkuG8:83DQOG8cBgY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/naspinski?a=FpnQjsOkuG8:83DQOG8cBgY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/naspinski?i=FpnQjsOkuG8:83DQOG8cBgY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/naspinski/~4/FpnQjsOkuG8" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/naspinski/~3/FpnQjsOkuG8/post.aspx</link>
      <author>naspinski</author>
      <comments>http://naspinski.net/post/IQueryableSearch-is-now-up-on-CodePlex.aspx#comment</comments>
      <guid isPermaLink="false">http://naspinski.net/post.aspx?id=d901b0be-9432-47af-b906-d757cddb9de2</guid>
      <pubDate>Fri, 26 Jun 2009 14:19:00 -0500</pubDate>
      <category>c#</category>
      <category>linq</category>
      <category>my projects</category>
      <category>steal some code</category>
      <dc:publisher>naspinski</dc:publisher>
      <pingback:server>http://naspinski.net/pingback.axd</pingback:server>
      <pingback:target>http://naspinski.net/post.aspx?id=d901b0be-9432-47af-b906-d757cddb9de2</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://naspinski.net/trackback.axd?id=d901b0be-9432-47af-b906-d757cddb9de2</trackback:ping>
      <wfw:comment>http://naspinski.net/post/IQueryableSearch-is-now-up-on-CodePlex.aspx#comment</wfw:comment>
      <wfw:commentRss>http://naspinski.net/syndication.axd?post=d901b0be-9432-47af-b906-d757cddb9de2</wfw:commentRss>
    <feedburner:origLink>http://naspinski.net/post.aspx?id=d901b0be-9432-47af-b906-d757cddb9de2</feedburner:origLink></item>
    <item>
      <title>MCPD 3.5 Certified</title>
      <description>&lt;h2&gt;took the 70-567 upgrade test today&lt;/h2&gt;
&lt;div&gt;
  The test was suprisingly easy compared to the tests required to get the MCPD 2.0. As long as you have been using 3.5 features such as Linq, some WCF, etc. you should be fine in taking it. A lot of the questions weren't even 3.5 specific, many were simple 2.0 stuff that should be trivial if you already have the MCPD.
&lt;br /&gt;&lt;br /&gt;
  There were a couple tricky ones that confused me a bit.  Whitout getting into too much detail, I will say that there are questions with more than one correct answer, though one may not be as 'ideal' as another, so here you would have to pick the 'most correct' answer.  Also, there was a definite typo that threw me off... remember Microsoft: 'asymmetric encryption' is one-way, I think you got mixed up there.
&lt;br /&gt;&lt;br /&gt;Oh yeah, I passed :)
&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/REyQm3ZiLtQsYQoGHLXvTug2Shs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/REyQm3ZiLtQsYQoGHLXvTug2Shs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/REyQm3ZiLtQsYQoGHLXvTug2Shs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/REyQm3ZiLtQsYQoGHLXvTug2Shs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/naspinski?a=e2FWcNTKv7g:uP42XcHQN_k:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/naspinski?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/naspinski?a=e2FWcNTKv7g:uP42XcHQN_k:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/naspinski?i=e2FWcNTKv7g:uP42XcHQN_k:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/naspinski?a=e2FWcNTKv7g:uP42XcHQN_k:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/naspinski?i=e2FWcNTKv7g:uP42XcHQN_k:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/naspinski/~4/e2FWcNTKv7g" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/naspinski/~3/e2FWcNTKv7g/post.aspx</link>
      <author>naspinski</author>
      <comments>http://naspinski.net/post/MCPD-35-Certified.aspx#comment</comments>
      <guid isPermaLink="false">http://naspinski.net/post.aspx?id=cf84c225-2f26-452a-9be2-7814392e7e73</guid>
      <pubDate>Thu, 18 Jun 2009 09:03:00 -0500</pubDate>
      <category>asp.net</category>
      <dc:publisher>naspinski</dc:publisher>
      <pingback:server>http://naspinski.net/pingback.axd</pingback:server>
      <pingback:target>http://naspinski.net/post.aspx?id=cf84c225-2f26-452a-9be2-7814392e7e73</pingback:target>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://naspinski.net/trackback.axd?id=cf84c225-2f26-452a-9be2-7814392e7e73</trackback:ping>
      <wfw:comment>http://naspinski.net/post/MCPD-35-Certified.aspx#comment</wfw:comment>
      <wfw:commentRss>http://naspinski.net/syndication.axd?post=cf84c225-2f26-452a-9be2-7814392e7e73</wfw:commentRss>
    <feedburner:origLink>http://naspinski.net/post.aspx?id=cf84c225-2f26-452a-9be2-7814392e7e73</feedburner:origLink></item>
    <item>
      <title>Asp.Net vs php : speed comparison</title>
      <description>&lt;h2&gt;why is the myth that php is faster than Asp.Net so prevalent?  Asp.Net is faster than php, here are the facts&lt;/h2&gt;
    &lt;div&gt;
        So many times I have heard php pushers claim that php is so much faster than Asp.Net and that Asp.Net is clunky and slow.
        The most annoying part is that everything I have read (that is not factless opinion), and I mean &lt;b&gt;everything&lt;/b&gt;, says that this is wrong; but for some reason, this myth is widely accepted.
        It has become a religious argument that ignores the facts.
        &lt;br /&gt;&lt;br /&gt;
        Instead of arguing this point over and over, I decided to put it here so I can simply refer people to it to set them straight.
        Keep in mind that I wrote strictly php for over 4 years, it is a great and powerful language that I have nothing against. 
        Not to mention you should not choose your development language by speed, but by what works for you (more on that later).
        This post is not there to pick sides (though I am now Asp.Net biased of course), just to show the facts.
        &lt;br /&gt;&lt;br /&gt;
        &lt;h4&gt;compiled vs interpreted languages&lt;/h4&gt;
        First of all, at the very base of the argument it has to be realized that the two languages are very different.
        Asp.Net is an optimized and compiled language, meaning &lt;a href="http://www.vanguardsw.com/dphelp4/dph00296.htm"&gt;code you enter is reduced to a set of machine-specific instructions before being saved as an executable file.&lt;/a&gt;
        Even if you do not explicitly compile your code before you deploy it, it compiles the first time it is run, then after that it runs as compiled code.
        Php on the other hand is an interpreted language, meaning it is saved as the code your write and run directly from that code.
        It is widely accepted and proved many times over that &lt;a href="http://www.vanguardsw.com/dphelp4/dph00296.htm"&gt;Compiled programs generally run faster than interpreted ones because interpreted programs must be reduced to machine instructions at runtime&lt;/a&gt;.
        Here is a quote from Wikipedia that shows just how much faster they can be:
        &lt;a href="http://en.wikipedia.org/wiki/Compiled_language"&gt;"A program translated by a compiler tends to be much faster than an interpreter executing the same program: even a 10:1 ratio is not uncommon. The mixed solution's efficiency is typically somewhere in between." &lt;/a&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        &lt;h4&gt;the numbers&lt;/h4&gt;
        Now that the theory of why it is faster is out of the way, let's get to some cold hard numbers, so we can put this debate to rest.
        &lt;br /&gt;&lt;br /&gt;
        The following charts and benchmarks are taken from &lt;a href="http://www.wrensoft.com/zoom/benchmarks.html"&gt;WrenSoft&lt;/a&gt; and quite simply show the difference.
        Please follow the link if you want an in-depth description of the test.
        &lt;br /&gt;&lt;br /&gt;
        This first graph shows the time taken to generate and display results for a search a small website.  
        &lt;br /&gt;
        &lt;a href="http://naspinski.net/image.axd?picture=php_v_asp1.png"&gt;&lt;img src="http://naspinski.net/image.axd?picture=php_v_asp1.png" alt="" style="float:none;width:450px;" /&gt;&lt;/a&gt;
        &lt;br /&gt;&lt;br /&gt;
        As you can see, the average time for the php site: 0.1500 seconds, the time for Asp.Net: 0.0150 seconds... that is a HUGE difference, the php search takes 10 times as long!
        The next one does the same with a larger site, and the results are not much different. 
        &lt;br /&gt;
        &lt;a href="http://naspinski.net/image.axd?picture=php_v_asp2.png"&gt;&lt;img src="http://naspinski.net/image.axd?picture=php_v_asp2.png" alt="" style="float:none;width:450px;" /&gt;&lt;/a&gt;
        &lt;br /&gt;&lt;br /&gt;
        Php took an average of 1.0097 seconds while the Asp.Net run took 0.0810 seconds; php took more than 12 times as long to run, the numbers are there.
        &lt;br /&gt;&lt;br /&gt;
        Now those tests were run with basically the same code translated into different languages, so there isn't much ammunition in the 'it was coded poorly' argument.
        But, there is still the [valid] argument that the above tests were run on a Windows machine, and since .Net is native to Windows, it was an unfair trial, so now we will look into the statistics running on Linux, so php will have the 'home-field' advantage; not to mention, c# will be running on Mono.
        &lt;br /&gt;&lt;br /&gt;
        These benchmarks are taken from &lt;a href="http://shootout.alioth.debian.org/"&gt;shootout.alioth.debian.org&lt;/a&gt; who has numerous benchmarks for all sorts of languages and is a fantastic resource.
        For these tests, I am choosing to compare both vs the baseline of 'Clean' so it is easier to compare; here are the results:
        &lt;br /&gt;&lt;br /&gt;
        &lt;img src="http://naspinski.net/image.axd?picture=php_v_asp3.png" alt="" style="float:none;" /&gt;
        &lt;br /&gt;&lt;br /&gt;
        &lt;br /&gt;
        &lt;img src="http://naspinski.net/image.axd?picture=php_v_asp4.png" alt="" style="float:none;" /&gt;
        &lt;br /&gt;&lt;br /&gt;
        As you can see, even on Linux, .Net is faster across the board; often many times faster.
        The only other tests I can think would be interesting to run is to compare scalability and such; I would be very interested if anyone has benchmarks for such things.
        &lt;br /&gt;&lt;br /&gt;
        &lt;h4&gt;can we finally focus on what matters?&lt;/h4&gt;
        Go ahead and google &lt;a href="http://www.google.com/search?q=asp.net+vs+php+speed&amp;rls=com.microsoft:*&amp;ie=UTF-8&amp;oe=UTF-8&amp;startIndex=&amp;startPage=1"&gt;asp.net vs php speed&lt;/a&gt; and you will see that almost all of the posts scream that php is faster, but you will not find any links or evidence backing this up.
        The whole point of this for me is not even really to show that that Asp.Net is faster, I already knew that; it is to possibly help curb the ridiculous assertions that it is faster.
        It has basically turned into a religious argument, not a fact based one and that is just silly to me.  
        As in many other things, it seems as if enough people yell something long and hard enough, it becomes 'truth' - it simply is not.
        &lt;br /&gt;&lt;br /&gt;
        Developing in php is fine, a huge number of amazing applications and websites are written in it by much more skilled coders than myself.
        That said, you shouldn't choose your language on speed, as development preference is much more important; use php if you feel it is a superior language, but don't push bad information.  Most importantly focus on what matters: &lt;b&gt;code in what language you can do your best work in&lt;/b&gt;, you don't need to justify it to anyone else, prove that it is faster/better or convert anyone else to using you language - you have better things to do.
        &lt;br /&gt;&lt;br /&gt;
        But... Asp.Net is faster than php.  Period.
&lt;br /&gt;&lt;br /&gt;

&lt;a rev="vote-for" href="http://dotnetshoutout.com/AspNet-vs-php-Speed-Comparison"&gt;&lt;img alt="Shout it" src="http://dotnetshoutout.com/image.axd?url=http%3A%2F%2Fnaspinski.net%2Fpost%2FAspNet-vs-php--speed-comparison.aspx" style="border:0px"/&gt;&lt;/a&gt;

&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fnaspinski.net%2fpost%2fAspNet-vs-php--speed-comparison.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fnaspinski.net%2fpost%2fAspNet-vs-php--speed-comparison.aspx&amp;border=003366&amp;bgcolor=003366&amp;cfgcolor=003366&amp;cbgcolor=FFFFFF" border="0" alt="kick it on DotNetKicks.com" /&gt;&lt;/a&gt;

&lt;script type="text/javascript"&gt;var dzone_style = '2';&lt;/script&gt;
&lt;script language="javascript" src="http://widgets.dzone.com/links/widgets/zoneit.js"&gt;&lt;/script&gt; 

    &lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Mlf8ES0x9Abz0Sms6BcYsnuOv9I/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Mlf8ES0x9Abz0Sms6BcYsnuOv9I/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Mlf8ES0x9Abz0Sms6BcYsnuOv9I/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Mlf8ES0x9Abz0Sms6BcYsnuOv9I/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/naspinski?a=n83_PxedM5o:HhYAcs1t2Qs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/naspinski?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/naspinski?a=n83_PxedM5o:HhYAcs1t2Qs:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/naspinski?i=n83_PxedM5o:HhYAcs1t2Qs:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/naspinski?a=n83_PxedM5o:HhYAcs1t2Qs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/naspinski?i=n83_PxedM5o:HhYAcs1t2Qs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/naspinski/~4/n83_PxedM5o" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/naspinski/~3/n83_PxedM5o/post.aspx</link>
      <author>naspinski</author>
      <comments>http://naspinski.net/post/AspNet-vs-php--speed-comparison.aspx#comment</comments>
      <guid isPermaLink="false">http://naspinski.net/post.aspx?id=4744f2da-7ca9-4b9a-bdd0-dc8f5a6d386d</guid>
      <pubDate>Sun, 14 Jun 2009 13:42:00 -0500</pubDate>
      <category>asp.net</category>
      <category>c#</category>
      <dc:publisher>naspinski</dc:publisher>
      <pingback:server>http://naspinski.net/pingback.axd</pingback:server>
      <pingback:target>http://naspinski.net/post.aspx?id=4744f2da-7ca9-4b9a-bdd0-dc8f5a6d386d</pingback:target>
      <slash:comments>40</slash:comments>
      <trackback:ping>http://naspinski.net/trackback.axd?id=4744f2da-7ca9-4b9a-bdd0-dc8f5a6d386d</trackback:ping>
      <wfw:comment>http://naspinski.net/post/AspNet-vs-php--speed-comparison.aspx#comment</wfw:comment>
      <wfw:commentRss>http://naspinski.net/syndication.axd?post=4744f2da-7ca9-4b9a-bdd0-dc8f5a6d386d</wfw:commentRss>
    <feedburner:origLink>http://naspinski.net/post.aspx?id=4744f2da-7ca9-4b9a-bdd0-dc8f5a6d386d</feedburner:origLink></item>
  </channel>
</rss>
