<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CU8HQnczfip7ImA9WhVUGEo.&quot;"><id>tag:blogger.com,1999:blog-4926735770070291800</id><updated>2012-05-24T12:37:13.986-03:00</updated><category term="resize" /><category term="logging" /><category term="XHQ" /><category term="web application" /><category term="Visual Studio" /><category term="Win32 API" /><category term="tools" /><category term="package" /><category term="text editor" /><category term="Castle Project" /><category term="batch processing" /><category term="development" /><category term="shopping" /><category term="robot" /><category term="Haversine" /><category term="UI" /><category term="XLSX" /><category term="T4" /><category term="Windows" /><category term="algorithms" /><category term="Apple" /><category term="upgrade" /><category term="service" /><category term="lyrics" /><category term="modern age" /><category term="ASP.NET" /><category term="Google Translator Toolkit" /><category term="CountIf" /><category term="webserver" /><category term="job" /><category term="Indie" /><category term="configuration" /><category term="physical exercise" /><category term="self-improvement" /><category term="immutable data structures" /><category term="Hudson" /><category term="Google Spreadsheet API" /><category term="iOS" /><category term="Apache" /><category term="code generation" /><category term="Parallels Desktop" /><category term="IBM" /><category term="StackOverflow" /><category term="SCM" /><category term="PUC-Rio" /><category term="table" /><category term="Compliments" /><category term="A*" /><category term="prime number" /><category term="CSS" /><category term="authentication" /><category term="IoC" /><category term="intro" /><category term="data model" /><category term="bitwise operators" /><category term="Microsoft Excel" /><category term="ordinary differential equation" /><category term="Web.config" /><category term="NHibernate Query Analyzer" /><category term="HPC" /><category term="F#" /><category term="memory" /><category term="MSBuild" /><category term="code snippet" /><category term="webservice" /><category term="Tomcat" /><category term="iPhone" /><category term="Firefox" /><category term="iTunes" /><category term="Excel Web App" /><category term="NuGet" /><category term="anniversary" /><category term="Transformations" /><category term="Magic mouse" /><category term="Dev-C++" /><category term="Eclipse" /><category term="NHibernate" /><category term="MediaMonkey" /><category term="WinRAR" /><category term="project" /><category term="tree" /><category term="svn" /><category term=".NET" /><category term="query language" /><category term="linked server" /><category term="critical path method" /><category term="answers" /><category term="reflection" /><category term="computer virus" /><category term="technology" /><category term="management UI" /><category term="coordinates" /><category term="priority queue" /><category term="Microsoft" /><category term="computer graphics" /><category term="territory" /><category term="hooks" /><category term="list" /><category term="Finite State Machine" /><category term="Xcode" /><category term="cluster" /><category term="English" /><category term="state transition diagram" /><category term="ProZ" /><category term="locale" /><category term="import" /><category term="value frequency" /><category term="tag" /><category term="jQuery UI" /><category term="template" /><category term="Oracle" /><category term="ResourceManager" /><category term="lifestyle" /><category term="tasks" /><category term="blob" /><category term="DFA" /><category term="system analyst" /><category term="bulk" /><category term="Mac OS" /><category term="membership" /><category term="virtual machine" /><category term="BSC" /><category term="productivity" /><category term="Applications" /><category term="image" /><category term="learning" /><category term="artificial intelligence" /><category term="playlist" /><category term="update" /><category term="row" /><category term="helpers" /><category term="repository" /><category term="hardware" /><category term="public contest" /><category term="customization" /><category term="paper" /><category term="flair" /><category term="embedded" /><category term="web project" /><category term="MiniLyrics" /><category term="photography" /><category term="Lyricator" /><category term="highlight" /><category term="fortran" /><category term="PLINQ" /><category term="counting" /><category term="compilers construction" /><category term="Localization" /><category term="gym" /><category term="batch renaming" /><category term="NPOI" /><category term="MP3" /><category term="COM automation" /><category term="music" /><category term="size" /><category term="VisualSVN Server" /><category term="oi" /><category term="Babylon" /><category term="Google" /><category term="resx" /><category term="Open Source" /><category term="properties" /><category term="queue" /><category term="PHP" /><category term="RavenDB" /><category term="IndieRockCafe" /><category term="MES" /><category term="data structures" /><category term="ExcelPackage" /><category term="ipod" /><category term="client server architecture" /><category term="battery life" /><category term="computer engineering bachelor's degree" /><category term="Brazil" /><category term="RtPM" /><category term="Paparazzi" /><category term="server" /><category term="log4net" /><category term="ID3" /><category term="OLPC" /><category term="Datepicker" /><category term="Liferay" /><category term="academic" /><category term="fitness center" /><category term="health" /><category term="questions" /><category term="Google Data API" /><category term="continuous integration" /><category term="installation" /><category term="architectural pattern" /><category term="SQL" /><category term="management system" /><category term="encoding" /><category term="gadgets" /><category term="C" /><category term="geocoder" /><category term="generation y" /><category term="buy" /><category term="Google Docs" /><category term="ASP.NET Chart" /><category term="quality of life" /><category term="video game" /><category term="time tracking" /><category term="column" /><category term="settings" /><category term="CPM" /><category term="SSMS" /><category term="Model-View-Presenter" /><category term="PIMS" /><category term="connection string" /><category term="Git" /><category term="iPhoto" /><category term="Apps" /><category term="society" /><category term="software engineering" /><category term="LinkedIn" /><category term="missing numbers" /><category term="family" /><category term="function" /><category term="shortcuts" /><category term="Mac" /><category term="repair" /><category term="nanotechnology" /><category term="link" /><category term="UFRJ" /><category term="character set" /><category term="Last.fm" /><category term="Chemtech" /><category term="NFA" /><category term="MPI" /><category term="backup" /><category term="OpenGL" /><category term="LINQ" /><category term="Petrobras" /><category term="jQuery" /><category term="threads" /><category term="select" /><category term="geotagging" /><category term="XSLT" /><category term="LIMS" /><category term="CRM" /><category term="retrospective" /><category term="attribute" /><category term="tips and tricks" /><category term="tracking" /><category term="sequence" /><category term="badge" /><category term="DLL" /><category term="URL" /><category term="MVP" /><category term="Mp3tag" /><category term="XML" /><category term="screen capture" /><category term="language" /><category term=".NET Framework" /><category term="Mac mini" /><category term="Blogger" /><category term="HQL" /><category term="thumbnail" /><category term="soapUI" /><category term="radio button" /><category term="user" /><category term="filter" /><category term="scan" /><category term="inversion of control" /><category term="portlet" /><category term="Automator" /><category term="Regex" /><category term="editor" /><category term="robot arm" /><category term="masters degree" /><category term="Google Analytics" /><category term="bar" /><category term="Excel table" /><category term="Mouse" /><category term="Mac OS 10.6.7" /><category term="software" /><category term="color" /><category term="time saver" /><category term="Razor" /><category term="HTML" /><category term="GPS" /><category term="methods" /><category term="Right" /><category term="screenshot" /><category term="OOXML" /><category term="JavaScript" /><category term="automation" /><category term="TortoiseSVN" /><category term="IIS Express" /><category term="entreprise management" /><category term="chemsite" /><category term="Google Maps" /><category term="Excel chart" /><category term="MVC" /><category term="Portuguese" /><category term="revision control" /><category term="WebGrid" /><category term="enterprise portal" /><category term="SQL Server" /><category term="resource files" /><category term="Sublime Text" /><category term="graph" /><category term="export" /><category term="RAM" /><category term="photos" /><category term="code editor" /><category term="PlayStation" /><category term="ASP.NET MVC" /><category term="XLS" /><category term="BBCode" /><category term="extension methods" /><category term="C++" /><category term="compression" /><category term="distributed database" /><category term="IndX" /><category term="download" /><category term="spreadsheet" /><category term="dynamic views" /><category term="Siemens" /><category term="Objective-C" /><category term="top-down approach" /><category term="internet" /><category term="hide" /><category term="job interview" /><category term="Rock" /><category term="Get Lyrical" /><category term="crawler" /><category term="file" /><category term="traversal" /><category term="database" /><category term="Windows 7" /><category term="L10n" /><category term="sharing" /><category term="parallel programming" /><category term="quicksort" /><category term="stored procedure" /><category term="translation" /><category term="wirelles keyboard" /><category term="programming" /><category term="thread safety" /><category term="games" /><category term="ERP" /><category term="first" /><category term="website" /><category term="Java" /><category term="API" /><category term="NoSQL" /><category term="Google App Engine" /><category term="Snow Leopard" /><category term="C#" /><category term="GitHub" /><category term="binary search" /><category term="upload" /><category term="dictionary" /><category term="Exif" /><category term="parser" /><category term="circular queue" /><category term="data" /><category term="metadata" /><category term="batch file" /><category term="password" /><category term="profile" /><title>Leniel Macaferi's blog</title><subtitle type="html">Everything software engineering with a strong background in computer engineering and computer science.

&lt;p align="right"&gt;&lt;a href="http://www.leniel.net/p/consultant.html"&gt;Consultant&lt;/a&gt; | &lt;a href="http://www.proz.com/translator/849397"&gt;Translator&lt;/a&gt; | &lt;a href="http://www.leniel.net/p/contact.html"&gt;Contact&lt;/a&gt;&lt;/p&gt;</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.leniel.net/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://www.leniel.net/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default?start-index=16&amp;max-results=15&amp;redirect=false&amp;v=2" /><author><name>Leniel Macaferi</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-iFmNclBdT5Y/AAAAAAAAAAI/AAAAAAAABfw/6QE8faPUWOg/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>128</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>15</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/leniel" /><feedburner:info uri="leniel" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-nc-sa/3.0/" /><logo>http://creativecommons.org/images/public/somerights20.gif</logo><entry gd:etag="W/&quot;C0ENQX0zeip7ImA9WhVUGEo.&quot;"><id>tag:blogger.com,1999:blog-4926735770070291800.post-4371692459035639121</id><published>2012-05-24T00:32:00.001-03:00</published><updated>2012-05-24T12:01:30.382-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-05-24T12:01:30.382-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="password" /><category scheme="http://www.blogger.com/atom/ns#" term="filter" /><category scheme="http://www.blogger.com/atom/ns#" term="user" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET MVC" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="authentication" /><category scheme="http://www.blogger.com/atom/ns#" term="attribute" /><category scheme="http://www.blogger.com/atom/ns#" term="membership" /><title>User Password Expired filter attribute in ASP.NET MVC</title><content type="html">&lt;p&gt;A recent set of requirements I’ve been playing with deals with passwords. This one specifically handles password expiration.&lt;/p&gt;  &lt;p&gt;Given that I’m working with &lt;a href="http://www.asp.net/mvc" target="_blank"&gt;ASP.NET MVC&lt;/a&gt; I know I can rest assured that there’s some great (read &lt;em&gt;awesome&lt;/em&gt;) way of implementing a given requirement. This is exactly what happened and I want to show you how to have a clean and beautiful solution to this problem.&lt;/p&gt;  &lt;p&gt;So my client’s requirement is the following:&lt;/p&gt;  &lt;p align="center"&gt;&lt;strong&gt;Passwords should expire in 45 days.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I’m currently using the &lt;a href="http://www.hanselman.com/blog/IntroducingSystemWebProvidersASPNETUniversalProvidersForSessionMembershipRolesAndUserProfileOnSQLCompactAndSQLAzure.aspx" target="_blank"&gt;default ASP.NET membership provider&lt;/a&gt;. It gives you a database schema ready to manage users and roles. You just have to use &lt;a href="http://msdn.microsoft.com/en-us/library/yy40ytx0.aspx" target="_blank"&gt;ASP.NET Configuration Tool&lt;/a&gt; to create &lt;a href="http://msdn.microsoft.com/en-us/library/ssa0wsyf.aspx" target="_blank"&gt;Roles and Users&lt;/a&gt;, decorate your Controllers/Actions with the &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.mvc.authorizeattribute.aspx" target="_blank"&gt;Authorize&lt;/a&gt; attribute and you’re good to go most of the time. The default membership provider allows a fast project start – no doubt – but as always there’s something that must be done according to the infinitude of possible requirements that change project by project. One of these not contemplated things is a setting in the default provider for handling user’s password expiration. We have to roll our own code to manage this.&lt;/p&gt;  &lt;p&gt;My friend Google told me that some folks have already done some work related to this and as always I borrow some of their code and adapt it to my specific case/technology.&lt;/p&gt;  &lt;p&gt;First I created a &lt;font size="2" face="Courier New"&gt;PasswordExpiredAttribute&lt;/font&gt; that derives from/extends the &lt;font size="2" face="Courier New"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.web.mvc.authorizeattribute.aspx" target="_blank"&gt;AuthorizeAttribute&lt;/a&gt;&lt;/font&gt;. Here’s its code:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="background: white; color: blue"&gt;public class &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;PasswordExpiredAttribute &lt;/span&gt;&lt;span style="background: white; color: black"&gt;: &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;AuthorizeAttribute
&lt;/span&gt;&lt;span style="background: white; color: black"&gt;{
    &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;private static readonly int &lt;/span&gt;&lt;span style="background: white; color: black"&gt;PasswordExpiresInDays =
&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;int&lt;/span&gt;&lt;span style="background: white; color: black"&gt;.Parse(&lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;ConfigurationManager&lt;/span&gt;&lt;span style="background: white; color: black"&gt;.AppSettings[&lt;/span&gt;&lt;span style="background: white; color: maroon"&gt;&amp;quot;PasswordExpiresInDays&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: black"&gt;]);

    &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;public override void &lt;/span&gt;&lt;span style="background: white; color: black"&gt;OnAuthorization(&lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;AuthorizationContext &lt;/span&gt;&lt;span style="background: white; color: black"&gt;filterContext)
    {
        &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;IPrincipal &lt;/span&gt;&lt;span style="background: white; color: black"&gt;user = filterContext.HttpContext.User;
           
        &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;if&lt;/span&gt;&lt;span style="background: white; color: black"&gt;(user != &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;null &lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;amp;&amp;amp; user.Identity.IsAuthenticated)
        {
            &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;MembershipUser &lt;/span&gt;&lt;span style="background: white; color: black"&gt;membershipUser = &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;Membership&lt;/span&gt;&lt;span style="background: white; color: black"&gt;.GetUser();

            &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;TimeSpan &lt;/span&gt;&lt;span style="background: white; color: black"&gt;ts = &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;DateTime&lt;/span&gt;&lt;span style="background: white; color: black"&gt;.Today - membershipUser.LastPasswordChangedDate;

            &lt;/span&gt;&lt;span style="background: white; color: green"&gt;// If true, that means the user's password expired
            // Let's force him to change his password before using the application&lt;br /&gt;            &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;if &lt;/span&gt;&lt;span style="background: white; color: black"&gt;(ts.TotalDays &amp;gt; PasswordExpiresInDays)
            {
                filterContext.HttpContext.Response.Redirect(
                    &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;string&lt;/span&gt;&lt;span style="background: white; color: black"&gt;.Format(&lt;/span&gt;&lt;span style="background: white; color: maroon"&gt;&amp;quot;~/{0}/{1}?{2}&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: black"&gt;, &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;MVC&lt;/span&gt;&lt;span style="background: white; color: black"&gt;.Account.Name, &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;MVC&lt;/span&gt;&lt;span style="background: white; color: black"&gt;.Account.ActionNames.ChangePassword,
                    &lt;/span&gt;&lt;span style="background: white; color: maroon"&gt;&amp;quot;reason=expired&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: black"&gt;));

            }
        }

        &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;base&lt;/span&gt;&lt;span style="background: white; color: black"&gt;.OnAuthorization(filterContext);
    }
}&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;As you see, the code goes inside the &lt;font size="2" face="Courier New"&gt;OnAuthorization&lt;/font&gt; overridable method. I get the &lt;font size="2" face="Courier New"&gt;PasswordExpiresInDays&lt;/font&gt; setting from the &lt;font size="2" face="Courier New"&gt;Web.config&lt;/font&gt; &lt;span style="background: white; color: blue"&gt;&lt;font size="2" face="Courier New"&gt;&lt;span style="background: white; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;appSettings&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;&lt;/span&gt; section. This gives an easy way to change the requirement in the future without the need of recompiling the whole app.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;appSettings&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;&amp;gt;
&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;add &lt;/span&gt;&lt;span style="background: white; color: red"&gt;key&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;PasswordExpiresInDays&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red"&gt;value&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;45&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;/&amp;gt;
&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;appSettings&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;The code explains itself but let’s go through it:&lt;/p&gt;

&lt;p&gt;1 - If the &lt;font size="2" face="Courier New"&gt;User&lt;/font&gt; is authenticated, let’s get his membership data; 

  &lt;br /&gt;2 - A &lt;font size="2" face="Courier New"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.timespan%28v=vs.81%29.aspx" target="_blank"&gt;TimeSpan&lt;/a&gt;&lt;/font&gt; is useful for getting the difference in days between Today and the last time the user changed his password ( &lt;font size="2" face="Courier New"&gt;LastPasswordChangedDate&lt;/font&gt; ) 

  &lt;br /&gt;3 - Check if the &lt;font size="2" face="Courier New"&gt;TimeSpan.TotalDays&lt;/font&gt; is greater than the &lt;font size="2" face="Courier New"&gt;PasswordExpiresInDays&lt;/font&gt; setting we got from the &lt;font size="2" face="Courier New"&gt;Web.config&lt;/font&gt; file. If true the user must change his password and we redirect him to the &lt;font size="2" face="Courier New"&gt;ChangePassword&lt;/font&gt; view.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note 1&lt;/strong&gt;: I’m using &lt;a href="http://t4mvc.codeplex.com/" target="_blank"&gt;T4MVC&lt;/a&gt; to retrieve the &lt;font size="2" face="Courier New"&gt;Controller&lt;/font&gt; and &lt;font size="2" face="Courier New"&gt;Action&lt;/font&gt; names in the code above. You should take a look at it! Really…&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note 2&lt;/strong&gt;: See that &lt;span style="background: white; color: maroon"&gt;&lt;font size="2" face="Courier New"&gt;&lt;span style="background: white; color: maroon"&gt;&amp;quot;reason=expired&amp;quot;&lt;/span&gt;&lt;/font&gt; &lt;/span&gt;in the response redirect URL? I’m using this &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.httprequest.querystring.aspx" target="_blank"&gt;querystring&lt;/a&gt; as a route parameter inside the &lt;font size="2" face="Courier New"&gt;ChangePassword&lt;/font&gt; action method to display a message to the user informing him that he’s being asked to change the password because it has expired.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: gray"&gt;/// &amp;lt;summary&amp;gt;
/// &lt;/span&gt;&lt;span style="background: white; color: green"&gt;This allows the logged on user to change his password.
&lt;/span&gt;&lt;span style="background: white; color: gray"&gt;/// &amp;lt;/summary&amp;gt;
&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;public virtual &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;ActionResult &lt;/span&gt;&lt;span style="background: white; color: black"&gt;ChangePassword(&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;string &lt;/span&gt;&lt;span style="background: white; color: black"&gt;reason)
{
    &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;viewModel = &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;new &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;ChangePasswordViewModel&lt;/span&gt;&lt;span style="background: white; color: black"&gt;();

    &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;if &lt;/span&gt;&lt;span style="background: white; color: black"&gt;(reason != &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;null&lt;/span&gt;&lt;span style="background: white; color: black"&gt;)
    {&lt;br /&gt;&lt;/span&gt;&lt;span style="background: white; color: black"&gt;        ShowMessage(Infrastructure.Notification.&lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;MessageType&lt;/span&gt;&lt;span style="background: white; color: black"&gt;.Warning, &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;Localization&lt;/span&gt;&lt;span style="background: white; color: black"&gt;.PasswordExpired, &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;true&lt;/span&gt;&lt;span style="background: white; color: black"&gt;);
    }

    &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;return &lt;/span&gt;&lt;span style="background: white; color: black"&gt;View(viewModel);
}&lt;/span&gt;&lt;/pre&gt;


&lt;p&gt;By the way: I use &lt;a href="http://stackoverflow.com/a/8173770/114029" target="_blank"&gt;MvcNotification infrastructure&lt;/a&gt; by &lt;em&gt;Martijn Boland &lt;/em&gt;to display beautiful messages to the user.&lt;/p&gt;

&lt;p&gt;OK, getting back to the main point… now it’s just a matter of applying the &lt;font size="2" face="Courier New"&gt;PasswordExpiredAttribute&lt;/font&gt; filter to every controller of the app but the &lt;font size="2" face="Courier New"&gt;AccountController&lt;/font&gt;. With ASP.NET MVC 3 it’s easy to apply a filter to every controller and action using &lt;a href="http://weblogs.asp.net/jgalloway/archive/2012/04/18/asp-net-mvc-authentication-global-authentication-and-allow-anonymous.aspx" target="_blank"&gt;GlobalFilters&lt;/a&gt;. Instead of going controller by controller to add this attribute we can just register it as a global filter in the &lt;font size="2" face="Courier New"&gt;Global.asax&lt;/font&gt; file:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: blue"&gt;public static void &lt;/span&gt;&lt;span style="background: white; color: black"&gt;RegisterGlobalFilters(&lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;GlobalFilterCollection &lt;/span&gt;&lt;span style="background: white; color: black"&gt;filters)
{
    filters.Add(&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;new &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;HandleErrorAttribute&lt;/span&gt;&lt;span style="background: white; color: black"&gt;());&lt;br /&gt;    &lt;span style="background: white; color: black"&gt;filters.Add(&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;new &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;AuthorizeAttribute&lt;/span&gt;&lt;span style="background: white; color: black"&gt;());&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background: white; color: black"&gt;    filters.Add(&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;new &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;PasswordExpiredAttribute&lt;/span&gt;&lt;span style="background: white; color: black"&gt;());
}&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Doing so the &lt;font size="2" face="Courier New"&gt;PasswordExpiredAttribute&lt;/font&gt; will be executed for every controller and action but there’s a problem with the above approach. Since it’s a global filter, it’ll be executed even for the &lt;font size="2" face="Courier New"&gt;AccountController&lt;/font&gt;. Remember: we don’t want it to be executed for the &lt;font size="2" face="Courier New"&gt;AccontController&lt;/font&gt;… How can we exclude a global filter from a single controller or action? To achieve this, there’s an awesome thing we can do: create a &lt;font size="2" face="Courier New"&gt;ExcludeFilterAttribut&lt;/font&gt;e and a &lt;font size="2" face="Courier New"&gt;ExcludeFilterProvider&lt;/font&gt;. WOW, ASP.NET MVC has a &lt;a href="http://haacked.com/archive/2011/04/25/conditional-filters.aspx" target="_blank"&gt;Filter Provider&lt;/a&gt; that gives us even more power when working with filters. Look here for the complete story: &lt;a href="http://blogs.microsoft.co.il/blogs/oric/archive/2011/10/28/exclude-a-filter.aspx" target="_blank"&gt;Exclude a Filter&lt;/a&gt; by Ori Calvo. I’ve uploaded the source code files here: &lt;a href="https://docs.google.com/open?id=0B4SVxswDPXtweHp4Nnh4a1hNcVE" target="_blank"&gt;ExcludeFilterAttribute.cs&lt;/a&gt; and &lt;a href="https://docs.google.com/open?id=0B4SVxswDPXtwaHNGb2t1UmFSVUE" target="_blank"&gt;ExcludeFilterProvider.cs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now it’s just a matter of decorating the &lt;font size="2" face="Courier New"&gt;AccountController&lt;/font&gt; with the &lt;font size="2" face="Courier New"&gt;ExcludeFilter&lt;/font&gt; attribute like this:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: black"&gt;[&lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;ExcludeFilter&lt;/span&gt;&lt;span style="background: white; color: black"&gt;(&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;typeof&lt;/span&gt;&lt;span style="background: white; color: black"&gt;(&lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;PasswordExpiredAttribute&lt;/span&gt;&lt;span style="background: white; color: black"&gt;))]
&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;public partial class &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;AccountController &lt;/span&gt;&lt;span style="background: white; color: black"&gt;: &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;BaseController&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="background: white; color: black"&gt;{&lt;br /&gt;   ...&lt;br /&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;The &lt;font size="2" face="Courier New"&gt;ExcludeFilter&lt;/font&gt; attribute explicitly tells the ASP.NET MVC runtime to ignore the &lt;font size="2" face="Courier New"&gt;PasswordExpiredAttribute&lt;/font&gt; for the &lt;font size="2" face="Courier New"&gt;AccountController&lt;/font&gt;.&lt;/p&gt;

&lt;p&gt;With this in place, once the logged in user tries to access any part of the site and his password is expired, he'll be redirected to the &lt;font size="2" face="Courier New"&gt;ChangePassword&lt;/font&gt; view and won't be allowed access to anywhere else in the site until he changes the password. This is great and the requirement is implemented.&lt;/p&gt;

&lt;p&gt;Of course in software there are multiple ways of doing the same thing. If you know of any better option, please share you knowledge in the comments.&lt;/p&gt;

&lt;p&gt;Hope it helps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bonus
    &lt;br /&gt;&lt;/strong&gt;While working on this requirement I posted a &lt;a href="http://stackoverflow.com/q/10728250/114029" target="_blank"&gt;question at StackOverflow&lt;/a&gt; regarding the use of &lt;font size="2" face="Courier New"&gt;Web.config&lt;/font&gt; settings as &lt;a href="http://en.wikipedia.org/wiki/Magic_string_%28programming%29" target="_blank"&gt;magic strings&lt;/a&gt;. I’ve found a nice way to let the code a little bit cleaner. So, if you want a nice way to access your &lt;font size="2" face="Courier New"&gt;Web.config&lt;/font&gt; app settings as properties with compile time checking and nice error handling, you can do as described here: &lt;a href="http://stackoverflow.com/a/10728917/114029" target="_blank"&gt;T4MVC for Web.config &amp;lt;appSettings&amp;gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is a much better/cleaner code IMO (see the &lt;font size="2" face="Courier New"&gt;AppSettings&lt;/font&gt; class that was automatically generated with the &lt;a href="http://www.leniel.net/2011/06/c-code-with-preprocessed-t4-templates.html" target="_blank"&gt;T4 template&lt;/a&gt;):&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: blue"&gt;public class &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;PasswordExpiredAttribute &lt;/span&gt;&lt;span style="background: white; color: black"&gt;: &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;AuthorizeAttribute
&lt;/span&gt;&lt;span style="background: white; color: black"&gt;{
    &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;public override void &lt;/span&gt;&lt;span style="background: white; color: black"&gt;OnAuthorization(&lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;AuthorizationContext &lt;/span&gt;&lt;span style="background: white; color: black"&gt;filterContext)
    {
        &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;IPrincipal &lt;/span&gt;&lt;span style="background: white; color: black"&gt;user = filterContext.HttpContext.User;

        &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;if &lt;/span&gt;&lt;span style="background: white; color: black"&gt;(user != &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;null &lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;amp;&amp;amp; user.Identity.IsAuthenticated)
        {
            &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;MembershipUser &lt;/span&gt;&lt;span style="background: white; color: black"&gt;membershipUser = &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;Membership&lt;/span&gt;&lt;span style="background: white; color: black"&gt;.GetUser();

            &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;TimeSpan &lt;/span&gt;&lt;span style="background: white; color: black"&gt;ts = &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;DateTime&lt;/span&gt;&lt;span style="background: white; color: black"&gt;.Today - membershipUser.LastPasswordChangedDate;

            &lt;/span&gt;&lt;span style="background: white; color: green"&gt;// If true, that means the user's password expired
            // Let's force him to change his password before using the system
            &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;if &lt;/span&gt;&lt;span style="background: white; color: black"&gt;(ts.TotalDays &amp;gt; &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;int&lt;/span&gt;&lt;span style="background: white; color: black"&gt;.Parse(&lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;AppSettings&lt;/span&gt;&lt;span style="background: white; color: black"&gt;.PasswordExpiresInDays))
            {
                filterContext.HttpContext.Response.Redirect(
                    &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;string&lt;/span&gt;&lt;span style="background: white; color: black"&gt;.Format(&lt;/span&gt;&lt;span style="background: white; color: maroon"&gt;&amp;quot;~/{0}/{1}?{2}&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: black"&gt;, &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;MVC&lt;/span&gt;&lt;span style="background: white; color: black"&gt;.SGAccount.Name, &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;MVC&lt;/span&gt;&lt;span style="background: white; color: black"&gt;.SGAccount.ActionNames.ChangePassword,
                    &lt;/span&gt;&lt;span style="background: white; color: maroon"&gt;&amp;quot;reason=expired&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: black"&gt;));

            }
        }

        &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;base&lt;/span&gt;&lt;span style="background: white; color: black"&gt;.OnAuthorization(filterContext);
    }
}&lt;/span&gt;&lt;/pre&gt;


&lt;p&gt;&lt;strong&gt;References:
    &lt;br /&gt;&lt;/strong&gt;&lt;a href="http://weblogs.asp.net/jgalloway/archive/2012/04/18/asp-net-mvc-authentication-global-authentication-and-allow-anonymous.aspx" target="_blank"&gt;ASP.NET MVC Authentication - Global Authentication and Allow Anonymous&lt;/a&gt; by &lt;em&gt;Jon Galloway&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://weblogs.asp.net/jgalloway/archive/2012/05/04/asp-net-mvc-authentication-customizing-authentication-and-authorization-the-right-way.aspx" target="_blank"&gt;ASP.NET MVC Authentication - Customizing Authentication and Authorization The Right Way&lt;/a&gt; by &lt;em&gt;Jon Galloway&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/oric/archive/2011/10/28/exclude-a-filter.aspx" target="_blank"&gt;Exclude a Filter&lt;/a&gt; by &lt;em&gt;Ori Calvo&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.hanselman.com/blog/IntroducingSystemWebProvidersASPNETUniversalProvidersForSessionMembershipRolesAndUserProfileOnSQLCompactAndSQLAzure.aspx" target="_blank"&gt;Introducing System.Web.Providers - ASP.NET Universal Providers for Session, Membership, Roles and User Profile on SQL Compact and SQL Azure&lt;/a&gt; by &lt;em&gt;Scott Hanselman&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://haacked.com/archive/2011/04/25/conditional-filters.aspx" target="_blank"&gt;Conditional Filters in ASP.NET MVC 3&lt;/a&gt; by &lt;em&gt;Phil Haack&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://t4mvc.codeplex.com/documentation" target="_blank"&gt;T4MVC&lt;/a&gt; by &lt;em&gt;David Ebbo&lt;/em&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4926735770070291800-4371692459035639121?l=www.leniel.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/nPn4W0gssLFNgNRIP5QkINJgsAs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nPn4W0gssLFNgNRIP5QkINJgsAs/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/nPn4W0gssLFNgNRIP5QkINJgsAs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nPn4W0gssLFNgNRIP5QkINJgsAs/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/leniel?a=Pea9XBRGsz4:IibNvgjMh6E:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=Pea9XBRGsz4:IibNvgjMh6E:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=Pea9XBRGsz4:IibNvgjMh6E:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=Pea9XBRGsz4:IibNvgjMh6E:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=Pea9XBRGsz4:IibNvgjMh6E:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=Pea9XBRGsz4:IibNvgjMh6E:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=Pea9XBRGsz4:IibNvgjMh6E:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=Pea9XBRGsz4:IibNvgjMh6E:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=Pea9XBRGsz4:IibNvgjMh6E:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=Pea9XBRGsz4:IibNvgjMh6E:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=Pea9XBRGsz4:IibNvgjMh6E:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=Pea9XBRGsz4:IibNvgjMh6E:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leniel/~4/Pea9XBRGsz4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.leniel.net/feeds/4371692459035639121/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.leniel.net/2012/05/user-password-expired-filter-aspnet-mvc.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/4371692459035639121?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/4371692459035639121?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/leniel/~3/Pea9XBRGsz4/user-password-expired-filter-aspnet-mvc.html" title="User Password Expired filter attribute in ASP.NET MVC" /><author><name>Leniel Macaferi</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-iFmNclBdT5Y/AAAAAAAAAAI/AAAAAAAABfw/6QE8faPUWOg/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.leniel.net/2012/05/user-password-expired-filter-aspnet-mvc.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak8MR3c7eyp7ImA9WhVWFEw.&quot;"><id>tag:blogger.com,1999:blog-4926735770070291800.post-6317008197755857104</id><published>2012-04-26T01:26:00.001-03:00</published><updated>2012-04-26T02:41:26.903-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-04-26T02:41:26.903-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="image" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET MVC" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="photos" /><category scheme="http://www.blogger.com/atom/ns#" term="thumbnail" /><category scheme="http://www.blogger.com/atom/ns#" term="resize" /><title>Resize image on the fly with ASP.NET MVC</title><content type="html">&lt;p&gt;I built a piece of code sometime ago and today I decided to optimize it.&lt;/p&gt;  &lt;p&gt;My use case is this: a user can upload some photos of his house for example. Image dimensions (height x width) are not restricted. The user can upload any photo as long as its size is less than or equal to 750 KB.&lt;/p&gt;  &lt;p&gt;Then, I have a listing page (&lt;font size="2" face="Courier New"&gt;Index.cshtml&lt;/font&gt;) that has a &lt;a href="http://www.leniel.net/2012/03/hide-webgrid-column-colorize-rows-value.html" target="_blank"&gt;WebGrid&lt;/a&gt;. The grid shows realties available for sell, rent, etc. In this grid I want to display just a &lt;a href="http://en.wikipedia.org/wiki/Thumbnail" target="_blank"&gt;thumbnail&lt;/a&gt; of a given photo (the first one I grab as per code bellow) for each realty. I placed a constraint such that the thumbnail dimensions must be 100x100 pixels. Of course one shouldn’t load the full size version of a photo just to show it on the grid. The grid has 10 rows per page and if the images are on the range of 500 KB, the load put on the user connection to transmit all those photos from the server to the client would be high: 10 x 500 KB ≃ 5 MB. This would be an unresponsive page! No doubt…&lt;/p&gt;  &lt;p&gt;Googling a little bit I stumbled upon something I didn’t know yet. It’s called &lt;font size="2" face="Courier New"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.web.helpers.webimage%28v=vs.99%29.aspx" target="_blank"&gt;WebImage&lt;/a&gt;&lt;/font&gt; and comes in &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.helpers%28v=vs.99%29.aspx" target="_blank"&gt;&lt;font size="2" face="Courier New"&gt;System.Web.Helpers&lt;/font&gt;&lt;/a&gt; just as the &lt;a href="http://www.leniel.net/2012/03/hide-webgrid-column-colorize-rows-value.html" target="_blank"&gt;WebGrid&lt;/a&gt; I discussed earlier. With this little kid on the block, one can have a controller “action” that does something like this:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="background: white; color: blue"&gt;public void &lt;/span&gt;&lt;span style="background: white; color: black"&gt;GetPhotoThumbnail(&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;int &lt;/span&gt;&lt;span style="background: white; color: black"&gt;realtyId)
{&lt;br /&gt;&lt;/span&gt;&lt;span style="background: white; color: green"&gt;    // Loading photos’ info from database for specific Realty...&lt;br /&gt;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;    var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;photos = DocumentSession.Query&amp;lt;&lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;File&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;gt;().Where(f =&amp;gt; f.RealtyId == realtyId);

    &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;if &lt;/span&gt;&lt;span style="background: white; color: black"&gt;(photos.Any())
    {
        &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;photo = photos.First();

        &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;new &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;WebImage&lt;/span&gt;&lt;span style="background: white; color: black"&gt;(photo.Path)
            .Resize(101, 101, &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;false&lt;/span&gt;&lt;span style="background: white; color: black"&gt;, &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;true&lt;/span&gt;&lt;span style="background: white; color: black"&gt;) &lt;/span&gt;&lt;span style="background: white; color: green"&gt;// Resizing the image to 100x100 px on the fly...
            &lt;/span&gt;&lt;span style="background: white; color: black"&gt;.Crop(1, 1) &lt;/span&gt;&lt;span style="background: white; color: green"&gt;// Cropping it to remove 1px border at top and left sides (bug in WebImage)
            &lt;/span&gt;&lt;span style="background: white; color: black"&gt;.Write();
    }

    &lt;/span&gt;&lt;span style="background: white; color: green"&gt;// Loading a default photo for realties that don't have a Photo
    &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;new &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;WebImage&lt;/span&gt;&lt;span style="background: white; color: black"&gt;(&lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;HostingEnvironment&lt;/span&gt;&lt;span style="background: white; color: black"&gt;.MapPath(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;@&amp;quot;~/Content/images/no-photo100x100.png&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: black"&gt;)).Write();
}&lt;/span&gt;&lt;/pre&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: black"&gt;&lt;font face="Arial"&gt;Calling the &lt;font size="2" face="Courier New"&gt;.Write()&lt;/font&gt; method does the magic. As you can see, I’m not saving the thumbnail in the disk, that is, a new image is generated on the fly/dynamically and sent to the user’s browser. Amazing…&lt;/font&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: black"&gt;&lt;font face="Arial"&gt;In a view using the &lt;a href="http://en.wikipedia.org/wiki/Microsoft_ASP.NET_Razor_view_engine" target="_blank"&gt;Razor&lt;/a&gt; syntax one would have something like this to display the photo:&lt;/font&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background: white; color: maroon"&gt;img &lt;/span&gt;&lt;span style="background: white; color: red"&gt;src&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&amp;quot;&lt;/span&gt;&lt;span style="background: yellow; color: black"&gt;@&lt;/span&gt;&lt;span style="background: white; color: black"&gt;Url.Action(&lt;/span&gt;&lt;span style="background: white; color: maroon"&gt;&amp;quot;GetPhotoThumbnail&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: black"&gt;, &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;new &lt;/span&gt;&lt;span style="background: white; color: black"&gt;{ realtyId = item.Id })&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red"&gt;width&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&amp;quot;100&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red"&gt;height&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&amp;quot;100&amp;quot;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: black"&gt;&lt;font face="Arial"&gt;Another useful variation/overload of the above action method is this one (even more dynamic):&lt;/font&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: blue"&gt;public void &lt;/span&gt;&lt;span style="background: white; color: black"&gt;GetPhotoThumbnail(&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;int &lt;/span&gt;&lt;span style="background: white; color: black"&gt;realtyId, &lt;span style="background: white; color: blue"&gt;int&lt;/span&gt; width, &lt;span style="background: white; color: blue"&gt;int &lt;/span&gt;height)
{
    &lt;/span&gt;&lt;span style="background: white; color: green"&gt;// Loading photos’ info from database for specific Realty...
    &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;photos = DocumentSession.Query&amp;lt;&lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;File&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;gt;().Where(f =&amp;gt; f.RealtyId == realtyId);

    &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;if &lt;/span&gt;&lt;span style="background: white; color: black"&gt;(photos.Any())
    {
        &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;photo = photos.First();

        &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;new &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;WebImage&lt;/span&gt;&lt;span style="background: white; color: black"&gt;(photo.Path)
            .Resize(width, height, &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;false&lt;/span&gt;&lt;span style="background: white; color: black"&gt;, &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;true&lt;/span&gt;&lt;span style="background: white; color: black"&gt;) &lt;/span&gt;&lt;span style="background: white; color: green"&gt;// Resizing the image to 100x100 px on the fly...
            &lt;/span&gt;&lt;span style="background: white; color: black"&gt;.Crop(1, 1) &lt;/span&gt;&lt;span style="background: white; color: green"&gt;// Cropping it to remove 1px border at top and left sides (bug in WebImage)
            &lt;/span&gt;&lt;span style="background: white; color: black"&gt;.Write();
    }

    &lt;/span&gt;&lt;span style="background: white; color: green"&gt;// Loading a default photo for realties that don't have a Photo
        &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;new &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;WebImage&lt;/span&gt;&lt;span style="background: white; color: black"&gt;(&lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;HostingEnvironment&lt;/span&gt;&lt;span style="background: white; color: black"&gt;.MapPath(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;@&amp;quot;~/Content/images/no-photo100x100.png&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: black"&gt;)).Write();
}&lt;/span&gt;&lt;/pre&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: black"&gt;&lt;font face="Arial"&gt;Then, in the view one would call the action passing the &lt;font size="2" face="Courier New"&gt;width&lt;/font&gt; and &lt;font size="2" face="Courier New"&gt;height&lt;/font&gt; variables as per requirement:&lt;/font&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background: white; color: maroon"&gt;img &lt;/span&gt;&lt;span style="background: white; color: red"&gt;src&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&amp;quot;&lt;/span&gt;&lt;span style="background: yellow; color: black"&gt;@&lt;/span&gt;&lt;span style="background: white; color: black"&gt;Url.Action(&lt;/span&gt;&lt;span style="background: white; color: maroon"&gt;&amp;quot;GetPhotoThumbnail&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: black"&gt;, &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;new &lt;/span&gt;&lt;span style="background: white; color: black"&gt;{ realtyId = item.Id, width = 100, height = 100 })&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: black"&gt;&lt;font face="Arial"&gt;There are a handful of available functions in a &lt;font size="2" face="Courier New"&gt;WebImage&lt;/font&gt;. You should really check them out.&lt;/font&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;You can find more insightful info about the &lt;font size="2" face="Courier New"&gt;WebImage&lt;/font&gt; class reading this post by Gunnar Peipman: &lt;a href="http://weblogs.asp.net/gunnarpeipman/archive/2010/10/15/asp-net-mvc-3-beta-simple-image-manipulations-using-webimage-helper.aspx" target="_blank"&gt;ASP.NET MVC 3 Beta: Simple image manipulations using WebImage helper&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Note: there really are better ways of handling this kind of situation (adding image caching, etc – see &lt;a href="http://imageresizing.net/" target="_blank"&gt;ImageResizer&lt;/a&gt;) but for the site I’m working on, the solution I show in this post is sufficient and pretty responsive right now.&lt;/p&gt;

&lt;p&gt;Hope it helps.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4926735770070291800-6317008197755857104?l=www.leniel.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/vsZULEEMfVhBFz-7wvn4GkLcwAw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vsZULEEMfVhBFz-7wvn4GkLcwAw/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/vsZULEEMfVhBFz-7wvn4GkLcwAw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vsZULEEMfVhBFz-7wvn4GkLcwAw/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/leniel?a=KMm8OxQbKw4:aYoIqqL8TOk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=KMm8OxQbKw4:aYoIqqL8TOk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=KMm8OxQbKw4:aYoIqqL8TOk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=KMm8OxQbKw4:aYoIqqL8TOk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=KMm8OxQbKw4:aYoIqqL8TOk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=KMm8OxQbKw4:aYoIqqL8TOk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=KMm8OxQbKw4:aYoIqqL8TOk:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=KMm8OxQbKw4:aYoIqqL8TOk:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=KMm8OxQbKw4:aYoIqqL8TOk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=KMm8OxQbKw4:aYoIqqL8TOk:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=KMm8OxQbKw4:aYoIqqL8TOk:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=KMm8OxQbKw4:aYoIqqL8TOk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leniel/~4/KMm8OxQbKw4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.leniel.net/feeds/6317008197755857104/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.leniel.net/2012/04/resize-img-on-fly-aspnet-webimage.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/6317008197755857104?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/6317008197755857104?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/leniel/~3/KMm8OxQbKw4/resize-img-on-fly-aspnet-webimage.html" title="Resize image on the fly with ASP.NET MVC" /><author><name>Leniel Macaferi</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-iFmNclBdT5Y/AAAAAAAAAAI/AAAAAAAABfw/6QE8faPUWOg/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://www.leniel.net/2012/04/resize-img-on-fly-aspnet-webimage.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEEEQngyfyp7ImA9WhVRFUk.&quot;"><id>tag:blogger.com,1999:blog-4926735770070291800.post-2611962134304062276</id><published>2012-03-23T19:29:00.001-03:00</published><updated>2012-03-23T20:50:03.697-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-23T20:50:03.697-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="highlight" /><category scheme="http://www.blogger.com/atom/ns#" term="color" /><category scheme="http://www.blogger.com/atom/ns#" term="column" /><category scheme="http://www.blogger.com/atom/ns#" term="row" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET MVC" /><category scheme="http://www.blogger.com/atom/ns#" term="CSS" /><category scheme="http://www.blogger.com/atom/ns#" term="UI" /><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript" /><category scheme="http://www.blogger.com/atom/ns#" term="WebGrid" /><category scheme="http://www.blogger.com/atom/ns#" term="hide" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="HTML" /><category scheme="http://www.blogger.com/atom/ns#" term="table" /><category scheme="http://www.blogger.com/atom/ns#" term="jQuery" /><title>Hide table column and colorize rows based on value with jQuery</title><content type="html">&lt;p&gt;This is a handy piece of code that I used last year in one of &lt;a href="http://www.leniel.net/2011/06/buy-fitness-center-management-software.html" target="_blank"&gt;my projects&lt;/a&gt;. I had scheduled to post it but it was just after I saw &lt;a href="http://stackoverflow.com/q/9419209/114029" target="_blank"&gt;this question&lt;/a&gt; at StackOverflow that I decided to write about it. So here it is…&lt;/p&gt;  &lt;p&gt;Let’s say you want a nice UI experience and to achieve that you wanna colorize/highlight a table row according to a given value present in a column of this row.    &lt;br /&gt;&lt;em&gt;This is a simple task when we use &lt;a href="http://jquery.com/" target="_blank"&gt;jQuery&lt;/a&gt;&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;I use the &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.helpers.webgrid%28v=vs.99%29.aspx" target="_blank"&gt;WebGrid&lt;/a&gt; that comes with &lt;a href="http://www.asp.net/mvc" target="_blank"&gt;ASP.NET MVC&lt;/a&gt; to display data on a web page using an HTML &lt;font size="2" face="Courier New"&gt;&amp;lt;table&amp;gt;&lt;/font&gt; element. It’s available in the namespace &lt;font size="2" face="Courier New"&gt;System.Web.Helpers&lt;/font&gt;. The approach described in this post is useful not only with the WebGrid but with any framework/language you use to output HTML code since the manipulation is done on the client side with jQuery.&lt;/p&gt;  &lt;p&gt;Take this screen as an example:&lt;/p&gt;  &lt;p align="center"&gt;&lt;a name="Figure1"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="HTML table with last column Active to be hidden displaying values Yes and No" border="0" alt="HTML table with last column Active to be hidden displaying values Yes and No" src="http://lh4.ggpht.com/-MZl2cfOda-o/T2z5Ry_MGZI/AAAAAAAABbg/xO4WS4UorZ4/WebGridHideColumnColorRowBefore%25255B7%25255D.png?imgmax=800" width="525" height="443" /&gt;&lt;/a&gt;Figure 1 - HTML table with last column Active to be hidden displaying values Yes and No&lt;/p&gt;  &lt;p&gt;We want hide the last column “&lt;strong&gt;Active&lt;/strong&gt;” and color the row which has a value Yes in this same column.&lt;/p&gt;  &lt;p&gt;The above statement can be accomplished with the following code: &lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="background: white; color: black"&gt;(&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;function &lt;/span&gt;&lt;span style="background: white; color: black"&gt;($)&lt;br /&gt;&lt;/span&gt;&lt;span style="background: white; color: black"&gt;{
    hideColumnColorRow = &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;function &lt;/span&gt;&lt;span style="background: white; color: black"&gt;(column)&lt;br /&gt;    {
        $(&lt;/span&gt;&lt;span style="background: white; color: maroon"&gt;'td:nth-child(' &lt;/span&gt;&lt;span style="background: white; color: black"&gt;+ column + &lt;/span&gt;&lt;span style="background: white; color: maroon"&gt;'),th:nth-child( ' &lt;/span&gt;&lt;span style="background: white; color: black"&gt;+ column + &lt;/span&gt;&lt;span style="background: white; color: maroon"&gt;')'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;).hide();

        $(&lt;/span&gt;&lt;span style="background: white; color: maroon"&gt;'tr'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;).find(&lt;/span&gt;&lt;span style="background: white; color: maroon"&gt;'td:nth-child(' &lt;/span&gt;&lt;span style="background: white; color: black"&gt;+ column + &lt;/span&gt;&lt;span style="background: white; color: maroon"&gt;'):contains(Yes)'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;).parent().css(&lt;/span&gt;&lt;span style="background: white; color: maroon"&gt;'backgroundColor'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;, &lt;/span&gt;&lt;span style="background: white; color: maroon"&gt;'LightGreen'&lt;/span&gt;&lt;span style="background: white; color: black"&gt;); &lt;span style="background: white; color: green"&gt;// Could be an hexadecimal value as #EE3B3B &lt;/span&gt;
    };&lt;/span&gt;&lt;/pre&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: black"&gt;})(jQuery);&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;The &lt;font size="2" face="Courier New"&gt;hideColumnColorRow&lt;/font&gt; function* takes the column number as a parameter. It hides the column &lt;font face="Courier New"&gt;&amp;lt;td&amp;gt;&lt;/font&gt; and its header &lt;font size="2" face="Courier New"&gt;&amp;lt;th&amp;gt;&lt;/font&gt; using jQuery’s supper useful &lt;a href="http://api.jquery.com/nth-child-selector/" target="_blank"&gt;nth-child selector&lt;/a&gt;. Then for each table row &lt;font size="2" face="Courier New"&gt;&amp;lt;tr&amp;gt;&lt;/font&gt; it traverses the row’s columns and looks at the value of each column using &lt;a href="http://api.jquery.com/contains-selector/" target="_blank"&gt;&lt;font size="2" face="Courier New"&gt;:contains&lt;/font&gt; selector&lt;/a&gt;. If it finds a value = ‘Yes’ it’ll assign a background color to the column’s parent, that in this case is the &lt;font size="2" face="Courier New"&gt;&amp;lt;tr&amp;gt;&lt;/font&gt; (the row) using its &lt;a href="http://en.wikipedia.org/wiki/Cascading_Style_Sheets" target="_blank"&gt;CSS&lt;/a&gt; backgroundColor property.&lt;/p&gt;

&lt;p&gt;So, taking &lt;a href="http://www.leniel.net/2012/03/hide-webgrid-column-colorize-rows-value.html#Figure1"&gt;Figure 1&lt;/a&gt; as an example, the above code can be used in an ASP.NET MVC view this way:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background: white; color: maroon"&gt;script &lt;/span&gt;&lt;span style="background: white; color: red"&gt;type&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&amp;quot;text/javascript&amp;quot;&amp;gt;

    &lt;/span&gt;&lt;span style="background: white; color: black"&gt;$(document).ready(&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;function &lt;/span&gt;&lt;span style="background: white; color: black"&gt;()&lt;br /&gt;    {
&lt;/span&gt;&lt;span style="background: white; color: black"&gt;        hideColumnColorRow(5); &lt;span style="background: white; color: green"&gt;// Hiding the 5th column and colorizing the row for which this column has a value = Yes&lt;br /&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style="background: white; color: black"&gt;});&lt;br /&gt;
&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="background: white; color: maroon"&gt;script&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;* I’ve placed the jQuery/JavaScript function inside a file named &lt;font size="2" face="Courier New"&gt;custom.js&lt;/font&gt;. It resides inside the Scripts folder of the sample app available &lt;a href="https://sites.google.com/site/leniel/blog/WebGridHideColumnColorRow.rar"&gt;here&lt;/a&gt;. There’s no need to reference this script file in the view page because with the introduction of ASP.NET 4.5 we now have an all new &lt;a href="http://weblogs.asp.net/scottgu/archive/2011/11/27/new-bundling-and-minification-support-asp-net-4-5-series.aspx" target="_blank"&gt;Bundling and Minification Support for CSS and JavaScript files&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;When the the app is run, this is the result:&lt;/p&gt;

&lt;p align="center"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="HTML table with column Active hidden and highlighted rows based on its value" border="0" alt="HTML table with column Active hidden and highlighted rows based on its value" src="http://lh4.ggpht.com/-jN_wbpYmEWg/T2z5TlKVeSI/AAAAAAAABbo/34rc4Txuyrw/WebGridHideColumnColorRowAfter%25255B6%25255D.png?imgmax=800" width="525" height="444" /&gt;Figure 2 - HTML table with column Active hidden and highlighted rows based on its value&lt;/p&gt;

&lt;p&gt;This is a really interesting requirement that one can implement in no time thanks to the power of jQuery. jQuery is one of the most fascinating things when we talk about software development. Its creator “&lt;a href="http://en.wikipedia.org/wiki/John_Resig" target="_blank"&gt;John Resig&lt;/a&gt;” should be awarded a Computer Science Nobel Prize if that existed. Well it could be the &lt;a href="http://en.wikipedia.org/wiki/Turing_Award" target="_blank"&gt;Turing Award&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Anyone should take a look at jQuery and start using it as early as possible. It’s a must have today. I simply love it! &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-redheart" alt="Coração vermelho" src="http://lh6.ggpht.com/-HvZ-8SshE6g/T2z5UJNd7lI/AAAAAAAABbw/wXBtaSghHOM/wlEmoticon-redheart%25255B2%25255D.png?imgmax=800" /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Source code&lt;/strong&gt; 

  &lt;br /&gt;I’ve put together a sample ASP.NET MVC 4 (uses NET Framework 4.5) so that you can try this out. You can run the app using the recently launched &lt;a href="http://msdn.microsoft.com/en-us/library/dd831853%28v=vs.110%29.aspx" target="_blank"&gt;Visual Studio 11 Beta&lt;/a&gt;. You can download the free Visual Studio 11 Express Beta for Web &lt;a href="http://www.microsoft.com/visualstudio/11/en-us/products/express" target="_blank"&gt;here&lt;/a&gt; and the app code &lt;a href="https://sites.google.com/site/leniel/blog/WebGridHideColumnColorRow.rar"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Hope it helps.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4926735770070291800-2611962134304062276?l=www.leniel.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ZN0ljNHJoUUbmqC6rUxawaMQMWU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZN0ljNHJoUUbmqC6rUxawaMQMWU/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/ZN0ljNHJoUUbmqC6rUxawaMQMWU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZN0ljNHJoUUbmqC6rUxawaMQMWU/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/leniel?a=3DWmfzaxWHM:9-SN55745xw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=3DWmfzaxWHM:9-SN55745xw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=3DWmfzaxWHM:9-SN55745xw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=3DWmfzaxWHM:9-SN55745xw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=3DWmfzaxWHM:9-SN55745xw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=3DWmfzaxWHM:9-SN55745xw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=3DWmfzaxWHM:9-SN55745xw:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=3DWmfzaxWHM:9-SN55745xw:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=3DWmfzaxWHM:9-SN55745xw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=3DWmfzaxWHM:9-SN55745xw:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=3DWmfzaxWHM:9-SN55745xw:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=3DWmfzaxWHM:9-SN55745xw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leniel/~4/3DWmfzaxWHM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.leniel.net/feeds/2611962134304062276/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.leniel.net/2012/03/hide-webgrid-column-colorize-rows-value.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/2611962134304062276?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/2611962134304062276?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/leniel/~3/3DWmfzaxWHM/hide-webgrid-column-colorize-rows-value.html" title="Hide table column and colorize rows based on value with jQuery" /><author><name>Leniel Macaferi</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-iFmNclBdT5Y/AAAAAAAAAAI/AAAAAAAABfw/6QE8faPUWOg/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-MZl2cfOda-o/T2z5Ry_MGZI/AAAAAAAABbg/xO4WS4UorZ4/s72-c/WebGridHideColumnColorRowBefore%25255B7%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.leniel.net/2012/03/hide-webgrid-column-colorize-rows-value.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0IHQXw9eip7ImA9WhVSFko.&quot;"><id>tag:blogger.com,1999:blog-4926735770070291800.post-4311247537343816606</id><published>2012-03-13T15:22:00.001-03:00</published><updated>2012-03-13T18:52:10.262-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-13T18:52:10.262-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Sublime Text" /><category scheme="http://www.blogger.com/atom/ns#" term="Mac OS" /><category scheme="http://www.blogger.com/atom/ns#" term="installation" /><category scheme="http://www.blogger.com/atom/ns#" term="code editor" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows" /><category scheme="http://www.blogger.com/atom/ns#" term="text editor" /><category scheme="http://www.blogger.com/atom/ns#" term="dictionary" /><title>Installing Brazilian Portuguese dict. in Sublime Text 2</title><content type="html">&lt;p&gt;Today I downloaded one more dictionary to use with &lt;a href="http://www.sublimetext.com/" target="_blank"&gt;Sublime Text 2&lt;/a&gt;. &lt;a href="http://en.wikipedia.org/wiki/Sublime_Text" target="_blank"&gt;Sublime Text&lt;/a&gt; is a multipurpose text and code editor. So far the best IMHO. I want to spell check my Portuguese texts of course. I followed the instructions described &lt;a href="http://www.sublimetext.com/docs/2/spell_checking.html" target="_blank"&gt;here&lt;/a&gt; to grab an additional dictionary.&lt;/p&gt;  &lt;p&gt;From that page we have that:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Sublime Text uses &lt;a href="http://hunspell.sourceforge.net/" target="_blank"&gt;Hunspell&lt;/a&gt; for its spell checking support. Additional dictionaries can be obtained from the &lt;a href="http://extensions.services.openoffice.org/en/dictionaries" target="_blank"&gt;OpenOffice.org Extension List&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I then headed to OpenOffice.org to search for a pt-BR dictionary. I found it and then when I downloaded it from &lt;a title="http://extensions.services.openoffice.org/en/project/Vero" href="http://extensions.services.openoffice.org/en/project/Vero"&gt;http://extensions.services.openoffice.org/en/project/Vero&lt;/a&gt; I got a file with a different extension (.oxt) of that used by Sublime Text 2. More on this bellow…&lt;/p&gt;  &lt;p&gt;The file name is &lt;font size="2" face="Courier New"&gt;Vero_pt_BR_V208AOC.oxt&lt;/font&gt;.&lt;/p&gt;  &lt;p&gt;Using Mac OS I tried to place this file inside this folder&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;/Users/leniel/Library/Application Support/Sublime Text 2/Packages/User&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;following the instructions given by Sublime Text 2 &lt;a href="http://www.sublimetext.com/docs/2/spell_checking.html" target="_blank"&gt;doc&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Closed Sublime Text 2 and reopened it. Went to the menu View &amp;gt; Dictionary and the new dictionary wasn’t there.&lt;/p&gt;  &lt;p&gt;Well, something is plain wrong here. The already installed dictionaries that come with Sublime Text are present in this folder:&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;/Users/leniel/Library/Application Support/Sublime Text 2/Packages/Language - English/&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Inside the above folder there are two English dictionaries with file extensions: &lt;font size="2" face="Courier New"&gt;.aff&lt;/font&gt; and &lt;font size="2" face="Courier New"&gt;.dic&lt;/font&gt;. &lt;/p&gt;  &lt;p&gt;A little bit more thinking and I tried what could do the trick. I renamed the downloaded dictionary file from &lt;font size="2" face="Courier New"&gt;Vero_pt_BR_V208AOC.oxt&lt;/font&gt; to &lt;font size="2" face="Courier New"&gt;Vero_pt_BR_V208AOC.rar&lt;/font&gt;. Opened the compressed file and to my surprise there they were… extracted the files &lt;font size="2" face="Courier New"&gt;pt_BR.aff&lt;/font&gt; and &lt;font size="2" face="Courier New"&gt;pt_BR.dic&lt;/font&gt;. Easy as pie. &lt;/p&gt;  &lt;p&gt;It turns out the .oxt file is just a wrapper…&lt;/p&gt;  &lt;p&gt;I renamed the folder &lt;font size="2" face="Courier New"&gt;Language – English&lt;/font&gt; to just &lt;font size="2" face="Courier New"&gt;Languages&lt;/font&gt; and placed the files &lt;font size="2" face="Courier New"&gt;pt_BR.aff&lt;/font&gt; and &lt;font size="2" face="Courier New"&gt;pt_BR.dic&lt;/font&gt; in this folder. Closed Sublime Text 2 and reopened it. The new dictionary appeared:&lt;/p&gt;  &lt;p align="center"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="Sublime Text 2 Dictionary menu option listing the pt_BR dictionary just added" border="0" alt="Sublime Text 2 Dictionary menu option listing the pt_BR dictionary just added" src="http://lh5.ggpht.com/-HgVuYm93sbo/T1_BhYXYA7I/AAAAAAAABa0/OyyuJOfOKdE/SublimeText2InstalledDictionaries%25255B1%25255D.png?imgmax=800" width="524" height="563" /&gt;Figure 1 - Sublime Text 2 Dictionary menu option listing the pt_BR dictionary just added&lt;/p&gt;  &lt;p&gt;Hope it helps.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4926735770070291800-4311247537343816606?l=www.leniel.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/3gNfY-Ud5yOx15IU5zspxf-Lz4U/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3gNfY-Ud5yOx15IU5zspxf-Lz4U/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/3gNfY-Ud5yOx15IU5zspxf-Lz4U/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3gNfY-Ud5yOx15IU5zspxf-Lz4U/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/leniel?a=wAo6TfeHiZg:m3r48pXVR5E:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=wAo6TfeHiZg:m3r48pXVR5E:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=wAo6TfeHiZg:m3r48pXVR5E:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=wAo6TfeHiZg:m3r48pXVR5E:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=wAo6TfeHiZg:m3r48pXVR5E:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=wAo6TfeHiZg:m3r48pXVR5E:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=wAo6TfeHiZg:m3r48pXVR5E:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=wAo6TfeHiZg:m3r48pXVR5E:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=wAo6TfeHiZg:m3r48pXVR5E:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=wAo6TfeHiZg:m3r48pXVR5E:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=wAo6TfeHiZg:m3r48pXVR5E:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=wAo6TfeHiZg:m3r48pXVR5E:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leniel/~4/wAo6TfeHiZg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.leniel.net/feeds/4311247537343816606/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.leniel.net/2012/03/install-portuguese-dict-sublime-text-2.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/4311247537343816606?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/4311247537343816606?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/leniel/~3/wAo6TfeHiZg/install-portuguese-dict-sublime-text-2.html" title="Installing Brazilian Portuguese dict. in Sublime Text 2" /><author><name>Leniel Macaferi</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-iFmNclBdT5Y/AAAAAAAAAAI/AAAAAAAABfw/6QE8faPUWOg/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-HgVuYm93sbo/T1_BhYXYA7I/AAAAAAAABa0/OyyuJOfOKdE/s72-c/SublimeText2InstalledDictionaries%25255B1%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.leniel.net/2012/03/install-portuguese-dict-sublime-text-2.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU8ERnk9fSp7ImA9WhVSFU8.&quot;"><id>tag:blogger.com,1999:blog-4926735770070291800.post-2385563729725528311</id><published>2012-03-12T01:23:00.001-03:00</published><updated>2012-03-12T01:50:07.765-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-12T01:50:07.765-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="package" /><category scheme="http://www.blogger.com/atom/ns#" term="NuGet" /><category scheme="http://www.blogger.com/atom/ns#" term="export" /><category scheme="http://www.blogger.com/atom/ns#" term="list" /><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio" /><category scheme="http://www.blogger.com/atom/ns#" term="project" /><title>Export list of used NuGet packages for a given project</title><content type="html">&lt;p&gt;This one is as simple as the title says… I just wanted to get a list of all &lt;a href="https://nuget.org/" target="_blank"&gt;NuGet&lt;/a&gt; packages I’m currently using in my &lt;a href="http://www.asp.net/mvc/mvc4" target="_blank"&gt;ASP.NET MVC 4&lt;/a&gt; project.&lt;/p&gt;  &lt;p&gt;If you look at the NuGet Package Manager window that you can access by right clicking a project in Solution Explorer and then selecting Manage NuGet Packages… you’ll see that there’s an Installed packages option on the left vertical menu. This is good and all but the manager doesn’t have an option to export the list of installed packages to a simple .txt file.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh3.ggpht.com/-dJFhjOOfjVQ/T116LoO_7SI/AAAAAAAABaU/mH2r67ghdfE/s1600-h/NuGetManageNuGetPackagesWindowVS11Beta%25255B5%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="NuGet Package Manager listing Installed Packages for the project" border="0" alt="NuGet Package Manager listing Installed Packages for the project" src="http://lh5.ggpht.com/-ML8YeMtV1L8/T116NEVnX8I/AAAAAAAABac/vTfK82Se9B0/NuGetManageNuGetPackagesWindowVS11Beta_thumb%25255B3%25255D.png?imgmax=800" width="525" height="295" /&gt;&lt;/a&gt;Figure 1 - NuGet Package Manager listing Installed Packages for the project&lt;/p&gt;  &lt;p&gt;One interesting thing is that NuGet uses a .XML file called &lt;font size="2" face="Courier New"&gt;packages.config&lt;/font&gt; that resides in the root folder of every project to actually fill the above window. Every time you add or delete a NuGet package this file is updated to reflect the changes.&lt;/p&gt;  &lt;p&gt;This is the content of my &lt;font size="2" face="Courier New"&gt;packages.config&lt;/font&gt; file:&lt;/p&gt;    &lt;pre class="code"&gt;&lt;span style="background: white; color: blue"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;xml &lt;/span&gt;&lt;span style="background: white; color: red"&gt;version&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;1.0&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red"&gt;encoding&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;utf-8&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;?&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;packages&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;package &lt;/span&gt;&lt;span style="background: white; color: red"&gt;id&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;AttributeRouting&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red"&gt;version&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;1.5.4426&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;/&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;package &lt;/span&gt;&lt;span style="background: white; color: red"&gt;id&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;DataAnnotationsExtensions&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red"&gt;version&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;1.0.1&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;/&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;package &lt;/span&gt;&lt;span style="background: white; color: red"&gt;id&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;DataAnnotationsExtensions.MVC3&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red"&gt;version&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;1.0.1&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;/&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;package &lt;/span&gt;&lt;span style="background: white; color: red"&gt;id&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;jQuery&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red"&gt;version&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;1.7.1&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;/&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;package &lt;/span&gt;&lt;span style="background: white; color: red"&gt;id&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;jQuery.Ajax.Unobtrusive&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red"&gt;version&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;1.0&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;/&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;package &lt;/span&gt;&lt;span style="background: white; color: red"&gt;id&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;jQuery.UI.Combined&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red"&gt;version&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;1.8.17&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;/&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;package &lt;/span&gt;&lt;span style="background: white; color: red"&gt;id&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;jQuery.Validation&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red"&gt;version&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;1.8&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;/&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;package &lt;/span&gt;&lt;span style="background: white; color: red"&gt;id&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;jQuery.Validation.Unobtrusive&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red"&gt;version&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;1.0&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;/&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;package &lt;/span&gt;&lt;span style="background: white; color: red"&gt;id&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;jquery-globalize&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red"&gt;version&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;0.1.0&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;/&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;package &lt;/span&gt;&lt;span style="background: white; color: red"&gt;id&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;knockoutjs&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red"&gt;version&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;1.2.9.0&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;/&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;package &lt;/span&gt;&lt;span style="background: white; color: red"&gt;id&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;log4net&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red"&gt;version&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;1.2.10&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;/&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;package &lt;/span&gt;&lt;span style="background: white; color: red"&gt;id&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;Microsoft.Web.Optimization&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red"&gt;version&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;0.1&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;/&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;package &lt;/span&gt;&lt;span style="background: white; color: red"&gt;id&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;microsoft-web-helpers&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red"&gt;version&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;1.15&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;/&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;package &lt;/span&gt;&lt;span style="background: white; color: red"&gt;id&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;Modernizr&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red"&gt;version&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;2.0.6&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;/&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;package &lt;/span&gt;&lt;span style="background: white; color: red"&gt;id&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;MvcSiteMapProvider&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red"&gt;version&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;3.2.1.0&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;/&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;package &lt;/span&gt;&lt;span style="background: white; color: red"&gt;id&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;Newtonsoft.Json&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red"&gt;version&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;4.0.8&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;/&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;package &lt;/span&gt;&lt;span style="background: white; color: red"&gt;id&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;NLog&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red"&gt;version&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;2.0.0.2000&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;/&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;package &lt;/span&gt;&lt;span style="background: white; color: red"&gt;id&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;RavenDB-Embedded&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red"&gt;version&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;1.0.700&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;/&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;package &lt;/span&gt;&lt;span style="background: white; color: red"&gt;id&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;System.Web.Providers&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red"&gt;version&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;1.0.1&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;/&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;package &lt;/span&gt;&lt;span style="background: white; color: red"&gt;id&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;T4MVC&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red"&gt;version&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;2.7.0&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;/&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;package &lt;/span&gt;&lt;span style="background: white; color: red"&gt;id&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;WebActivator&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red"&gt;version&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;1.2.0.0&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;/&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;packages&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;



&lt;p&gt;This file serves the purpose of this post but it’d be a nice addition to the NuGet manager if it had a button to export the list of installed packages in a better formatted way. Just an idea.&lt;/p&gt;

&lt;p&gt;Just let me take the opportunity to say “I Love You &lt;a href="http://en.wikipedia.org/wiki/NuGet" target="_blank"&gt;NuGet&lt;/a&gt;”. You let me explore the plethora of knowledge of fellow developers scattered all over the world in an easy way with the push of a button. I have no better words to describe you! You contribute enormously to the world development. Keep evolving!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4926735770070291800-2385563729725528311?l=www.leniel.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-PLTu-Q8X7hXCB9RGQ4g08s4i-M/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-PLTu-Q8X7hXCB9RGQ4g08s4i-M/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/-PLTu-Q8X7hXCB9RGQ4g08s4i-M/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-PLTu-Q8X7hXCB9RGQ4g08s4i-M/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/leniel?a=-kZgcnBN7z0:-HdmVig2ql4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=-kZgcnBN7z0:-HdmVig2ql4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=-kZgcnBN7z0:-HdmVig2ql4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=-kZgcnBN7z0:-HdmVig2ql4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=-kZgcnBN7z0:-HdmVig2ql4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=-kZgcnBN7z0:-HdmVig2ql4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=-kZgcnBN7z0:-HdmVig2ql4:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=-kZgcnBN7z0:-HdmVig2ql4:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=-kZgcnBN7z0:-HdmVig2ql4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=-kZgcnBN7z0:-HdmVig2ql4:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=-kZgcnBN7z0:-HdmVig2ql4:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=-kZgcnBN7z0:-HdmVig2ql4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leniel/~4/-kZgcnBN7z0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.leniel.net/feeds/2385563729725528311/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.leniel.net/2012/03/export-list-used-nuget-packages-project.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/2385563729725528311?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/2385563729725528311?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/leniel/~3/-kZgcnBN7z0/export-list-used-nuget-packages-project.html" title="Export list of used NuGet packages for a given project" /><author><name>Leniel Macaferi</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-iFmNclBdT5Y/AAAAAAAAAAI/AAAAAAAABfw/6QE8faPUWOg/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-ML8YeMtV1L8/T116NEVnX8I/AAAAAAAABac/vTfK82Se9B0/s72-c/NuGetManageNuGetPackagesWindowVS11Beta_thumb%25255B3%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.leniel.net/2012/03/export-list-used-nuget-packages-project.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkEDQXk5cCp7ImA9WhVTGUU.&quot;"><id>tag:blogger.com,1999:blog-4926735770070291800.post-3602911917004301471</id><published>2012-03-05T14:54:00.001-03:00</published><updated>2012-03-05T18:57:50.728-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-05T18:57:50.728-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="data" /><category scheme="http://www.blogger.com/atom/ns#" term="spreadsheet" /><category scheme="http://www.blogger.com/atom/ns#" term="Magic mouse" /><category scheme="http://www.blogger.com/atom/ns#" term="wirelles keyboard" /><category scheme="http://www.blogger.com/atom/ns#" term="battery life" /><category scheme="http://www.blogger.com/atom/ns#" term="Apple" /><category scheme="http://www.blogger.com/atom/ns#" term="time tracking" /><title>Apple’s magic mouse &amp; wireless keyboard battery life</title><content type="html">&lt;p&gt;I’ve been collecting data regarding the battery life cycle of my Apple’s magic mouse and wireless keyboard. I thought it’d be good to post this data here so that you dear reader can draw your own conclusions about how long should the battery life last.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://store.apple.com/us/product/MB829LL" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Apple Magic Mouse ($ 69 or R$ 229 today)" border="0" alt="Apple Magic Mouse ($ 69 or R$ 229 today)" src="http://lh4.ggpht.com/-6C5utOBtICo/T1UuGMFCRPI/AAAAAAAABZc/5UScrwh16Ug/AppleMagicMouseMB829_AV1%25255B6%25255D.jpg?imgmax=800" width="240" height="240" /&gt;&lt;/a&gt;&lt;a href="http://store.apple.com/us/product/MC184" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Apple Wireless Keyboard ($ 69 or R$ 229 today)" border="0" alt="Apple Wireless Keyboard ($ 69 or R$ 229 today)" src="http://lh6.ggpht.com/-0pLIodiUtUU/T1UuHtxyCwI/AAAAAAAABZk/q-gtEpxKWIU/AppleWirellesKeyboardMC184LL%25255B6%25255D.jpg?imgmax=800" width="240" height="240" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This is interesting data to look at because I like statistics and it’s good to analyze data. It helps you predict what to expect… Obviously the batteries’ lifespan changes according to how much time you spend using these devices. In my case I tend to use the computer 8 hours/day on average.&lt;/p&gt;  &lt;p&gt;Just now I decided to search for a neat app ( &lt;a href="http://finchformac.com/" target="_blank"&gt;Finch for Mac&lt;/a&gt; ) so that I can track the time I pass working on the computer. This will for sure give me more accurate data in the near future. For now I’ll have to take this data for granted…&lt;/p&gt;  &lt;p&gt;Take a look at the following Google spreadsheet:&lt;/p&gt; &lt;iframe height="525" src="https://docs.google.com/spreadsheet/pub?hl=en&amp;amp;hl=en&amp;amp;key=0AoSVxswDPXtwdEhFOXdVWkdOQU5EVWpfYm1kc2JCWlE&amp;amp;single=true&amp;amp;gid=0&amp;amp;range=C1%3AK100&amp;amp;output=html&amp;amp;widget=true" frameborder="0" width="525"&gt;&lt;/iframe&gt;  &lt;p&gt;As you see the keyboard has a great autonomy and there were periods in which I didn’t work as much as I’d like on the computer because the mouse charges used to last 3 weeks. This denotes periods of inactivity. Now that I’m doing more intensive work the mouse battery lasts only 1.5 weeks. This is half the time previously taken to drain the battery.&lt;/p&gt;  &lt;p&gt;For the record: I also own an Apple’s battery charger. Recharging the batteries is an easy task. Once more I’m contributing to the environment.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://store.apple.com/us/product/MC500LL" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="Apple Battery Charger ($ 29 today)" border="0" alt="Apple Battery Charger ($ 29 today)" src="http://lh6.ggpht.com/-GP0jchfC5yU/T1UuIJNM_hI/AAAAAAAABZs/mSNMafu0K-8/AppleBatteryChargerSTD%25255B4%25255D.jpg?imgmax=800" width="240" height="240" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;All these Apple devices are great IMHO as it’s the case with everything made by Apple!&lt;/p&gt;  &lt;p&gt;The only “complaint” is that I think the mouse should have a greater autonomy. Maybe this will be the case with more recent technology iterations.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4926735770070291800-3602911917004301471?l=www.leniel.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/GkwGLJTIZNhzHcoAPf_DwavL6QA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GkwGLJTIZNhzHcoAPf_DwavL6QA/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/GkwGLJTIZNhzHcoAPf_DwavL6QA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GkwGLJTIZNhzHcoAPf_DwavL6QA/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/leniel?a=lnYNWqbBOW8:XfGQde62n38:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=lnYNWqbBOW8:XfGQde62n38:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=lnYNWqbBOW8:XfGQde62n38:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=lnYNWqbBOW8:XfGQde62n38:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=lnYNWqbBOW8:XfGQde62n38:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=lnYNWqbBOW8:XfGQde62n38:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=lnYNWqbBOW8:XfGQde62n38:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=lnYNWqbBOW8:XfGQde62n38:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=lnYNWqbBOW8:XfGQde62n38:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=lnYNWqbBOW8:XfGQde62n38:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=lnYNWqbBOW8:XfGQde62n38:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=lnYNWqbBOW8:XfGQde62n38:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leniel/~4/lnYNWqbBOW8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.leniel.net/feeds/3602911917004301471/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.leniel.net/2012/03/mouse-wireless-keyboard-battery-life.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/3602911917004301471?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/3602911917004301471?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/leniel/~3/lnYNWqbBOW8/mouse-wireless-keyboard-battery-life.html" title="Apple’s magic mouse &amp;amp; wireless keyboard battery life" /><author><name>Leniel Macaferi</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-iFmNclBdT5Y/AAAAAAAAAAI/AAAAAAAABfw/6QE8faPUWOg/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-6C5utOBtICo/T1UuGMFCRPI/AAAAAAAABZc/5UScrwh16Ug/s72-c/AppleMagicMouseMB829_AV1%25255B6%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.leniel.net/2012/03/mouse-wireless-keyboard-battery-life.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkABRnwzeSp7ImA9WhVTF0Q.&quot;"><id>tag:blogger.com,1999:blog-4926735770070291800.post-4245031758665726331</id><published>2012-03-02T12:54:00.001-03:00</published><updated>2012-03-03T13:05:57.281-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-03T13:05:57.281-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="dynamic views" /><category scheme="http://www.blogger.com/atom/ns#" term="Blogger" /><category scheme="http://www.blogger.com/atom/ns#" term="customization" /><category scheme="http://www.blogger.com/atom/ns#" term="bar" /><category scheme="http://www.blogger.com/atom/ns#" term="tips and tricks" /><category scheme="http://www.blogger.com/atom/ns#" term="CSS" /><category scheme="http://www.blogger.com/atom/ns#" term="Google" /><category scheme="http://www.blogger.com/atom/ns#" term="gadgets" /><title>Blogger dynamic views with Undocked Gadgets bar</title><content type="html">&lt;p&gt;Blogger recently launched &lt;a href="http://buzz.blogger.com/2012/02/dynamic-views-update-3-gadgets.html" target="_blank"&gt;gadgets support for dynamic views&lt;/a&gt;. This is really cool and was a missing piece to go with dynamic views.&lt;/p&gt;  &lt;p&gt;One of the things that I really didn’t like about the gadget bar is that it’s hidden (docked) in the right side of the window. It’s difficult to see and so I Googled about an undocked version but couldn’t find it.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://jes4us.blogspot.com" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="Blogger docked gadgets sidebar (barely visible) or could we say hidden?" border="0" alt="Blogger docked gadgets sidebar (barely visible) or could we say hidden?" src="http://lh5.ggpht.com/-pv3xPrfZPW0/T1DtCJ2E0gI/AAAAAAAABZE/xDgrO1spDUA/BloggerDynamicViewDockedGadgetsSidebar%25255B17%25255D.png?imgmax=800" width="525" height="425" /&gt;&lt;/a&gt;Figure 1 - Blogger docked gadgets sidebar (barely visible) or could we say hidden?&lt;/p&gt;  &lt;p&gt;Here I show you how to get an undocked version so that your visitors can enjoy the gadgets bar in its full glory. Follow these simple steps:&lt;/p&gt;  &lt;p&gt;1 - Select the Template option at &lt;a href="http://draft.blogger.com/" target="_blank"&gt;draft.blogger.com&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;2 - Click the Customize button&lt;/p&gt;  &lt;p&gt;3 - In the Window that opens select Advanced&lt;/p&gt;  &lt;p&gt;4 - Select Add CSS&lt;/p&gt;  &lt;p&gt;5 - Copy &amp;amp; paste the following piece of code in the Add custom CSS field&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="background: white; color: maroon"&gt;#gadget-dock
&lt;/span&gt;&lt;span style="background: white; color: black"&gt;{
    &lt;/span&gt;&lt;span style="background: white; color: red"&gt;right&lt;/span&gt;&lt;span style="background: white; color: black"&gt;: &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;0&lt;/span&gt;&lt;span style="background: white; color: black"&gt;;
}&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;6 - Click Apply to blog button in the window top right corner&lt;/p&gt;

&lt;p&gt;You won’t see the change applied immediately.&lt;/p&gt;

&lt;p&gt;Now go and open your blog and you should see an undocked gadgets bar!&lt;/p&gt;

&lt;p align="center"&gt;&lt;a href="http://jes4us.blogspot.com" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="Blogger undocked gadgets sidebar (now visible)" border="0" alt="Blogger undocked gadgets sidebar (now visible)" src="http://lh3.ggpht.com/-PjADdu4tEjM/T1DtIC-iDwI/AAAAAAAABZI/bPagJjvH4c4/BloggerDynamicViewUndockedGadgetsSidebar%25255B6%25255D.png?imgmax=800" width="525" height="424" /&gt;&lt;/a&gt;Figure 2 - Blogger undocked gadgets sidebar (now visible)&lt;/p&gt;

&lt;p&gt;I hope blogger gives the option to customize this without the need for CSS code. It’ll be easier for its users and will provide a better experience for blog’s visitors… &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Alegre" src="http://lh3.ggpht.com/-zRgvf-f7sNU/T1DtKJU62II/AAAAAAAABY0/85r3WvG5s10/wlEmoticon-smile%25255B2%25255D.png?imgmax=800" /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To answer &lt;a href="http://www.leniel.net/2012/03/blogger-dynamic-view-undocked-gadgets.html#comment-455193901" target="_blank"&gt;Hannah’s question&lt;/a&gt;: if you also want to customize the background colors of the gadgets bar, you can apply these styles following the same procedure described above:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: maroon"&gt;.gadget-icons
&lt;/span&gt;&lt;span style="background: white; color: black"&gt;{
    &lt;/span&gt;&lt;span style="background: white; color: red"&gt;background-color&lt;/span&gt;&lt;span style="background: white; color: black"&gt;: &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;red&lt;/span&gt;&lt;span style="background: white; color: black"&gt;;
}

&lt;/span&gt;&lt;span style="background: white; color: maroon"&gt;.gadget-title
&lt;/span&gt;&lt;span style="background: white; color: black"&gt;{
    &lt;/span&gt;&lt;span style="background: white; color: red"&gt;background-color&lt;/span&gt;&lt;span style="background: white; color: black"&gt;: &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;red&lt;/span&gt;&lt;span style="background: white; color: black"&gt;;
}&lt;/span&gt;&lt;/pre&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: maroon"&gt;.gadget-selected .gadget-icons
&lt;/span&gt;&lt;span style="background: white; color: black"&gt;{
    &lt;/span&gt;&lt;span style="background: white; color: red"&gt;background-color&lt;/span&gt;&lt;span style="background: white; color: black"&gt;: &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;yellow&lt;/span&gt;&lt;span style="background: white; color: black"&gt;;
}&lt;/span&gt;&lt;/pre&gt;


&lt;p&gt;One thing to remember here is that as the gadgets’ icons are white you must choose a background color that’s not too much whitish.&lt;/p&gt;

&lt;p&gt;Play with the colors and enjoy!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4926735770070291800-4245031758665726331?l=www.leniel.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/70-Hy3gi8so1nWZbp73ZTDGjNvo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/70-Hy3gi8so1nWZbp73ZTDGjNvo/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/70-Hy3gi8so1nWZbp73ZTDGjNvo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/70-Hy3gi8so1nWZbp73ZTDGjNvo/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/leniel?a=DGzw4YQTPz0:teUPgNmIVEo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=DGzw4YQTPz0:teUPgNmIVEo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=DGzw4YQTPz0:teUPgNmIVEo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=DGzw4YQTPz0:teUPgNmIVEo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=DGzw4YQTPz0:teUPgNmIVEo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=DGzw4YQTPz0:teUPgNmIVEo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=DGzw4YQTPz0:teUPgNmIVEo:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=DGzw4YQTPz0:teUPgNmIVEo:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=DGzw4YQTPz0:teUPgNmIVEo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=DGzw4YQTPz0:teUPgNmIVEo:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=DGzw4YQTPz0:teUPgNmIVEo:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=DGzw4YQTPz0:teUPgNmIVEo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leniel/~4/DGzw4YQTPz0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.leniel.net/feeds/4245031758665726331/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.leniel.net/2012/03/blogger-dynamic-view-undocked-gadgets.html#comment-form" title="8 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/4245031758665726331?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/4245031758665726331?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/leniel/~3/DGzw4YQTPz0/blogger-dynamic-view-undocked-gadgets.html" title="Blogger dynamic views with Undocked Gadgets bar" /><author><name>Leniel Macaferi</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-iFmNclBdT5Y/AAAAAAAAAAI/AAAAAAAABfw/6QE8faPUWOg/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-pv3xPrfZPW0/T1DtCJ2E0gI/AAAAAAAABZE/xDgrO1spDUA/s72-c/BloggerDynamicViewDockedGadgetsSidebar%25255B17%25255D.png?imgmax=800" height="72" width="72" /><thr:total>8</thr:total><feedburner:origLink>http://www.leniel.net/2012/03/blogger-dynamic-view-undocked-gadgets.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C04GSX06cSp7ImA9WhRbEkQ.&quot;"><id>tag:blogger.com,1999:blog-4926735770070291800.post-7763610699009946996</id><published>2012-02-03T15:20:00.001-02:00</published><updated>2012-02-03T15:58:48.319-02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-03T15:58:48.319-02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Apps" /><category scheme="http://www.blogger.com/atom/ns#" term="scan" /><category scheme="http://www.blogger.com/atom/ns#" term="WinRAR" /><category scheme="http://www.blogger.com/atom/ns#" term="time saver" /><category scheme="http://www.blogger.com/atom/ns#" term="file" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows" /><category scheme="http://www.blogger.com/atom/ns#" term="tips and tricks" /><category scheme="http://www.blogger.com/atom/ns#" term="list" /><category scheme="http://www.blogger.com/atom/ns#" term="upload" /><category scheme="http://www.blogger.com/atom/ns#" term="size" /><category scheme="http://www.blogger.com/atom/ns#" term="compression" /><title>Listing compressed files within a .zip or .rar by file size</title><content type="html">&lt;style type="text/css"&gt;



kbd{
background:none repeat scroll 0 0 #eeeeee;
border-color:#cccccc #aaaaaa #888888 #bbbbbb;
border-style:solid;
border-width:1px 3px 3px 1px;
color:#000000;
padding:2px 4px;
white-space:nowrap;}&lt;/style&gt;  &lt;p&gt;I'd like to know any app that shows a list of the files that lie within a &lt;a href="http://en.wikipedia.org/wiki/File_archiver" target="_blank"&gt;compressed file&lt;/a&gt; .zip or .rar. If the list could be ordered by &lt;em&gt;file size&lt;/em&gt; it'd be great! It could be any software that runs on Windows or Mac OS since I use both OS using &lt;a href="http://www.leniel.net/2011/05/access-aspnet-app-from-win-7-vm-mac-os.html" target="_blank"&gt;Parallels&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Why this is important to me?    &lt;br /&gt;The answer is that sometimes I need to send a compressed file to someone and this file generally contains lots of coding files that are part of a Visual Studio Solution/Project for example. I just want to send a subset of those files. There are some big files like DLLs and database files scattered everywhere in a lot of folders that don’t need to go with the compressed file.&lt;/p&gt;  &lt;p&gt;So how can I avoid spending time going through all those folders/files, looking their size and deleting one by one to make the final compressed file to be uploaded smaller?&lt;/p&gt;  &lt;p&gt;I thought about asking this question at &lt;a href="http://superuser.com/users/33242/leniel-macaferi" target="_blank"&gt;SuperUser&lt;/a&gt;. To tell the truth I already had the question typed there but before I could post it and after a few tries by myself I got what I wanted using &lt;a href="http://en.wikipedia.org/wiki/WinRAR" target="_blank"&gt;WinRAR&lt;/a&gt; with an easy play of menu commands. So how can you do this? Follow me…&lt;/p&gt;  &lt;p&gt;1 - If you don’t know or don’t have WinRAR or use another file archiver, you can get it at:    &lt;br /&gt;&lt;a title="http://www.rarlab.com/download.htm" href="http://www.rarlab.com/download.htm" target="_blank"&gt;http://www.rarlab.com/download.htm&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I use WinRAR in its evaluation copy incarnation that once in while pops up a dialog asking you to purchase it. &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-surprisedsmile" alt="Smiley surpreso" src="http://lh3.ggpht.com/-jCy36rz6R6Y/TywXX5f7D6I/AAAAAAAABXs/0_4wMqgGGCQ/wlEmoticon-surprisedsmile%25255B2%25255D.png?imgmax=800" /&gt; It works great even if you don’t want to purchase it… take it easy.&lt;/p&gt;  &lt;p&gt;2 - At first compress the folders and files you want without getting bothered about the size of the resulting compressed file. After installing WinRAR it’s available in the &lt;a href="http://en.wikipedia.org/wiki/Context_menu" target="_blank"&gt;context menu&lt;/a&gt; of any file or folder in Windows Explorer.&lt;/p&gt;  &lt;p&gt;3 - Open the compressed file in WinRAR and play with the menu just a little bit. Go to the Options | File list and select Flat folders view and Details menu options.&lt;/p&gt;  &lt;p align="center"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="WinRAR listing the files of a compressed file (trunk.rar) by file size" border="0" alt="WinRAR listing the files of a compressed file (trunk.rar) by file size" src="http://lh5.ggpht.com/-a4YgZPcClxg/TywXaSZHCnI/AAAAAAAABYE/HT81_m2OIZo/WinRARListingCompressedFilesBySize%25255B5%25255D.png?imgmax=800" width="524" height="760" /&gt;    &lt;br /&gt;Figure 1 - WinRAR listing the files of a compressed file (trunk.rar) by file size&lt;/p&gt;  &lt;p&gt;Taking the above screenshot into consideration (it lists the content of a trunk project folder compressed), we can see that it has 1554 folders and 1624 files. This compressed file alone has 87 MB in disk when the actual uncompressed content has 193 MB in size but it’s still pretty big to send it over the wire… I have a lot of folders and files to go through if I want to delete the big and unnecessary files to try to decrease the final size! As you see, it also contains many duplicate files in different paths… it’s pretty daunting just to think about a manual scan. A visual scan in a single screen is much better. How do you get a big picture of this compressed file?&lt;/p&gt;  &lt;p&gt;4 - Order all the files by size by clicking the size column header.&lt;/p&gt;  &lt;p&gt;5 - Select all the files you want to remove/delete from the compressed file in just one go. One can do this in two different ways: clicking a file and holding the &lt;kbd&gt;ctrl&lt;/kbd&gt; key and clicking another file to select not contiguous files OR selecting one file and pressing the &lt;kbd&gt;shift&lt;/kbd&gt; key and clicking another file to select contiguous files. After this it’s just a matter of right clicking the file selection and executing the Delete files command.&lt;/p&gt;  &lt;p&gt;Hope this useful tip helps you someday!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4926735770070291800-7763610699009946996?l=www.leniel.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ruTju5CrcrmBHh_K6YUSP1QvLi0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ruTju5CrcrmBHh_K6YUSP1QvLi0/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/ruTju5CrcrmBHh_K6YUSP1QvLi0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ruTju5CrcrmBHh_K6YUSP1QvLi0/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/leniel?a=ZE_XJPzhOuY:aXvqDCmv-Vk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=ZE_XJPzhOuY:aXvqDCmv-Vk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=ZE_XJPzhOuY:aXvqDCmv-Vk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=ZE_XJPzhOuY:aXvqDCmv-Vk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=ZE_XJPzhOuY:aXvqDCmv-Vk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=ZE_XJPzhOuY:aXvqDCmv-Vk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=ZE_XJPzhOuY:aXvqDCmv-Vk:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=ZE_XJPzhOuY:aXvqDCmv-Vk:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=ZE_XJPzhOuY:aXvqDCmv-Vk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=ZE_XJPzhOuY:aXvqDCmv-Vk:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=ZE_XJPzhOuY:aXvqDCmv-Vk:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=ZE_XJPzhOuY:aXvqDCmv-Vk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leniel/~4/ZE_XJPzhOuY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.leniel.net/feeds/7763610699009946996/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.leniel.net/2012/02/listing-compressed-files-zip-rar-size.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/7763610699009946996?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/7763610699009946996?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/leniel/~3/ZE_XJPzhOuY/listing-compressed-files-zip-rar-size.html" title="Listing compressed files within a .zip or .rar by file size" /><author><name>Leniel Macaferi</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-iFmNclBdT5Y/AAAAAAAAAAI/AAAAAAAABfw/6QE8faPUWOg/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-jCy36rz6R6Y/TywXX5f7D6I/AAAAAAAABXs/0_4wMqgGGCQ/s72-c/wlEmoticon-surprisedsmile%25255B2%25255D.png?imgmax=800" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://www.leniel.net/2012/02/listing-compressed-files-zip-rar-size.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEYNSX88eyp7ImA9WhRVGEw.&quot;"><id>tag:blogger.com,1999:blog-4926735770070291800.post-245170972769819055</id><published>2012-01-17T13:10:00.000-02:00</published><updated>2012-01-17T14:03:18.173-02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-17T14:03:18.173-02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="repair" /><category scheme="http://www.blogger.com/atom/ns#" term="Mac OS" /><category scheme="http://www.blogger.com/atom/ns#" term="tools" /><category scheme="http://www.blogger.com/atom/ns#" term="scan" /><category scheme="http://www.blogger.com/atom/ns#" term="iTunes" /><category scheme="http://www.blogger.com/atom/ns#" term="MP3" /><category scheme="http://www.blogger.com/atom/ns#" term="software" /><category scheme="http://www.blogger.com/atom/ns#" term="import" /><title>MP3 Scan+Repair tool for iTunes on Mac OS</title><content type="html">&lt;style type="text/css"&gt;

kbd{
background:none repeat scroll 0 0 #eeeeee;
border-color:#cccccc #aaaaaa #888888 #bbbbbb;
border-style:solid;
border-width:1px 3px 3px 1px;
color:#000000;
padding:2px 4px;
white-space:nowrap;}&lt;/style&gt;  &lt;p&gt;This is another post to add to my &lt;a href="http://www.leniel.net/search/label/MP3" target="_blank"&gt;MP3 series&lt;/a&gt;…&lt;/p&gt;  &lt;p&gt;Yesterday I tried to add/import a folder full of MP3 files to my iTunes library. Just after adding I opened iTunes and went check those MP3s. To my surprise the MP3s were not added to iTunes. I had a hard time trying to find those files since iTunes moved them from their initial location to a special folder called&lt;em&gt; Not Added&lt;/em&gt;. My MP3s ended up here:&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;/Users/leniel/Music/iTunes/iTunes Media/Automatically Add to iTunes/Not Added/&lt;font size="2" face="Courier New"&gt;2012-01-16 14.34.38&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Note that iTunes created a folder inside Not Added named with the date and time the import operation occurred. The folder Not Added also stores image files and whatever file iTunes doesn’t recognize as valid files to be imported.&lt;/p&gt;  &lt;p&gt;Now I see that I have some folders like that one - that are being created since 2010-9-17 (when I bought my &lt;a href="http://www.leniel.net/2010/09/developing-for-iphone-with-mac-mini.html" target="_blank"&gt;Mac mini&lt;/a&gt;) and some of those folders have MP3 files that I didn’t notice were missing in my library. &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-disappointedsmile" alt="Smiley decepcionado" src="http://lh6.ggpht.com/-7Bq4HorOxn4/TxWPuUpTWRI/AAAAAAAABWQ/dFslqHL7d-E/wlEmoticon-disappointedsmile%25255B2%25255D.png?imgmax=800" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://triq.net/articles/mp3-validator-mac-os-x" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="MP3 Scan+Repair Logo" border="0" alt="MP3 Scan+Repair Logo" align="right" src="http://lh4.ggpht.com/-UYH1VO5UdPs/TxWSMt1A_dI/AAAAAAAABXI/haRtc87oFzc/MP3Scan%25252BRepairAppLogo%25255B4%25255D.png?imgmax=800" width="128" height="128" /&gt;&lt;/a&gt;Then I realized that for some odd reason iTunes rejected those files. I googled about it with &amp;quot;iTunes won't import MP3&amp;quot; and to my delight I found a &lt;a href="http://hintsforums.macworld.com/archive/index.php/t-102685.html" target="_blank"&gt;forum thread&lt;/a&gt; in which the user Afric Pepperbird recommended a fantastic tool called &lt;a href="http://triq.net/articles/mp3-validator-mac-os-x" target="_blank"&gt;MP3 Scan+Repair&lt;/a&gt; by Christian Zuckschwerdt. Using this great piece of software I managed to add those MP3s to my iTunes library.&lt;/p&gt;  &lt;p&gt;So as way to say thanks I decided to write a post to demonstrate how it works.&lt;/p&gt;  &lt;p&gt;1 - Download MP3 Scan+Repair (it's in Beta and is free for the moment)&lt;/p&gt;  &lt;p&gt;&lt;a title="http://triq.net/articles/mp3-scan-repair-download" href="http://triq.net/articles/mp3-scan-repair-download" target="_blank"&gt;http://triq.net/articles/mp3-scan-repair-download&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;2 - Open the App and drag and drop the problematic folder (the one that lies within the Not Added folder) to the app screen:&lt;/p&gt;  &lt;p align="center"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="MP3 Scan+Repair main screen" border="0" alt="MP3 Scan+Repair main screen" src="http://lh6.ggpht.com/-3iJynVx83oM/TxWXoIO4hOI/AAAAAAAABXU/Dv1Kkx4L8tI/MP3Scan%25252BRepairMainScreen%25255B6%25255D.png?imgmax=800" width="525" height="249" /&gt;Figure 1 - MP3 Scan+Repair main screen&lt;/p&gt;  &lt;p&gt;3 - Select all the files using &lt;kbd&gt;command&lt;/kbd&gt;+&lt;kbd&gt;A&lt;/kbd&gt; and then click the hammer button (mouse button is over it) to repair the files:&lt;/p&gt;  &lt;p align="center"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="MP3 Scan+Repair listing the files and their respective problems" border="0" alt="MP3 Scan+Repair listing the files and their respective problems" src="http://lh4.ggpht.com/-IFdG32KoZkY/TxWXrjicyPI/AAAAAAAABXc/Z0J0T0u0Emg/MP3Scan%25252BRepairFiles%25255B6%25255D.png?imgmax=800" width="525" height="433" /&gt;Figure 2 - MP3 Scan+Repair listing the files and their respective problems&lt;/p&gt;  &lt;p&gt;See the Messages column with the description of what’s wrong with each file… even warnings prevent iTunes from adding the MP3 file to its library.&lt;/p&gt;  &lt;p&gt;When repairing MP3 Scan+Repair will try to recreate the MP3s moving the old ones to the trash and writing the new ones to the current folder.&lt;/p&gt;  &lt;p&gt;After following these easy steps you should be good to go and add those MP3s files to your iTunes media library.&lt;/p&gt;  &lt;p&gt;The app is straightforward and does what it advertises… I’m really satisfied!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4926735770070291800-245170972769819055?l=www.leniel.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ZbtLjAmkPbK00zougcuB4OkN-3I/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZbtLjAmkPbK00zougcuB4OkN-3I/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/ZbtLjAmkPbK00zougcuB4OkN-3I/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZbtLjAmkPbK00zougcuB4OkN-3I/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/leniel?a=blpZv0FSID4:nlx1bn-voy8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=blpZv0FSID4:nlx1bn-voy8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=blpZv0FSID4:nlx1bn-voy8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=blpZv0FSID4:nlx1bn-voy8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=blpZv0FSID4:nlx1bn-voy8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=blpZv0FSID4:nlx1bn-voy8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=blpZv0FSID4:nlx1bn-voy8:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=blpZv0FSID4:nlx1bn-voy8:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=blpZv0FSID4:nlx1bn-voy8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=blpZv0FSID4:nlx1bn-voy8:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=blpZv0FSID4:nlx1bn-voy8:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=blpZv0FSID4:nlx1bn-voy8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leniel/~4/blpZv0FSID4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.leniel.net/feeds/245170972769819055/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.leniel.net/2012/01/mp3-scan-repair-tool-for-itunes-mac-os.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/245170972769819055?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/245170972769819055?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/leniel/~3/blpZv0FSID4/mp3-scan-repair-tool-for-itunes-mac-os.html" title="MP3 Scan+Repair tool for iTunes on Mac OS" /><author><name>Leniel Macaferi</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-iFmNclBdT5Y/AAAAAAAAAAI/AAAAAAAABfw/6QE8faPUWOg/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-7Bq4HorOxn4/TxWPuUpTWRI/AAAAAAAABWQ/dFslqHL7d-E/s72-c/wlEmoticon-disappointedsmile%25255B2%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.leniel.net/2012/01/mp3-scan-repair-tool-for-itunes-mac-os.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkMNQ3g_eCp7ImA9WhRWEkg.&quot;"><id>tag:blogger.com,1999:blog-4926735770070291800.post-8046930678232237781</id><published>2011-12-29T21:08:00.001-02:00</published><updated>2011-12-30T12:14:52.640-02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-30T12:14:52.640-02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Exif" /><category scheme="http://www.blogger.com/atom/ns#" term="Mac OS" /><category scheme="http://www.blogger.com/atom/ns#" term="photography" /><category scheme="http://www.blogger.com/atom/ns#" term="geotagging" /><category scheme="http://www.blogger.com/atom/ns#" term="coordinates" /><category scheme="http://www.blogger.com/atom/ns#" term="metadata" /><category scheme="http://www.blogger.com/atom/ns#" term="GPS" /><category scheme="http://www.blogger.com/atom/ns#" term="photos" /><category scheme="http://www.blogger.com/atom/ns#" term="iPhoto" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Maps" /><title>Extract GPS coord from Google Maps to geotag photos</title><content type="html">&lt;style type="text/css"&gt;






kbd
{
background:none repeat scroll 0 0 #eeeeee;
border-color:#cccccc #aaaaaa #888888 #bbbbbb;
border-style:solid;
border-width:1px 3px 3px 1px;
color:#000000;
padding:2px 4px;
white-space:nowrap;
}&lt;/style&gt;  &lt;p&gt;This is a quick tip related to something that I just tried today and that worked.&lt;/p&gt;  &lt;p&gt;My camera &lt;a href="http://snapsort.com/cameras/Sony-HX100v" target="_blank"&gt;SONY DSC-HX100V&lt;/a&gt; has &lt;a href="http://en.wikipedia.org/wiki/Global_Positioning_System" target="_blank"&gt;GPS&lt;/a&gt; capability built-in but it &lt;em&gt;won't work everywhere and it needs some time to acquire the satellite signal&lt;/em&gt;. This way if you just want to take a quick snap you may end with photos that don’t have GPS location in their &lt;a href="http://en.wikipedia.org/wiki/Exif" target="_blank"&gt;Exif metadata&lt;/a&gt;. GPS is a recent capability when we talk about cameras.&lt;/p&gt;  &lt;p align="center"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="SONY DSC-HX100V camera with built-in GPS" border="0" alt="SONY DSC-HX100V camera with built-in GPS" src="http://lh5.ggpht.com/-OGAEYQ8Edog/Tv3D2PivmMI/AAAAAAAABWA/CXXcXBmn3T8/SonyHX100VFront4.jpg?imgmax=800" width="300" height="214" /&gt;Figure 1 - &lt;a href="http://snapsort.com/cameras/Sony-HX100v" target="_blank"&gt;SONY DSC-HX100V&lt;/a&gt; camera with built-in GPS&lt;/p&gt;  &lt;p&gt;Taking that into consideration, let’s say you have some photos in &lt;a href="http://en.wikipedia.org/wiki/IPhoto" target="_blank"&gt;iPhoto&lt;/a&gt; (Mac OS) or whatever program you use to manage your photos. I mention iPhoto here since it’s the app I use. Those photos don't have a location set due to no GPS signal available where the photos were taken. So how can one add that missing GPS location info/data on those photos? By the way, this process is called &lt;a href="http://en.wikipedia.org/wiki/Geotagging" target="_blank"&gt;geotagging&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;This is what I’ve tried and what worked perfectly in my case:&lt;/p&gt;  &lt;p&gt;1 - Open &lt;a href="http://maps.google.com" target="_blank"&gt;Google Maps&lt;/a&gt; and find the place/point where you’ve taken the photos.&lt;/p&gt;  &lt;p&gt;2 - Right click that place/point you want in the map and select Center Map here.&lt;/p&gt;  &lt;p&gt;3 - Click the Link button. Black mouse pointer is over it in the screenshot bellow.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh5.ggpht.com/-2unmfF6L2Q0/Tvzy3kmipxI/AAAAAAAABVY/F-b9-ajYex8/s1600-h/GoogleMapsLinkToGetGPSCoordinates5.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="Google Maps link popup box with URL that contains GPS coordinates" border="0" alt="Google Maps link popup box with URL that contains GPS coordinates" src="http://lh3.ggpht.com/-RlCYpSv3KAY/Tvzy5ERGmpI/AAAAAAAABVg/PvRHeb-CMBQ/GoogleMapsLinkToGetGPSCoordinates_th.png?imgmax=800" width="525" height="217" /&gt;&lt;/a&gt;Figure 2 - Google Maps link popup box with URL that contains GPS coordinates&lt;/p&gt;  &lt;p&gt;A popup box will open. Copy the text/URL and paste it in your preferred text editor app. The link will look something like this:&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;http://maps.google.com/maps/ms?msid=201266260819946046546.0004a0e1b939dec67f18e&amp;amp;msa=0&amp;amp;ll=&lt;font style="background-color: #ffff00"&gt;-22.428568,-44.619633&lt;/font&gt;&amp;amp;spn=0.001983,0.004128&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Pay attention to the highlighted part that correspond to the &lt;a href="http://en.wikipedia.org/wiki/Geographic_coordinate_system" target="_blank"&gt;longitude and latitude&lt;/a&gt; data.&lt;/p&gt;  &lt;p&gt;4 - Select the photos you want in iPhoto to apply Location information and press &lt;kbd&gt;command&lt;/kbd&gt;+&lt;kbd&gt;I&lt;/kbd&gt; to access the Assign a Place box. Copy the highlighted text above and paste it in the box. Press the enter key to finish the task.&lt;/p&gt;  &lt;p align="center"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="Adding GPS coordinates to iPhoto Assign a Place box" border="0" alt="Adding GPS coordinates to iPhoto Assign a Place box" src="http://lh4.ggpht.com/-rHgs2wzFKaM/Tvzy7PanUrI/AAAAAAAABWI/-JHBbaC4OVQ/iPhotoSettingLocationWithGPSCoordina%25255B1%25255D.png?imgmax=800" width="280" height="262" /&gt;Figure 3 - Adding GPS coordinates to iPhoto Assign a Place box&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;T&lt;/strong&gt;his procedure works great when you just want to add GPS coordinates in your photos no matter if your camera has a built-in GPS or not since any photo can be geotagged nowadays.&lt;/p&gt;  &lt;p&gt;Hope it helps!&lt;/p&gt;  &lt;p&gt;You can check my photos in this slideshow:&lt;/p&gt;  &lt;p&gt;&lt;object width="525" height="394"&gt; &lt;param name="flashvars" value="offsite=true&amp;lang;=en-us&amp;amp;page_show_url=%2Fphotos%2Fleniel%2Fshow%2F&amp;amp;page_show_back_url=%2Fphotos%2Fleniel%2F&amp;amp;user_id=8525461@N04&amp;amp;jump_to="&gt;&lt;/param&gt; &lt;param name="movie" value="http://www.flickr.com/apps/slideshow/show.swf?v=109615"&gt;&lt;/param&gt; &lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/slideshow/show.swf?v=109615" allowFullScreen="true" flashvars="offsite=true&amp;lang=en-us&amp;page_show_url=%2Fphotos%2Fleniel%2Fshow%2F&amp;page_show_back_url=%2Fphotos%2Fleniel%2F&amp;user_id=8525461@N04&amp;jump_to=" width="525" height="394"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4926735770070291800-8046930678232237781?l=www.leniel.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/NMTAkgyBDyd3kx5-U6Vk_xLqyNk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NMTAkgyBDyd3kx5-U6Vk_xLqyNk/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/NMTAkgyBDyd3kx5-U6Vk_xLqyNk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NMTAkgyBDyd3kx5-U6Vk_xLqyNk/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/leniel?a=xt8TE8lrsfY:Y6pgRJC13Hc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=xt8TE8lrsfY:Y6pgRJC13Hc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=xt8TE8lrsfY:Y6pgRJC13Hc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=xt8TE8lrsfY:Y6pgRJC13Hc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=xt8TE8lrsfY:Y6pgRJC13Hc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=xt8TE8lrsfY:Y6pgRJC13Hc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=xt8TE8lrsfY:Y6pgRJC13Hc:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=xt8TE8lrsfY:Y6pgRJC13Hc:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=xt8TE8lrsfY:Y6pgRJC13Hc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=xt8TE8lrsfY:Y6pgRJC13Hc:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=xt8TE8lrsfY:Y6pgRJC13Hc:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=xt8TE8lrsfY:Y6pgRJC13Hc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leniel/~4/xt8TE8lrsfY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.leniel.net/feeds/8046930678232237781/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.leniel.net/2011/12/extract-gps-coord-google-maps-geotag.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/8046930678232237781?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/8046930678232237781?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/leniel/~3/xt8TE8lrsfY/extract-gps-coord-google-maps-geotag.html" title="Extract GPS coord from Google Maps to geotag photos" /><author><name>Leniel Macaferi</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-iFmNclBdT5Y/AAAAAAAAAAI/AAAAAAAABfw/6QE8faPUWOg/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-OGAEYQ8Edog/Tv3D2PivmMI/AAAAAAAABWA/CXXcXBmn3T8/s72-c/SonyHX100VFront4.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.leniel.net/2011/12/extract-gps-coord-google-maps-geotag.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkECSHY_eSp7ImA9WhRRGEg.&quot;"><id>tag:blogger.com,1999:blog-4926735770070291800.post-7017618519460317856</id><published>2011-12-01T17:33:00.000-02:00</published><updated>2011-12-02T18:44:29.841-02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-02T18:44:29.841-02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ResourceManager" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET MVC" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><category scheme="http://www.blogger.com/atom/ns#" term="resource files" /><category scheme="http://www.blogger.com/atom/ns#" term="resx" /><category scheme="http://www.blogger.com/atom/ns#" term="translation" /><category scheme="http://www.blogger.com/atom/ns#" term="helpers" /><category scheme="http://www.blogger.com/atom/ns#" term="Localization" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><category scheme="http://www.blogger.com/atom/ns#" term="Razor" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="DLL" /><category scheme="http://www.blogger.com/atom/ns#" term="L10n" /><title>ResourceManager with External Localization Assembly</title><content type="html">&lt;p&gt;As a software developer I like to work with everything that is related to software &lt;a href="http://en.wikipedia.org/wiki/Language_localisation" target="_blank"&gt;Localization&lt;/a&gt; known as L10n. Besides being a developer working defining the architecture that will be adopted in a given project and doing the hard “FUN” work writing the code, I’m also a &lt;a href="http://www.proz.com/translator/849397" target="_blank"&gt;translator&lt;/a&gt; if you don’t know it yet.&lt;/p&gt;  &lt;p&gt;One thing I've been trying to do recently is to be able to use localized strings that are present in an external assembly [ DLL ] using the &lt;a href="http://msdn.microsoft.com/en-us/library/system.resources.resourcemanager.aspx" target="_blank"&gt;ResourceManager&lt;/a&gt; object.     &lt;br /&gt;I have localized strings in resource [ &lt;a href="http://msdn.microsoft.com/en-us/library/ekyft91f%28v=VS.90%29.aspx" target="_blank"&gt;.resx&lt;/a&gt; ] files that are specific for each locale I support. I place these .resx files in a separate class library project to maintain things organized.&lt;/p&gt;  &lt;p&gt;So, suppose the namespace of this class library is &lt;font size="2" face="Courier New"&gt;MyProject.L10n&lt;/font&gt; and the .resx file name is &lt;font size="2" face="Courier New"&gt;Localization.resx&lt;/font&gt;. This gives me access to a class named &lt;font size="2" face="Courier New"&gt;Localization&lt;/font&gt; within the code. I also have &lt;font size="2" face="Courier New"&gt;Localization.pt.resx&lt;/font&gt;. I support English and Portuguese locales in my project for now. This naming pattern allows me to have in the future a file called &lt;font size="2" face="Courier New"&gt;Localization.es-ES.resx&lt;/font&gt; for Castilian Spanish (as written and spoken in Spain) and another one called &lt;font size="2" face="Courier New"&gt;Localization.es-AR.resx&lt;/font&gt; for Argentine Spanish. During runtime the .NET framework will select the correct .resx file to extract the localized string from based on the current culture the user has set while browsing my website. &lt;/p&gt;  &lt;p&gt;After adding a reference to this class library, I'm able to use this code in my ASP.NET MVC project in a Razor view:&lt;/p&gt;  &lt;pre class="code"&gt;MyProject.L10n.&lt;span style="color: #2b91af"&gt;Localization&lt;/span&gt;.LocalizedString;&lt;/pre&gt;

&lt;p&gt;This works as expected, but it's not what I need, though. As you see the localized string key [ &lt;font size="2" face="Courier New"&gt;LocalizedString&lt;/font&gt; ] is hard coded. I want to be able to use the method &lt;a href="http://msdn.microsoft.com/en-us/library/d17ax2xk.aspx" target="_blank"&gt;GetString&lt;/a&gt; from the ResourceManager object so that I can write code like this:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: #2b91af"&gt;ResourceManager&lt;/span&gt;.GetString(item.DynamicLocalizedStringValue);&lt;/pre&gt;

&lt;p&gt;The problem and the catchy here is that in order to use the resource manager the way I want, I have to point it to the external assembly this way:&lt;/p&gt;

&lt;pre class="code"&gt;grid.Column(&lt;br /&gt;columnName: &lt;span style="color: #a31515"&gt;&amp;quot;Type&amp;quot;&lt;/span&gt;,&lt;br /&gt;header: &lt;span style="color: #2b91af"&gt;Localization&lt;/span&gt;.Type,format: (item) =&amp;gt; &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ResourceManager&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;MyProject.L10n.Localization&amp;quot;&lt;/span&gt;, &lt;span style="color: blue"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;Localization&lt;/span&gt;).Assembly).GetString(item.Type.ToString()))&lt;/pre&gt;

&lt;p&gt;This part does the tricky: &lt;font face="Courier New"&gt;&lt;font size="2"&gt;&lt;span style="color: blue"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;Localization&lt;/span&gt;).Assembly&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;In the code block above I’m using &lt;a href="http://msdn.microsoft.com/en-us/magazine/hh288075.aspx" target="_blank"&gt;WebGrid&lt;/a&gt; that is a new helper that comes with ASP.NET MVC 3. It simplifies the task of rendering tabular data. When I do &lt;font size="2" face="Courier New"&gt;item.Type.ToString()&lt;/font&gt; I’m actually getting different values for each row of my grid and I pass this dynamic value to &lt;font size="2" face="Courier New"&gt;ResourceManager&lt;/font&gt; that in return gives me the translated/localized version of a give string key.&lt;/p&gt;

&lt;p&gt;Going even further I’ve implemented a &lt;a href="http://weblogs.asp.net/scottgu/archive/2011/05/12/asp-net-mvc-3-and-the-helper-syntax-within-razor.aspx" target="_blank"&gt;Razor’s Helper method&lt;/a&gt; in a file called &lt;font size="2" face="Courier New"&gt;Helpers.cshtml&lt;/font&gt; and placed such file inside the &lt;font size="2" face="Courier New"&gt;App_Code&lt;/font&gt; folder. This is the helper’s code:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: yellow; color: black"&gt;@&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;using &lt;/span&gt;&lt;span style="background: white; color: black"&gt;System.Resources
&lt;/span&gt;&lt;span style="background: yellow; color: black"&gt;@&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;using &lt;/span&gt;&lt;span style="background: white; color: black"&gt;MyProject.L10n

&lt;/span&gt;&lt;span style="background: yellow; color: black"&gt;@helper &lt;/span&gt;&lt;span style="background: white; color: black"&gt;GetLocalizedString(&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;string &lt;/span&gt;&lt;span style="background: white; color: black"&gt;stringValue)
{
    &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;ResourceManager &lt;/span&gt;&lt;span style="background: white; color: black"&gt;rm = &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;new &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;ResourceManager&lt;/span&gt;&lt;span style="background: white; color: black"&gt;(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;&amp;quot;MyProject.L10n.Localization&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: black"&gt;, &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;typeof &lt;/span&gt;&lt;span style="background: white; color: black"&gt;(&lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;Localization&lt;/span&gt;&lt;span style="background: white; color: black"&gt;).Assembly);

    &lt;/span&gt;&lt;span style="background: yellow; color: black"&gt;@&lt;/span&gt;&lt;span style="background: white; color: black"&gt;rm.GetString(stringValue);
}&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Now it’s just a matter of calling the helper this way in whatever place/view I need it:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: black"&gt;grid.Column(
columnName: &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;&amp;quot;Type&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: black"&gt;,
header: &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;Localization&lt;/span&gt;&lt;span style="background: white; color: black"&gt;.Type,
format: (item) =&amp;gt; @Helpers.GetLocalizedString(item.Type.ToString()))&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;The above code is way more clear than the one I showed your before…&lt;/p&gt;

&lt;p&gt;Hope this post helps shed some light in this subject since the only thing that should be done is to get a reference to the assembly that holds the &lt;font size="2" face="Courier New"&gt;Localization&lt;/font&gt; class and pass it to the ResourceManger’s constructor.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4926735770070291800-7017618519460317856?l=www.leniel.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/uQD3DlptjTZbKO5dV1jX3oubzno/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uQD3DlptjTZbKO5dV1jX3oubzno/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/uQD3DlptjTZbKO5dV1jX3oubzno/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uQD3DlptjTZbKO5dV1jX3oubzno/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/leniel?a=cPUjk4zkRz8:ZoIdU5kVY_k:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=cPUjk4zkRz8:ZoIdU5kVY_k:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=cPUjk4zkRz8:ZoIdU5kVY_k:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=cPUjk4zkRz8:ZoIdU5kVY_k:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=cPUjk4zkRz8:ZoIdU5kVY_k:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=cPUjk4zkRz8:ZoIdU5kVY_k:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=cPUjk4zkRz8:ZoIdU5kVY_k:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=cPUjk4zkRz8:ZoIdU5kVY_k:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=cPUjk4zkRz8:ZoIdU5kVY_k:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=cPUjk4zkRz8:ZoIdU5kVY_k:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=cPUjk4zkRz8:ZoIdU5kVY_k:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=cPUjk4zkRz8:ZoIdU5kVY_k:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leniel/~4/cPUjk4zkRz8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.leniel.net/feeds/7017618519460317856/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.leniel.net/2011/10/resourcemanager-external-assembly-dll.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/7017618519460317856?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/7017618519460317856?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/leniel/~3/cPUjk4zkRz8/resourcemanager-external-assembly-dll.html" title="ResourceManager with External Localization Assembly" /><author><name>Leniel Macaferi</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-iFmNclBdT5Y/AAAAAAAAAAI/AAAAAAAABfw/6QE8faPUWOg/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.leniel.net/2011/10/resourcemanager-external-assembly-dll.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMMQn06cSp7ImA9WhRSGUo.&quot;"><id>tag:blogger.com,1999:blog-4926735770070291800.post-7303839205232754434</id><published>2011-11-21T18:38:00.002-02:00</published><updated>2011-11-22T12:51:23.319-02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-22T12:51:23.319-02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Data API" /><category scheme="http://www.blogger.com/atom/ns#" term="Blogger" /><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><title>Blogger Posts Searcher using Google Data .NET/Java Client APIs</title><content type="html">&lt;p&gt;It just happened today that I wanted to know if I had already published a post with a given title in one of the blogs I publish: &lt;a href="http://jes4us.blogspot.com" target="_blank"&gt;http://jes4us.blogspot.com&lt;/a&gt;. During translation (I translate the posts from English to Portuguese) I had a feeling that I had&amp;#160; already worked on a similar text… well, it turns out I was mistaken!&lt;/p&gt;

&lt;p&gt;Instead of going through the extensive list of &lt;a style="margin-bottom: 1em; float: right; margin-left: 1em; clear: right" href="http://code.google.com/apis/blogger/docs/2.0/developers_guide.html" target="_blank" imageanchor="1"&gt;&lt;/a&gt;posts looking one by one I thought why not leverage the power of Google Data API? You may say: why not do a simple Google search instead? Good point. As I like to play with code I couldn’t resist.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://code.google.com/apis/blogger/docs/2.0/developers_guide.html" target="_blank"&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" border="0" src="http://www.gstatic.com/codesite/ph/images/search-48.gif" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So here it is. A simple and faster way of knowing if I have a post with a given title. Bellow you’ll find the codez to both the .NET client API and the Java one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Blogger Data API for .NET 
    &lt;br /&gt;&lt;/strong&gt;1 - Download the client library here: &lt;a title="http://code.google.com/p/google-gdata/downloads/list" href="http://code.google.com/p/google-gdata/downloads/list"&gt;http://code.google.com/p/google-gdata/downloads/list&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2 - Install the .msi package &lt;a href="http://code.google.com/p/google-gdata/downloads/detail?name=Google_Data_API_Setup_1.9.0.0.msi"&gt;Google_Data_API_Setup_1.9.0.0.msi&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;3 - Create a new Console project and reference the DLL &lt;font size="2" face="Courier New"&gt;Google.GData.Client&lt;/font&gt; that’s in this folder: &lt;font size="2" face="Courier New"&gt;C:\Google Data API SDK\Redist&lt;/font&gt;&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: blue"&gt;using &lt;/span&gt;&lt;span style="background: white; color: black"&gt;System;
&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;using &lt;/span&gt;&lt;span style="background: white; color: black"&gt;System.Linq;
&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;&lt;strong&gt;using &lt;/strong&gt;&lt;/span&gt;&lt;span style="background: white; color: black"&gt;&lt;strong&gt;Google.GData.Client;&lt;/strong&gt;

&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;namespace &lt;/span&gt;&lt;span style="background: white; color: black"&gt;BlogPostsSearcher
{
    &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;class &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;Program
    &lt;/span&gt;&lt;span style="background: white; color: black"&gt;{
        &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;static void &lt;/span&gt;&lt;span style="background: white; color: black"&gt;Main(&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;string&lt;/span&gt;&lt;span style="background: white; color: black"&gt;[] args)
        {
            &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;Service &lt;/span&gt;&lt;span style="background: white; color: black"&gt;bloggeService = AcquireService();

            &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;AtomFeed &lt;/span&gt;&lt;span style="background: white; color: black"&gt;feed = AcquireAndSetupFeed(bloggeService);

            &lt;/span&gt;&lt;span style="background: white; color: green"&gt;// Search posts that contain the word &amp;quot;StringToSearchFor&amp;quot; in their titles
            &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black"&gt;query = feed.Entries.Where(p =&amp;gt; p.Title.Text.Contains(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;&amp;quot;StringToSearchFor&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: black"&gt;);

            &lt;/span&gt;&lt;span style="background: white; color: green"&gt;// Writes the Blog's Title
            &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;Console&lt;/span&gt;&lt;span style="background: white; color: black"&gt;.WriteLine(feed.Title.Text);

            &lt;/span&gt;&lt;span style="background: white; color: green"&gt;// Prints each post found...
            &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;foreach &lt;/span&gt;&lt;span style="background: white; color: black"&gt;(&lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;AtomEntry &lt;/span&gt;&lt;span style="background: white; color: black"&gt;entry &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;in &lt;/span&gt;&lt;span style="background: white; color: black"&gt;query)
            {
                &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;Console&lt;/span&gt;&lt;span style="background: white; color: black"&gt;.WriteLine(&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;string&lt;/span&gt;&lt;span style="background: white; color: black"&gt;.Format(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;&amp;quot;Post Title: {0} - Date Published: {1}&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: black"&gt;, entry.Title.Text, entry.Published.ToShortDateString()));
            }

        }

        &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;private static &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;AtomFeed &lt;/span&gt;&lt;span style="background: white; color: black"&gt;AcquireAndSetupFeed(&lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;Service &lt;/span&gt;&lt;span style="background: white; color: black"&gt;service)
        {
            &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;FeedQuery &lt;/span&gt;&lt;span style="background: white; color: black"&gt;blogFeedUri = &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;new &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;FeedQuery&lt;/span&gt;&lt;span style="background: white; color: black"&gt;(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;&amp;quot;http://www.blogger.com/feeds/&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: black"&gt;+ YourBlogID + &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;&amp;quot;/posts/default&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: black"&gt;);

            &lt;/span&gt;&lt;span style="background: white; color: green"&gt;// Setting the number of posts to retrieve
            &lt;/span&gt;&lt;span style="background: white; color: black"&gt;blogFeedUri.NumberToRetrieve = 1000;

            &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;AtomFeed &lt;/span&gt;&lt;span style="background: white; color: black"&gt;feed = service.Query(blogFeedUri);
            
            &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;return &lt;/span&gt;&lt;span style="background: white; color: black"&gt;feed;
        }

        &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;private static &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;Service &lt;/span&gt;&lt;span style="background: white; color: black"&gt;AcquireService()
        {
            &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;Service &lt;/span&gt;&lt;span style="background: white; color: black"&gt;service = &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;new &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;Service&lt;/span&gt;&lt;span style="background: white; color: black"&gt;(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;&amp;quot;blogger&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: black"&gt;, &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;&amp;quot;YourCompanyName-BloggerPostsSearcher&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: black"&gt;);

            service.Credentials = &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;new &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;GDataCredentials&lt;/span&gt;&lt;span style="background: white; color: black"&gt;(&lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;&amp;quot;YourEmailAddress@gmail.com&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: black"&gt;, &lt;/span&gt;&lt;span style="background: white; color: #a31515"&gt;&amp;quot;YourPassword&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: black"&gt;);

            &lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;GDataGAuthRequestFactory &lt;/span&gt;&lt;span style="background: white; color: black"&gt;factory = (&lt;/span&gt;&lt;span style="background: white; color: #2b91af"&gt;GDataGAuthRequestFactory&lt;/span&gt;&lt;span style="background: white; color: black"&gt;)service.RequestFactory;
            
            &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;return &lt;/span&gt;&lt;span style="background: white; color: black"&gt;service;
        }
    }
}
&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;Blogger Data API for Java 
    &lt;br /&gt;&lt;/strong&gt;1 - Download the client library here: &lt;a title="http://code.google.com/p/gdata-java-client/downloads/list" href="http://code.google.com/p/gdata-java-client/downloads/list" target="_blank"&gt;http://code.google.com/p/gdata-java-client/downloads/list&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2 - Unzip the file &lt;a title="http://code.google.com/p/gdata-java-client/downloads/detail?name=gdata-src.java-1.46.0.zip&amp;amp;can=2&amp;amp;q=" href="http://code.google.com/p/gdata-java-client/downloads/detail?name=gdata-src.java-1.46.0.zip" target="_blank"&gt;http://code.google.com/p/gdata-java-client/downloads/detail?name=gdata-src.java-1.46.0.zip&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3 - Create a new Java Project and add references to: 
  &lt;br /&gt;&lt;font size="2" face="Courier New"&gt;- gdata-client-1.0.jar&lt;/font&gt; that’s in this path: &lt;font size="2" face="Courier New"&gt;gdata/java/lib/ 
    &lt;br /&gt;- google-collect-1.0-rc1&lt;/font&gt; that’s in this path: &lt;font size="2" face="Courier New"&gt;gdata/java/deps/&lt;/font&gt;&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: #7f0055"&gt;import &lt;/span&gt;java.io.IOException;
&lt;span style="color: #7f0055"&gt;import &lt;/span&gt;java.net.URL;
&lt;span style="color: #7f0055"&gt;import &lt;/span&gt;java.util.List;

&lt;span style="color: #7f0055"&gt;import &lt;/span&gt;com.google.gdata.client.GoogleService;
&lt;span style="color: #7f0055"&gt;import &lt;/span&gt;com.google.gdata.data.Entry;
&lt;span style="color: #7f0055"&gt;import &lt;/span&gt;com.google.gdata.data.Feed;
&lt;span style="color: #7f0055"&gt;import &lt;/span&gt;com.google.gdata.util.AuthenticationException;
&lt;span style="color: #7f0055"&gt;import &lt;/span&gt;com.google.gdata.util.ServiceException;

&lt;span style="color: #3f5fbf"&gt;/**
 * &lt;/span&gt;&lt;span style="color: #7f9fbf"&gt;@author &lt;/span&gt;&lt;span style="color: #3f5fbf"&gt;Leniel Macaferi
 * &lt;/span&gt;&lt;span style="color: #7f9fbf"&gt;@date &lt;/span&gt;&lt;span style="color: #3f5fbf"&gt;11&lt;/span&gt;&lt;span style="color: #7f7f9f"&gt;-&lt;/span&gt;&lt;span style="color: #3f5fbf"&gt;21&lt;/span&gt;&lt;span style="color: #7f7f9f"&gt;-&lt;/span&gt;&lt;span style="color: #3f5fbf"&gt;2011
 */
&lt;/span&gt;&lt;span style="color: #7f0055"&gt;public class &lt;/span&gt;BloggerClient&lt;br /&gt;{
    &lt;span style="color: #7f0055"&gt;public static void &lt;/span&gt;main(String[] args) &lt;span style="color: #7f0055"&gt;throws &lt;/span&gt;IOException, ServiceException
    {
        &lt;span style="color: #7f0055"&gt;try
        &lt;/span&gt;{
            GoogleService bloggerService = &lt;span style="color: #7f0055"&gt;new &lt;/span&gt;GoogleService(&lt;span style="color: #2a00ff"&gt;&amp;quot;blogger&amp;quot;&lt;/span&gt;, &lt;span style="color: #2a00ff"&gt;&amp;quot;YourCompanyName-BloggerPostsSearcher&amp;quot;&lt;/span&gt;);

            bloggerService.setUserCredentials(&lt;span style="color: #2a00ff"&gt;&amp;quot;YourEmailAddress@gmail.com&amp;quot;&lt;/span&gt;, &lt;span style="color: #2a00ff"&gt;&amp;quot;YourPassword&amp;quot;&lt;/span&gt;);
&lt;span style="color: #3f7f5f"&gt;            
            &lt;/span&gt;searchPosts(bloggerService, &lt;span style="color: #2a00ff"&gt;&amp;quot;YourBlogID&amp;quot;&lt;/span&gt;, &lt;span style="color: #2a00ff"&gt;&amp;quot;StringToSearchFor&amp;quot;&lt;/span&gt;);
        }
        &lt;span style="color: #7f0055"&gt;catch &lt;/span&gt;(AuthenticationException e)
        {
            &lt;span style="color: #3f7f5f"&gt;// &lt;/span&gt;&lt;span style="color: #7f9fbf"&gt;TODO &lt;/span&gt;&lt;span style="color: #3f7f5f"&gt;Auto-generated catch block
            &lt;/span&gt;e.printStackTrace();
        }

    }
    
    &lt;span style="color: #7f0055"&gt;public static void &lt;/span&gt;searchPosts(GoogleService myService, String blogId, String search) &lt;span style="color: #7f0055"&gt;throws &lt;/span&gt;ServiceException, IOException
    {
        &lt;span style="color: #3f7f5f"&gt;// Request the feed
        &lt;/span&gt;URL feedUrl = &lt;span style="color: #7f0055"&gt;new &lt;/span&gt;URL(&lt;span style="color: #2a00ff"&gt;&amp;quot;http://www.blogger.com/feeds/&amp;quot; &lt;/span&gt;+ blogId + &lt;span style="color: #2a00ff"&gt;&amp;quot;/posts/default&amp;quot;&lt;/span&gt;);
            
        Feed resultFeed = myService.getFeed(feedUrl, Feed.&lt;span style="color: #7f0055"&gt;class&lt;/span&gt;);

        &lt;span style="color: #3f7f5f"&gt;// Setting the number of posts to retrieve...
        &lt;/span&gt;resultFeed.setTotalResults(1000);
        
        List&amp;lt;Entry&amp;gt; posts = resultFeed.getEntries();
        
        &lt;span style="color: #3f7f5f"&gt;// Print the results
        &lt;/span&gt;System.&lt;span style="color: #0000c0"&gt;out&lt;/span&gt;.println(resultFeed.getTitle().getPlainText());
        
        &lt;span style="color: #7f0055"&gt;for &lt;/span&gt;(Entry post : posts)
        {
            &lt;span style="color: #7f0055"&gt;if&lt;/span&gt;(post.getTitle().getPlainText().contains(search))
            {
                System.&lt;span style="color: #0000c0"&gt;out&lt;/span&gt;.println(&lt;span style="color: #2a00ff"&gt;&amp;quot;\t&amp;quot; &lt;/span&gt;+ post.getTitle().getPlainText());
            }
        }
        
        System.&lt;span style="color: #0000c0"&gt;out&lt;/span&gt;.println();
    }
}&lt;/pre&gt;

&lt;p&gt;In the code above you need to replace accordingly the following parts:&lt;/p&gt;

&lt;p&gt;- YourEmailAddress 
  &lt;br /&gt;- YourPassword 

  &lt;br /&gt;- YourBlogID&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;References 
    &lt;br /&gt;&lt;/strong&gt;&lt;a href="http://code.google.com/apis/blogger/code.html" target="_blank"&gt;Blogger Client Libraries and Sample Code&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://code.google.com/apis/blogger/docs/2.0/developers_guide_dotnet.html" target="_blank"&gt;Blogger Developer's Guide: .NET&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://code.google.com/apis/blogger/docs/2.0/developers_guide_java.html" target="_blank"&gt;Blogger Developer's Guide: Java&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4926735770070291800-7303839205232754434?l=www.leniel.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/gPcTl12sje2othmwxCp3HMg4pCo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gPcTl12sje2othmwxCp3HMg4pCo/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/gPcTl12sje2othmwxCp3HMg4pCo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gPcTl12sje2othmwxCp3HMg4pCo/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/leniel?a=ycxO8d2j4TE:HlzGPAVCI7w:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=ycxO8d2j4TE:HlzGPAVCI7w:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=ycxO8d2j4TE:HlzGPAVCI7w:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=ycxO8d2j4TE:HlzGPAVCI7w:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=ycxO8d2j4TE:HlzGPAVCI7w:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=ycxO8d2j4TE:HlzGPAVCI7w:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=ycxO8d2j4TE:HlzGPAVCI7w:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=ycxO8d2j4TE:HlzGPAVCI7w:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=ycxO8d2j4TE:HlzGPAVCI7w:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=ycxO8d2j4TE:HlzGPAVCI7w:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=ycxO8d2j4TE:HlzGPAVCI7w:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=ycxO8d2j4TE:HlzGPAVCI7w:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leniel/~4/ycxO8d2j4TE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.leniel.net/feeds/7303839205232754434/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.leniel.net/2011/11/google-blogger-net-java-client-apis.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/7303839205232754434?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/7303839205232754434?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/leniel/~3/ycxO8d2j4TE/google-blogger-net-java-client-apis.html" title="Blogger Posts Searcher using Google Data .NET/Java Client APIs" /><author><name>Leniel Macaferi</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-iFmNclBdT5Y/AAAAAAAAAAI/AAAAAAAABfw/6QE8faPUWOg/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.leniel.net/2011/11/google-blogger-net-java-client-apis.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU8FSXY_cCp7ImA9WhRSFkg.&quot;"><id>tag:blogger.com,1999:blog-4926735770070291800.post-5282781320130718481</id><published>2011-11-13T19:52:00.001-02:00</published><updated>2011-11-18T21:10:18.848-02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-18T21:10:18.848-02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="server" /><category scheme="http://www.blogger.com/atom/ns#" term="RavenDB" /><category scheme="http://www.blogger.com/atom/ns#" term="embedded" /><category scheme="http://www.blogger.com/atom/ns#" term="NoSQL" /><category scheme="http://www.blogger.com/atom/ns#" term="management UI" /><category scheme="http://www.blogger.com/atom/ns#" term="database" /><title>RavenDB Embedded with Management Studio UI</title><content type="html">&lt;p align="center"&gt;Go directly to &lt;a href="http://www.leniel.net/2011/11/ravendb-embedded-management-studio-ui.html#NoteToSelf"&gt;solution&lt;/a&gt; with no bla bla bla…&lt;/p&gt;  &lt;p&gt;I’ve been playing with &lt;a href="http://ravendb.net/" target="_blank"&gt;RavenDB&lt;/a&gt; (a &lt;a href="http://en.wikipedia.org/wiki/NoSQL" target="_blank"&gt;NoSQL&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/Document-oriented_database" target="_blank"&gt;document-oriented&lt;/a&gt; database) in an ASP.NET MVC 4 project for the past week. One thing I tried to do was to access &lt;a href="http://ayende.com/blog/125953/peeking-behind-the-curtains-the-new-ravendb-management-studio" target="_blank"&gt;RavenDB Management Studio UI&lt;/a&gt; so that I could see what’s actually present within the document store. This is important because one needs to check if docs are really being inserted, related docs are being deleted, etc…&lt;/p&gt;  &lt;p&gt;Given that I’m running the embedded version of RavenDB (&lt;code&gt;&lt;a href="http://www.nuget.org/List/Packages/RavenDB-Embedded" target="_blank"&gt;RavenDB-Embedded.1.0.499&lt;/a&gt;&lt;/code&gt; package installed via NuGet in Visual Studio 2010), I was stuck trying to access the management studio since there isn’t much documentation on this subject when it comes to the &lt;code&gt;EmbeddableDocumentStore.&lt;/code&gt; After struggling with it for about an hour of Googling and try and error, I decided to post a question at StackOverflow: &lt;a href="http://stackoverflow.com/q/8112966/114029" target="_blank"&gt;Running RavenDB as an EmbeddableDocumentStore and accessing RavenDB Management Studio&lt;/a&gt;. Then I took a break to have launch and took a nap. After that I got back here to try a different approach and it really does work. Of course this is &lt;em&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;only a way&lt;/strong&gt;&lt;/font&gt;&lt;/em&gt; to achieve what I want. This may not be the best approach but it’s enough. Just follow theses steps:&lt;/p&gt;  &lt;p&gt;1 - Grab RavenDB latest build here:    &lt;br /&gt;&lt;a title="http://builds.hibernatingrhinos.com/downloadlatest/ravendb" href="http://builds.hibernatingrhinos.com/downloadlatest/ravendb" target="_blank"&gt;http://builds.hibernatingrhinos.com/downloadlatest/ravendb&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;2 - Extract the files to &lt;font size="2" face="Courier New"&gt;C:\RavenDB-Build-499&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;3 - Edit the &lt;font size="2" face="Courier New"&gt;.config&lt;/font&gt; file in &lt;font size="2" face="Courier New"&gt;C:\RavenDB-Build-499\Server\Raven.Server.exe.config&lt;/font&gt; to point to your embedded database:&lt;/p&gt;  &lt;p&gt;&lt;code&gt;&lt;span style="color: #008080"&gt;&amp;lt;appSettings&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;lt;add&lt;/span&gt;&lt;span style="color: #996699"&gt; key&lt;/span&gt;&lt;span style="color: #996699"&gt;=&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;quot;Raven/Port&amp;quot;&lt;/span&gt;&lt;span style="color: #996699"&gt; value&lt;/span&gt;&lt;span style="color: #996699"&gt;=&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;quot;8088&amp;quot;&lt;/span&gt;&lt;span style="color: #008080"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;lt;add&lt;/span&gt;&lt;span style="color: #996699"&gt; key&lt;/span&gt;&lt;span style="color: #996699"&gt;=&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;quot;Raven/DataDir&amp;quot;&lt;/span&gt;&lt;span style="color: #996699"&gt; value&lt;/span&gt;&lt;span style="color: #996699"&gt;=&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;quot;C:\MyProject\trunk\MyProject\        &lt;br /&gt;App_Data\Database&amp;quot;&lt;/span&gt;&lt;span style="color: #008080"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;lt;add&lt;/span&gt;&lt;span style="color: #996699"&gt; key&lt;/span&gt;&lt;span style="color: #996699"&gt;=&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;quot;Raven/AnonymousAccess&amp;quot;&lt;/span&gt;&lt;span style="color: #996699"&gt; value&lt;/span&gt;&lt;span style="color: #996699"&gt;=&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;quot;Get&amp;quot;&lt;/span&gt;&lt;span style="color: #008080"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;        &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;lt;/appSettings&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;4 - Click the &lt;font size="2" face="Courier New"&gt;Start.cmd&lt;/font&gt; present in the root folder &lt;font size="2" face="Courier New"&gt;C:\RavenDB-Build-499\Start.cmd&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;The server status output window should appear while it starts:&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh5.ggpht.com/-3Jxbaq1XUeM/TsA8AeLHEZI/AAAAAAAABUc/Vgknn1XiURU/s1600-h/RavenDBServerStartCmdOutputWindow%25255B14%25255D.png" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="RavenDB server status window" border="0" alt="RavenDB server status window" src="http://lh5.ggpht.com/-Xq-s_fNk3Cg/TsA8CmgWFoI/AAAAAAAABUg/bOx4QaJ15ls/RavenDBServerStartCmdOutputWindow_thumb%25255B10%25255D.png?imgmax=800" width="525" height="694" /&gt;&lt;/a&gt;Figure 1 - RavenDB server status window&lt;/p&gt;  &lt;p&gt;When the server finishes its starting process, the Silverlight Management UI should be automatically opened in your preferred browser.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh4.ggpht.com/-LFVw-gBTPio/TsA8DfXaGqI/AAAAAAAABUk/61SHbksONCU/s1600-h/RavenDBManagementStudioUIEmbeddedDatabase%25255B9%25255D.png" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="RavenDB Management UI (Web UI)" border="0" alt="RavenDB Management UI (Web UI)" src="http://lh5.ggpht.com/-CyU87qPqfLE/TsA8EqA2O8I/AAAAAAAABUo/IZ5xSZbOPIU/RavenDBManagementStudioUIEmbeddedDatabase_thumb%25255B7%25255D.png?imgmax=800" width="525" height="510" /&gt;&lt;/a&gt;Figure 2 - RavenDB Management Studio UI (Web UI)&lt;/p&gt;  &lt;p&gt;Now I can see my docs, indexes, etc… and I hope you can too! :D&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a name="NoteToSelf"&gt;&lt;strong&gt;Note to self          &lt;br /&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/strong&gt;According to &lt;a href="http://stackoverflow.com/questions/8112966/running-ravendb-as-an-embeddabledocumentstore-and-accessing-ravendb-management-s/8115796#8115796" target="_blank"&gt;John Allers&lt;/a&gt;, one should be able to access the Management Studio without having to start the server manually. That’s fine and I had already tried that, but I could not get it working at first (some days ago). This has led me to try everything else today and my last resort was posting a question at StackOverflow. After trying once more the same procedure, that is, trying to access the management studio using the URL http://localhost:8080, I finally got it working! Go figure. One possibility is that I had another service running on port 8080 when I first attempted to access the UI. As Windows has restarted since then, that service (&lt;a href="http://www.leniel.net/2011/07/svn-hudson-job-continuous-integration.html" target="_blank"&gt;Hudson probably&lt;/a&gt;) that was running on port 8080 is stopped and now everything just works as expected.&lt;/p&gt;  &lt;p&gt;Things to do:&lt;/p&gt;  &lt;p&gt;1 - Instantiate your &lt;span style="color: #2b91af"&gt;&lt;font size="2" face="Courier New"&gt;EmbeddableDocumentStore&lt;/font&gt; &lt;/span&gt;this way:&lt;/p&gt;  &lt;pre class="code"&gt;_documentStore = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;EmbeddableDocumentStore
            &lt;/span&gt;{
                ConnectionStringName = &lt;span style="color: #a31515"&gt;&amp;quot;YourDbName&amp;quot;&lt;/span&gt;,
                &lt;strong&gt;UseEmbeddedHttpServer&lt;/strong&gt; = &lt;span style="color: blue"&gt;true
            &lt;/span&gt;};&lt;/pre&gt;

&lt;p&gt;2 - Copy &lt;font size="2" face="Courier New"&gt;Raven.Studio.xap&lt;/font&gt; present in C:\RavenDB-Build-499\Server\ folder to the root folder of your web project&lt;/p&gt;

&lt;p&gt;3 - Run you your web app&lt;/p&gt;

&lt;p&gt;4 - Access &lt;a href="http://localhost:8080"&gt;http://localhost:8080&lt;/a&gt; and voila… everything SHOULD work out of the box.&lt;/p&gt;

&lt;p&gt;5 - Select Default Database:&lt;/p&gt;

&lt;p align="center"&gt;&lt;a href="http://lh3.ggpht.com/-pc0yCbBlrrY/TsB5CxSPrUI/AAAAAAAABUs/YSw_trvcakw/s1600-h/RavenDBManagementStudioSelectDatabase%25255B6%25255D.png" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="RavenDB Management Studio accessed without running the server manually" border="0" alt="RavenDB Management Studio accessed without running the server manually" src="http://lh6.ggpht.com/-VtF9-5DItqg/TsB5EO295oI/AAAAAAAABU0/OTHEM5K21Fo/RavenDBManagementStudioSelectDatabase_thumb%25255B4%25255D.png?imgmax=800" width="525" height="519" /&gt;&lt;/a&gt;Figure 3 - RavenDB Management Studio accessed without running the server manually&lt;/p&gt;

&lt;p align="left"&gt;&lt;strong&gt;Resources&lt;/strong&gt; 

  &lt;br /&gt;&lt;a href="http://msdn.microsoft.com/pt-br/magazine/hh547101%28en-us%29.aspx" target="_blank"&gt;Embedding RavenDB into an ASP.NET MVC 3 Application&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4926735770070291800-5282781320130718481?l=www.leniel.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/GaCrzPFxSbIWuffp5Rg6gZQfjrI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GaCrzPFxSbIWuffp5Rg6gZQfjrI/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/GaCrzPFxSbIWuffp5Rg6gZQfjrI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GaCrzPFxSbIWuffp5Rg6gZQfjrI/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/leniel?a=Bd6oWEEwmBs:dYIgkEc2oOU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=Bd6oWEEwmBs:dYIgkEc2oOU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=Bd6oWEEwmBs:dYIgkEc2oOU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=Bd6oWEEwmBs:dYIgkEc2oOU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=Bd6oWEEwmBs:dYIgkEc2oOU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=Bd6oWEEwmBs:dYIgkEc2oOU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=Bd6oWEEwmBs:dYIgkEc2oOU:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=Bd6oWEEwmBs:dYIgkEc2oOU:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=Bd6oWEEwmBs:dYIgkEc2oOU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=Bd6oWEEwmBs:dYIgkEc2oOU:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=Bd6oWEEwmBs:dYIgkEc2oOU:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=Bd6oWEEwmBs:dYIgkEc2oOU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leniel/~4/Bd6oWEEwmBs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.leniel.net/feeds/5282781320130718481/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.leniel.net/2011/11/ravendb-embedded-management-studio-ui.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/5282781320130718481?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/5282781320130718481?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/leniel/~3/Bd6oWEEwmBs/ravendb-embedded-management-studio-ui.html" title="RavenDB Embedded with Management Studio UI" /><author><name>Leniel Macaferi</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-iFmNclBdT5Y/AAAAAAAAAAI/AAAAAAAABfw/6QE8faPUWOg/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-Xq-s_fNk3Cg/TsA8CmgWFoI/AAAAAAAABUg/bOx4QaJ15ls/s72-c/RavenDBServerStartCmdOutputWindow_thumb%25255B10%25255D.png?imgmax=800" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://www.leniel.net/2011/11/ravendb-embedded-management-studio-ui.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcMQHw-fCp7ImA9WhRTFkU.&quot;"><id>tag:blogger.com,1999:blog-4926735770070291800.post-1417726054433716448</id><published>2011-11-05T21:09:00.001-02:00</published><updated>2011-11-07T14:41:21.254-02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-07T14:41:21.254-02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="parallel programming" /><category scheme="http://www.blogger.com/atom/ns#" term="data structures" /><category scheme="http://www.blogger.com/atom/ns#" term="algorithms" /><category scheme="http://www.blogger.com/atom/ns#" term="traversal" /><category scheme="http://www.blogger.com/atom/ns#" term="queue" /><category scheme="http://www.blogger.com/atom/ns#" term="job interview" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="graph" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><category scheme="http://www.blogger.com/atom/ns#" term="tree" /><title>Tree Graph Ordered Traversal Level by Level in C#</title><content type="html">&lt;p&gt;Recently as part of a job interview process, I was asked to solve some programming problems. This post shows the solution for one of such problems.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Problem      &lt;br /&gt;&lt;/strong&gt;The problem ( or could we call it an algorithm exercise? ) is this:&lt;/p&gt;  &lt;p&gt;Consider a &lt;a href="en.wikipedia.org/wiki/Tree_(data_structure)" target="_blank"&gt;tree&lt;/a&gt; of integers. Knowing that its root node is 0, and given its &lt;a href="http://en.wikipedia.org/wiki/Adjacency_list" target="_blank"&gt;adjacency list&lt;/a&gt; as a two dimensional array of integers, write a function that prints out the elements/nodes in order/level by level starting from the root. That is, the root is printed in the first line, elements that can be reached from the root by a path of distance 1 in the second line, elements reached by a path of distance 2 in the third line, and so forth. For example, given the following adjacency list (draw the tree for a better view):&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;0 =&amp;gt; 1, 2, 3      &lt;br /&gt;1 =&amp;gt; 0, 4       &lt;br /&gt;2 =&amp;gt; 0       &lt;br /&gt;3 =&amp;gt; 0, 5       &lt;br /&gt;4 =&amp;gt; 1, 6       &lt;br /&gt;5 =&amp;gt; 3       &lt;br /&gt;6 =&amp;gt; 4&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;The program should print:&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;0      &lt;br /&gt;1 2 3       &lt;br /&gt;4 5       &lt;br /&gt;6&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Little bit of theory      &lt;br /&gt;&lt;/strong&gt;If you read about &lt;a href="http://en.wikipedia.org/wiki/Tree_%28graph_theory%29" target="_blank"&gt;Tree in Graph theory&lt;/a&gt;, you’ll see that we can represent a tree using a graph because a tree is an &lt;a href="http://en.wikipedia.org/wiki/Undirected_graph" target="_blank"&gt;undirected graph&lt;/a&gt; in which any two &lt;a href="http://en.wikipedia.org/wiki/Vertex_%28graph_theory%29" target="_blank"&gt;vertices&lt;/a&gt; are connected by &lt;i&gt;exactly one&lt;/i&gt; &lt;a href="http://en.wikipedia.org/wiki/Path_%28graph_theory%29" target="_blank"&gt;simple path&lt;/a&gt;. In other words, any connected graph without &lt;a href="http://en.wikipedia.org/wiki/Cycle_%28graph_theory%29" target="_blank"&gt;cycles&lt;/a&gt; is a tree.&lt;/p&gt;  &lt;p&gt;The tree in this problem isn’t a &lt;a href="http://en.wikipedia.org/wiki/Binary_tree" target="_blank"&gt;binary tree&lt;/a&gt;, it’s a &lt;a href="http://en.wikipedia.org/wiki/K-ary_tree" target="_blank"&gt;n-ary tree&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;     &lt;br /&gt;With theory in mind, here goes my proposed solution…&lt;/p&gt;  &lt;p&gt;I’m reusing some code from &lt;a href="http://www.leniel.net/2008/01/breadth-and-depth-first-search-part-2.html" target="_blank"&gt;past posts&lt;/a&gt;. In special, the Graph, AdjacencyList, Node, NodeList and EdgeToNeighbor classes.&lt;/p&gt;  &lt;p&gt;I use this method to fill a Graph with the Tree structure:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color: gray"&gt;/// &amp;lt;summary&amp;gt;
/// &lt;/span&gt;&lt;span style="color: green"&gt;Fills a graph with a given tree structure.
&lt;/span&gt;&lt;span style="color: gray"&gt;/// &amp;lt;/summary&amp;gt;
/// &amp;lt;param name=&amp;quot;graph&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;
&lt;/span&gt;&lt;span style="color: blue"&gt;private static void &lt;/span&gt;FillGraphWithTreeStructure(&lt;span style="color: #2b91af"&gt;Graph &lt;/span&gt;graph)
{
    &lt;span style="color: green"&gt;// Vertexes
    &lt;/span&gt;graph.AddNode(&lt;span style="color: #a31515"&gt;&amp;quot;0&amp;quot;&lt;/span&gt;, &lt;span style="color: blue"&gt;null&lt;/span&gt;);
    graph.AddNode(&lt;span style="color: #a31515"&gt;&amp;quot;1&amp;quot;&lt;/span&gt;, &lt;span style="color: blue"&gt;null&lt;/span&gt;);
    graph.AddNode(&lt;span style="color: #a31515"&gt;&amp;quot;2&amp;quot;&lt;/span&gt;, &lt;span style="color: blue"&gt;null&lt;/span&gt;);
    graph.AddNode(&lt;span style="color: #a31515"&gt;&amp;quot;3&amp;quot;&lt;/span&gt;, &lt;span style="color: blue"&gt;null&lt;/span&gt;);
    graph.AddNode(&lt;span style="color: #a31515"&gt;&amp;quot;4&amp;quot;&lt;/span&gt;, &lt;span style="color: blue"&gt;null&lt;/span&gt;);
    graph.AddNode(&lt;span style="color: #a31515"&gt;&amp;quot;5&amp;quot;&lt;/span&gt;, &lt;span style="color: blue"&gt;null&lt;/span&gt;);
    graph.AddNode(&lt;span style="color: #a31515"&gt;&amp;quot;6&amp;quot;&lt;/span&gt;, &lt;span style="color: blue"&gt;null&lt;/span&gt;);

    &lt;span style="color: green"&gt;// Edges
    &lt;/span&gt;graph.AddDirectedEdge(&lt;span style="color: #a31515"&gt;&amp;quot;0&amp;quot;&lt;/span&gt;, &lt;span style="color: #a31515"&gt;&amp;quot;1&amp;quot;&lt;/span&gt;);
    graph.AddDirectedEdge(&lt;span style="color: #a31515"&gt;&amp;quot;0&amp;quot;&lt;/span&gt;, &lt;span style="color: #a31515"&gt;&amp;quot;2&amp;quot;&lt;/span&gt;);
    graph.AddDirectedEdge(&lt;span style="color: #a31515"&gt;&amp;quot;0&amp;quot;&lt;/span&gt;, &lt;span style="color: #a31515"&gt;&amp;quot;3&amp;quot;&lt;/span&gt;);

    graph.AddDirectedEdge(&lt;span style="color: #a31515"&gt;&amp;quot;1&amp;quot;&lt;/span&gt;, &lt;span style="color: #a31515"&gt;&amp;quot;4&amp;quot;&lt;/span&gt;);

    graph.AddDirectedEdge(&lt;span style="color: #a31515"&gt;&amp;quot;4&amp;quot;&lt;/span&gt;, &lt;span style="color: #a31515"&gt;&amp;quot;6&amp;quot;&lt;/span&gt;);

    graph.AddDirectedEdge(&lt;span style="color: #a31515"&gt;&amp;quot;3&amp;quot;&lt;/span&gt;, &lt;span style="color: #a31515"&gt;&amp;quot;5&amp;quot;&lt;/span&gt;);

    &lt;span style="color: green"&gt;/* This is the tree:
               
            0
          / | \
         1  2  3
        /       \
       4         5
      /
     6
             
        This is the expected output:
             
        Level 1 = 0
        Level 2 = 1 2 3
        Level 3 = 4 5
        Level 4 = 6

    */
&lt;/span&gt;}&lt;/pre&gt;

&lt;p&gt;This is the method that does the hard work:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: gray"&gt;/// &amp;lt;summary&amp;gt;
/// &lt;/span&gt;&lt;span style="color: green"&gt;Performs an ordered level-by-level traversal in a n-ary tree from &lt;/span&gt;&lt;span style="color: green"&gt;top-to-bottom and left-to-right.
&lt;/span&gt;&lt;span style="color: gray"&gt;/// &lt;/span&gt;&lt;span style="color: green"&gt;Each tree level is written in a new line.
&lt;/span&gt;&lt;span style="color: gray"&gt;/// &amp;lt;/summary&amp;gt; 
/// &amp;lt;param name=&amp;quot;root&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color: green"&gt;Tree's root node&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;/param&amp;gt;
&lt;/span&gt;&lt;span style="color: blue"&gt;public static void &lt;/span&gt;LevelByLevelTraversal(&lt;span style="color: #2b91af"&gt;Node &lt;/span&gt;root)
{
    &lt;span style="color: green"&gt;// At any given time each queue will only have nodes that
    // belong to a level
    &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Queue&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Node&lt;/span&gt;&amp;gt; queue1 = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Queue&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Node&lt;/span&gt;&amp;gt;();
    &lt;span style="color: #2b91af"&gt;Queue&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Node&lt;/span&gt;&amp;gt; queue2 = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Queue&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Node&lt;/span&gt;&amp;gt;();

    queue1.Enqueue(root);

    &lt;span style="color: blue"&gt;while &lt;/span&gt;(queue1.Count != 0 || queue2.Count != 0)
    {
        &lt;span style="color: blue"&gt;while &lt;/span&gt;(queue1.Count != 0)
        {
            &lt;span style="color: #2b91af"&gt;Node &lt;/span&gt;u = queue1.Dequeue();

            &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.Write(u.Key);

            &lt;span style="color: green"&gt;// Expanding u's neighbors in the queue
            &lt;/span&gt;&lt;span style="color: blue"&gt;foreach &lt;/span&gt;(&lt;span style="color: #2b91af"&gt;EdgeToNeighbor &lt;/span&gt;edge &lt;span style="color: blue"&gt;in &lt;/span&gt;u.Neighbors)
            {
                queue2.Enqueue(edge.Neighbor);
            }
        }

        &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine();

        &lt;span style="color: blue"&gt;while &lt;/span&gt;(queue2.Count != 0)
        {
            &lt;span style="color: #2b91af"&gt;Node &lt;/span&gt;v = queue2.Dequeue();

            &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.Write(v.Key);

            &lt;span style="color: green"&gt;// Expanding v's neighbors in the queue
            &lt;/span&gt;&lt;span style="color: blue"&gt;foreach &lt;/span&gt;(&lt;span style="color: #2b91af"&gt;EdgeToNeighbor &lt;/span&gt;edge &lt;span style="color: blue"&gt;in &lt;/span&gt;v.Neighbors)
            {
                queue1.Enqueue(edge.Neighbor);
            }
        }

        &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine();
    }
}&lt;/pre&gt;

&lt;p&gt;To spice things up I have implemented a &lt;a href="http://www.leniel.net/2009/11/parallel-linq-plinq-visual-studio-2010.html" target="_blank"&gt;Parallel&lt;/a&gt; version of the above method using a &lt;a href="http://msdn.microsoft.com/en-us/library/dd267265.aspx" target="_blank"&gt;ConcurrentQueue&lt;/a&gt;:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: gray"&gt;/// &amp;lt;summary&amp;gt;
/// &lt;/span&gt;&lt;span style="color: green"&gt;Performs an ordered level-by-level traversal in a n-ary tree from &lt;/span&gt;&lt;span style="color: green"&gt;top-to-bottom and left-to-right in Parallel using a ConcurrentQueue.
&lt;/span&gt;&lt;span style="color: gray"&gt;/// &lt;/span&gt;&lt;span style="color: green"&gt;Each tree level is written in a new line.
&lt;/span&gt;&lt;span style="color: gray"&gt;/// &amp;lt;/summary&amp;gt; 
/// &amp;lt;param name=&amp;quot;root&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color: green"&gt;Tree's root node&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;/param&amp;gt;
&lt;/span&gt;&lt;span style="color: blue"&gt;public static void &lt;/span&gt;LevelByLevelTraversalInParallel(&lt;span style="color: #2b91af"&gt;Node &lt;/span&gt;root)
{
    &lt;span style="color: green"&gt;// At any given time each queue will only have nodes that
    // belong to a level
    &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ConcurrentQueue&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Node&lt;/span&gt;&amp;gt; queue1 = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ConcurrentQueue&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Node&lt;/span&gt;&amp;gt;();
    &lt;span style="color: #2b91af"&gt;ConcurrentQueue&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Node&lt;/span&gt;&amp;gt; queue2 = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ConcurrentQueue&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Node&lt;/span&gt;&amp;gt;();

    queue1.Enqueue(root);

    &lt;span style="color: blue"&gt;while &lt;/span&gt;(queue1.Count != 0 || queue2.Count != 0)
    {
        &lt;span style="color: blue"&gt;while &lt;/span&gt;(queue1.Count != 0)
        {
            &lt;span style="color: #2b91af"&gt;Node &lt;/span&gt;u;
                    
            queue1.TryDequeue(&lt;span style="color: blue"&gt;out &lt;/span&gt;u);

            &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.Write(u.Key);

            &lt;span style="color: green"&gt;// Expanding u's neighbors in the queue
            &lt;/span&gt;&lt;span style="color: blue"&gt;foreach &lt;/span&gt;(&lt;span style="color: #2b91af"&gt;EdgeToNeighbor &lt;/span&gt;edge &lt;span style="color: blue"&gt;in &lt;/span&gt;u.Neighbors)
            {
                queue2.Enqueue(edge.Neighbor);
            }
        }

        &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine();

        &lt;span style="color: blue"&gt;while &lt;/span&gt;(queue2.Count != 0)
        {
            &lt;span style="color: #2b91af"&gt;Node &lt;/span&gt;v;
                    
            queue2.TryDequeue(&lt;span style="color: blue"&gt;out &lt;/span&gt;v);

            &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.Write(v.Key);

            &lt;span style="color: green"&gt;// Expanding v's neighbors in the queue
            &lt;/span&gt;&lt;span style="color: blue"&gt;foreach &lt;/span&gt;(&lt;span style="color: #2b91af"&gt;EdgeToNeighbor &lt;/span&gt;edge &lt;span style="color: blue"&gt;in &lt;/span&gt;v.Neighbors)
            {
                queue1.Enqueue(edge.Neighbor);
            }
        }

        &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine();
    }
}&lt;/pre&gt;

&lt;p&gt;Now it’s time to measure the execution time using a &lt;a href="http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx" target="_blank"&gt;StopWatch&lt;/a&gt;:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;private static void &lt;/span&gt;Main(&lt;span style="color: blue"&gt;string&lt;/span&gt;[] args)
{
    &lt;span style="color: #2b91af"&gt;Graph &lt;/span&gt;graph = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Graph&lt;/span&gt;();

    FillGraphWithTreeStructure(graph);

    &lt;span style="color: #2b91af"&gt;Stopwatch &lt;/span&gt;stopWatch = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Stopwatch&lt;/span&gt;();

    stopWatch.Start();

    LevelByLevelTraversal(graph.Nodes[&lt;span style="color: #a31515"&gt;&amp;quot;0&amp;quot;&lt;/span&gt;]);

    stopWatch.Stop();

    &lt;span style="color: green"&gt;// Write time elapsed
    &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;&amp;quot;Time elapsed: &lt;/span&gt;&lt;span style="color: #3cb371"&gt;{0}&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;&lt;/span&gt;, stopWatch.Elapsed);

    &lt;span style="color: green"&gt;//Resetting the watch...
    &lt;/span&gt;stopWatch.Reset();

    stopWatch.Start();

    LevelByLevelTraversalInParallel(graph.Nodes[&lt;span style="color: #a31515"&gt;&amp;quot;0&amp;quot;&lt;/span&gt;]);

    stopWatch.Stop();

    &lt;span style="color: green"&gt;// Write time elapsed
    &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;&amp;quot;Time elapsed: &lt;/span&gt;&lt;span style="color: #3cb371"&gt;{0}&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;&lt;/span&gt;, stopWatch.Elapsed);

    &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.ReadKey();
}&lt;/pre&gt;

&lt;p align="left"&gt;Now the results:&lt;/p&gt;

&lt;p align="center"&gt;&lt;font style="background-color: #9bbb59"&gt;Sequential 
    &lt;br /&gt;&lt;/font&gt;0 

  &lt;br /&gt;1 2 3 

  &lt;br /&gt;4 5 

  &lt;br /&gt;6 

  &lt;br /&gt;&lt;strong&gt;&lt;font style="background-color: #000000" color="#ffffff" size="3"&gt;Time elapsed: 00:00:00.0040340&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p align="center"&gt;&lt;font style="background-color: #ffc000"&gt;Parallel&lt;/font&gt; 

  &lt;br /&gt;0 

  &lt;br /&gt;1 2 3 

  &lt;br /&gt;4 5 

  &lt;br /&gt;6 

  &lt;br /&gt;&lt;strong&gt;&lt;font style="background-color: #000000" color="#ffffff" size="3"&gt;Time elapsed: 00:00:00.0020186&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p align="left"&gt;As you see, time is cut by a factor of 2. I currently have a Core 2 Duo processor in &lt;a href="http://www.leniel.net/2010/09/developing-for-iphone-with-mac-mini.html" target="_blank"&gt;my Mac mini&lt;/a&gt;.&lt;/p&gt;

&lt;p align="left"&gt;Hope you enjoy it and feel free to add your 2 cents to improve this code! Of course there are other ways of solving this very problem and I would like to see those other ways. Do you have any other better idea?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Download&lt;/strong&gt;

  &lt;br /&gt;You can get the Microsoft Visual Studio Console Application Project at:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://sites.google.com/site/leniel/blog/TreeLevelTraversal.rar"&gt;https://sites.google.com/site/leniel/blog/TreeLevelTraversal.rar&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To try out the code you can use the free Microsoft Visual C# 2010 Express Edition that you can get at: &lt;a title="http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-csharp-express" href="http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-csharp-express" target="_blank"&gt;http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-csharp-express&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4926735770070291800-1417726054433716448?l=www.leniel.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/fA_OlETHTML4SLAHOi7W7XueR00/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fA_OlETHTML4SLAHOi7W7XueR00/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/fA_OlETHTML4SLAHOi7W7XueR00/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fA_OlETHTML4SLAHOi7W7XueR00/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/leniel?a=0h3Z8sy9Hac:Qwmx1o7REgs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=0h3Z8sy9Hac:Qwmx1o7REgs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=0h3Z8sy9Hac:Qwmx1o7REgs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=0h3Z8sy9Hac:Qwmx1o7REgs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=0h3Z8sy9Hac:Qwmx1o7REgs:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=0h3Z8sy9Hac:Qwmx1o7REgs:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=0h3Z8sy9Hac:Qwmx1o7REgs:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=0h3Z8sy9Hac:Qwmx1o7REgs:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=0h3Z8sy9Hac:Qwmx1o7REgs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=0h3Z8sy9Hac:Qwmx1o7REgs:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=0h3Z8sy9Hac:Qwmx1o7REgs:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=0h3Z8sy9Hac:Qwmx1o7REgs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leniel/~4/0h3Z8sy9Hac" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.leniel.net/feeds/1417726054433716448/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.leniel.net/2011/11/nary-tree-graph-traversal-level-by.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/1417726054433716448?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/1417726054433716448?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/leniel/~3/0h3Z8sy9Hac/nary-tree-graph-traversal-level-by.html" title="Tree Graph Ordered Traversal Level by Level in C#" /><author><name>Leniel Macaferi</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-iFmNclBdT5Y/AAAAAAAAAAI/AAAAAAAABfw/6QE8faPUWOg/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.leniel.net/2011/11/nary-tree-graph-traversal-level-by.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0MHQ3o4fCp7ImA9WhdaFks.&quot;"><id>tag:blogger.com,1999:blog-4926735770070291800.post-3017407576624030895</id><published>2011-10-25T18:49:00.001-02:00</published><updated>2011-10-26T20:50:32.434-02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-26T20:50:32.434-02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="TortoiseSVN" /><category scheme="http://www.blogger.com/atom/ns#" term="tools" /><category scheme="http://www.blogger.com/atom/ns#" term=".NET Framework" /><category scheme="http://www.blogger.com/atom/ns#" term="continuous integration" /><category scheme="http://www.blogger.com/atom/ns#" term="svn" /><category scheme="http://www.blogger.com/atom/ns#" term="revision control" /><category scheme="http://www.blogger.com/atom/ns#" term="Hudson" /><category scheme="http://www.blogger.com/atom/ns#" term="MSBuild" /><category scheme="http://www.blogger.com/atom/ns#" term="software engineering" /><category scheme="http://www.blogger.com/atom/ns#" term="repository" /><category scheme="http://www.blogger.com/atom/ns#" term="batch file" /><category scheme="http://www.blogger.com/atom/ns#" term="hooks" /><category scheme="http://www.blogger.com/atom/ns#" term="VisualSVN Server" /><title>SVN, Hudson &amp; MSBuild - Building code on post commit</title><content type="html">&lt;p align="center"&gt;&lt;a href="http://www.leniel.net/2011/05/svn-hudson-msbuild-local-rev-control.html" target="_blank"&gt;SVN, Hudson and MSBuild - Revision control repository&lt;/a&gt;     &lt;br /&gt;
&lt;a href="http://www.leniel.net/2011/07/svn-hudson-job-continuous-integration.html" target="_blank"&gt;SVN, Hudson and MSBuild - Continuous Integration&lt;/a&gt; &lt;/p&gt;&lt;p&gt;This is the third and last installment in the series I’m writing about &lt;a href="http://www.leniel.net/2011/05/svn-hudson-msbuild-local-rev-control.html"&gt;SVN, Hudson and MSBuild&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Today I’m going to show you the last piece that actually makes the whole thing work. We could call this the plumbing. The piece lies within a specific SVN folder related to your project. It’s called hooks. The path to the hooks folder is this:&lt;/p&gt;&lt;p align="center"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="Project’s hooks folder before the set up" border="0" alt="Project’s hooks folder before the set up" src="http://lh5.ggpht.com/-Iy0DOmmByqA/Tqcg4_yauII/AAAAAAAABTc/mSH_rx5tNiY/SVNHooksFolderPath%25255B7%25255D.png?imgmax=800" width="525" height="421" /&gt;Figure 1 - Project’s hooks folder before the setup&lt;/p&gt;&lt;p&gt;As you can see there are some template files ( .tmpl ). The one we’re going to use to inform Hudson that it’s time to build the code just committed to the repository is the file &lt;font size="2" face="Courier New"&gt;post.commit.tmpl&lt;/font&gt;. Make a copy of this file and change its extension to &lt;font size="2" face="Courier New"&gt;.bat&lt;/font&gt; since it’ll be used by SVN to execute some commands. The file should be named &lt;font size="2" face="Courier New"&gt;post-commit.bat&lt;/font&gt;.&lt;/p&gt;&lt;p&gt;Open the &lt;font size="2" face="Courier New"&gt;.bat&lt;/font&gt; file and add this code at the end:&lt;/p&gt;&lt;p&gt;&lt;font size="2" face="Courier New"&gt;SET REPOS=%1      &lt;br /&gt;
SET REV=%2       &lt;br /&gt;
SET CSCRIPT=C:\WINDOWS\system32\cscript.exe       &lt;br /&gt;
SET VBSCRIPT=C:\svn\post-commit-hook-hudson.vbs       &lt;br /&gt;
SET SVNLOOK=C:\Program Files\VisualSVN Server\bin\svnlook.exe       &lt;br /&gt;
SET HUDSON=http://leniel-pc:8080/       &lt;br /&gt;
&amp;quot;%CSCRIPT%&amp;quot; &amp;quot;%VBSCRIPT%&amp;quot; &amp;quot;%REPOS%&amp;quot; %REV% &amp;quot;%SVNLOOK%&amp;quot; %HUDSON%&lt;/font&gt;&lt;/p&gt;&lt;p&gt;Note above that we’re setting some vars and pointing to some specific files:&lt;/p&gt;&lt;p&gt;- &lt;font size="2" face="Courier New"&gt;&lt;strong&gt;CSCRIPT&lt;/strong&gt;&lt;/font&gt; points to &lt;font size="2" face="Courier New"&gt;cscript.exe&lt;/font&gt; file that should be present in your Windows system32 folder.&lt;/p&gt;&lt;p&gt;- &lt;font size="2" face="Courier New"&gt;&lt;strong&gt;VBSCRIPT&lt;/strong&gt;&lt;/font&gt; points to to the &lt;font size="2" face="Courier New"&gt;post-commit-hook-hudson.vbs&lt;/font&gt; file and its code is as follows:&lt;/p&gt;&lt;p&gt;&lt;font size="2" face="Courier New"&gt;repos&amp;#160;&amp;#160; = WScript.Arguments.Item(&lt;font color="#ff0000"&gt;0&lt;/font&gt;)       &lt;br /&gt;
rev&amp;#160;&amp;#160;&amp;#160;&amp;#160; = WScript.Arguments.Item(&lt;font color="#ff0000"&gt;1&lt;/font&gt;)       &lt;br /&gt;
svnlook = WScript.Arguments.Item(&lt;font color="#ff0000"&gt;2&lt;/font&gt;)       &lt;br /&gt;
hudson&amp;#160; = WScript.Arguments.Item(&lt;font color="#ff0000"&gt;3&lt;/font&gt;)&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2" face="Courier New"&gt;&lt;font color="#9b00d3"&gt;&lt;strong&gt;Set&lt;/strong&gt;&lt;/font&gt; shell = WScript.CreateObject(&lt;font color="#008040"&gt;&amp;quot;WScript.Shell&amp;quot;&lt;/font&gt;)&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2" face="Courier New"&gt;&lt;font color="#9b00d3"&gt;&lt;strong&gt;Set&lt;/strong&gt;&lt;/font&gt; uuidExec = shell.Exec(svnlook &amp;amp; &lt;font color="#008040"&gt;&amp;quot; uuid &amp;quot;&lt;/font&gt; &amp;amp; repos)       &lt;br /&gt;
&lt;font color="#9b00d3"&gt;&lt;strong&gt;Do Until&lt;/strong&gt;&lt;/font&gt; uuidExec.StdOut.AtEndOfStream       &lt;br /&gt;
&amp;#160; uuid = uuidExec.StdOut.ReadLine()       &lt;br /&gt;
&lt;font color="#9b00d3"&gt;&lt;strong&gt;Loop&lt;/strong&gt;&lt;/font&gt;       &lt;br /&gt;
Wscript.Echo &lt;font color="#008040"&gt;&amp;quot;uuid=&amp;quot;&lt;/font&gt; &amp;amp; uuid&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2" face="Courier New"&gt;&lt;strong&gt;&lt;font color="#9b00d3"&gt;Set&lt;/font&gt;&lt;/strong&gt; changedExec = shell.Exec(svnlook &amp;amp; &lt;font color="#008040"&gt;&amp;quot; changed --revision &amp;quot;&lt;/font&gt; &amp;amp; rev &amp;amp; &amp;quot; &amp;quot; &amp;amp; repos)       &lt;br /&gt;
&lt;font color="#9b00d3"&gt;&lt;strong&gt;Do Until&lt;/strong&gt;&lt;/font&gt; changedExec.StdOut.AtEndOfStream       &lt;br /&gt;
&amp;#160; changed = changed + changedExec.StdOut.ReadLine() + Chr(&lt;font color="#ff0000"&gt;10&lt;/font&gt;)       &lt;br /&gt;
&lt;font color="#9b00d3"&gt;&lt;strong&gt;Loop&lt;/strong&gt;&lt;/font&gt;       &lt;br /&gt;
Wscript.Echo &lt;font color="#008040"&gt;&amp;quot;changed=&amp;quot;&lt;/font&gt; &amp;amp; changed&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2" face="Courier New"&gt;url = hudson + &lt;font color="#008040"&gt;&amp;quot;subversion/&amp;quot;&lt;/font&gt; + uuid + &lt;font color="#008040"&gt;&amp;quot;/notifyCommit?rev=&amp;quot;&lt;/font&gt; + rev       &lt;br /&gt;
Wscript.Echo url&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2" face="Courier New"&gt;&lt;font color="#9b00d3"&gt;&lt;strong&gt;Set&lt;/strong&gt;&lt;/font&gt; http = CreateObject(&lt;font color="#008040"&gt;&amp;quot;Microsoft.XMLHTTP&amp;quot;&lt;/font&gt;)       &lt;br /&gt;
http.open &lt;font color="#008040"&gt;&amp;quot;POST&amp;quot;&lt;/font&gt;, url, &lt;font color="#9b00d3"&gt;&lt;strong&gt;False          &lt;br /&gt;
&lt;/strong&gt;&lt;/font&gt;http.setRequestHeader &amp;quot;Content-Type&amp;quot;, &lt;font color="#008040"&gt;&amp;quot;text/plain;charset=UTF-8&amp;quot;&lt;/font&gt;       &lt;br /&gt;
http.send changed&lt;/font&gt;&lt;/p&gt;&lt;p&gt;- &lt;font size="2" face="Courier New"&gt;&lt;strong&gt;SVNLOOK&lt;/strong&gt;&lt;/font&gt; points to &lt;font size="2" face="Courier New"&gt;svnlook.exe&lt;/font&gt; file that comes with VisualSVN Server (see &lt;a href="http://www.leniel.net/2011/05/svn-hudson-msbuild-local-rev-control.html" target="_blank"&gt;part 1&lt;/a&gt; of this series for more details about it).&lt;/p&gt;&lt;p&gt;- &lt;font size="2" face="Courier New"&gt;&lt;strong&gt;HUDSON&lt;/strong&gt;&lt;/font&gt; points to your Hudson server address. Change it accordingly.&lt;/p&gt;&lt;p&gt;With it all configured we should be ready to get an automatic build when code is committed to the repository.&lt;/p&gt;&lt;p&gt;To test your environment, change any file already versioned and commit it. Open Hudson in your browser and watch a new build start automatically.&lt;/p&gt;&lt;p&gt;If you look in Hudson’s build Console Output you’ll see that the build was initiated by an SCM change.&lt;/p&gt;&lt;p&gt;That’s all!&lt;/p&gt;&lt;p&gt;This is how your SVN project hooks folder should look like now:&lt;/p&gt;&lt;p align="center"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="Project’s hooks folder after the set up" border="0" alt="Project’s hooks folder after the set up" src="http://lh5.ggpht.com/-ZoSgncwYyYM/Tqcg7g07Z9I/AAAAAAAABTg/beAaSg2bDYI/SVNHooksFolder%25255B6%25255D.png?imgmax=800" width="525" height="453" /&gt;Figure 2 - Project’s hooks folder after the setup&lt;/p&gt;&lt;p&gt;Can you spot another &lt;font size="2" face="Courier New"&gt;.bat&lt;/font&gt; file in the folder? It’s the &lt;font size="2" face="Courier New"&gt;pre-revprop-change.bat&lt;/font&gt;. I’ve been using it so that I can modify the commit’s log message/comment when I forget to mention something or to correct spelling. More info about this file can be seen in this StackOverflow question: &lt;a href="http://stackoverflow.com/q/197224/114029" target="_blank"&gt;What is a pre-revprop-change hook in SVN and how do I create it?&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4926735770070291800-3017407576624030895?l=www.leniel.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Fe1JPe1q-pe8GbTlNKOdgqZwXZA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Fe1JPe1q-pe8GbTlNKOdgqZwXZA/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/Fe1JPe1q-pe8GbTlNKOdgqZwXZA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Fe1JPe1q-pe8GbTlNKOdgqZwXZA/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/leniel?a=Mn8Q3S0YqjQ:nFdoE69a86w:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=Mn8Q3S0YqjQ:nFdoE69a86w:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=Mn8Q3S0YqjQ:nFdoE69a86w:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=Mn8Q3S0YqjQ:nFdoE69a86w:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=Mn8Q3S0YqjQ:nFdoE69a86w:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=Mn8Q3S0YqjQ:nFdoE69a86w:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=Mn8Q3S0YqjQ:nFdoE69a86w:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=Mn8Q3S0YqjQ:nFdoE69a86w:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=Mn8Q3S0YqjQ:nFdoE69a86w:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=Mn8Q3S0YqjQ:nFdoE69a86w:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?i=Mn8Q3S0YqjQ:nFdoE69a86w:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/leniel?a=Mn8Q3S0YqjQ:nFdoE69a86w:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/leniel?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/leniel/~4/Mn8Q3S0YqjQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.leniel.net/feeds/3017407576624030895/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.leniel.net/2011/10/svn-hudson-msbuild-building-code-commit.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/3017407576624030895?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4926735770070291800/posts/default/3017407576624030895?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/leniel/~3/Mn8Q3S0YqjQ/svn-hudson-msbuild-building-code-commit.html" title="SVN, Hudson &amp; MSBuild - Building code on post commit" /><author><name>Leniel Macaferi</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-iFmNclBdT5Y/AAAAAAAAAAI/AAAAAAAABfw/6QE8faPUWOg/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-Iy0DOmmByqA/Tqcg4_yauII/AAAAAAAABTc/mSH_rx5tNiY/s72-c/SVNHooksFolderPath%25255B7%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.leniel.net/2011/10/svn-hudson-msbuild-building-code-commit.html</feedburner:origLink></entry></feed>

