<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Vijay Ganesh</title><link>/</link><description>Recent content on Vijay Ganesh</description><generator>Hugo 0.85.0 -- gohugo.io</generator><language>en</language><managingEditor>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</managingEditor><webMaster>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</webMaster><copyright>© விஜய் கணேஷ் - Vijay Ganesh - All rights reserved.</copyright><lastBuildDate>Sun, 16 Apr 2023 18:49:04 +0400</lastBuildDate><atom:link href="/index.xml" rel="self" type="application/rss+xml"/><item><title>Failure is a good space for discovery</title><link>/2023/04/failure-is-a-good-space-for-discovery/</link><pubDate>Sun, 16 Apr 2023 18:49:04 +0400</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2023/04/failure-is-a-good-space-for-discovery/</guid><description>&lt;p>Came across this piece of gem while watching the latest Smarter Every Day video &lt;a href="https://www.youtube.com/watch?v=C1KT8PS6Zs4">Prince Rupert&amp;rsquo;s Drop VS MOLTEN GLASS - Smarter Every Day 285&lt;/a>.&lt;/p>
&lt;p>Can relate to it, especially about feeling of relief once you know you have failed and the shift in mindset to make the most out of it.&lt;/p>
&lt;div class="embed-responsive embed-responsive-16by9">
&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/C1KT8PS6Zs4?enablejsapi=1&amp;start=1536&amp;end=1667&amp;modestbranding=1" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen>&lt;/iframe>
&lt;/div>
&lt;blockquote>
&lt;p>A great piece is basically balanced right on the edge of failure and success.&lt;/p>
&lt;p>It&amp;rsquo;s just it&amp;rsquo;s just balance right there. But you don&amp;rsquo;t really know how or how where that line is.&lt;/p>
&lt;p>So you&amp;rsquo;re very excited about the idea is spectacular to you. And you go and do it even though you don&amp;rsquo;t seem like it. You&amp;rsquo;re going into with a little bit of fear and trepidation to get too close to that line because you don&amp;rsquo;t want to fail and lose it.&lt;/p>
&lt;p>But once you do fail it, all that&amp;rsquo;s gone.&lt;/p>
&lt;p>Now it&amp;rsquo;s game on.&lt;/p>
&lt;p>It&amp;rsquo;s all about just learning, right?&lt;/p>
&lt;p>So if it&amp;rsquo;s a piece that you know is going to take four and a half hours and it 3 hours, it&amp;rsquo;s kind of screwed up. And you just say, okay, let&amp;rsquo;s stop and start over. Well, you really don&amp;rsquo;t know what happens in our 3 to 5. You have no idea. So when you get to three again now, you have no idea what&amp;rsquo;s coming.&lt;/p>
&lt;p>So my idea is usually if I screw up, screwed up all the way that I can find out exactly what&amp;rsquo;s hiding, what my intuition doesn&amp;rsquo;t, what vocabulary of intuition has not been developed, what part of that language.&lt;/p>
&lt;p>So now a screwed up, screwed up, screwed up all the way until the finish. We know where things might happen. So now, when I go back to it, I&amp;rsquo;ve got the intuition more developed.&lt;/p>
&lt;p>I mean, failure ends up being a good space for discovery, right?&lt;/p>
&lt;p>But it&amp;rsquo;s like, if I&amp;rsquo;m going to fail, let&amp;rsquo;s.&lt;/p>
&lt;p>Let&amp;rsquo;s keep failing, let&amp;rsquo;s keep screwing up.&lt;/p>
&lt;p>Let&amp;rsquo;s see what see what&amp;rsquo;s there. Let&amp;rsquo;s go find out.&lt;/p>
&lt;p>You know, like, but if you just start and put it away and start over, you&amp;rsquo;re kind of missing out on a lot.&lt;/p>
&lt;/blockquote></description></item><item><title>Exploring the Path to Modernizing Your Tech Stack Together</title><link>/2023/04/exploring-the-path-to-modernizing-your-tech-stack-together/</link><pubDate>Thu, 13 Apr 2023 06:00:04 +0400</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2023/04/exploring-the-path-to-modernizing-your-tech-stack-together/</guid><description>&lt;p>As a senior tech-person with coordination experience involving customers, management and the technology team I often come across requirement to upgrade a legacy applications technology stack. The reasons may include reducing technology debt, improving performance, reducing total cost of ownership and improving developer experience.&lt;/p>
&lt;p>The techstack upgrade journey can be a challenge, but with a sense of exploration and teamwork, it can lead to improved performance and better alignment with business objectives. This blog post is my exploration of my approach on how to connect with your development team, support their learning, gain buy-in from stakeholders, and explore the world of application scaling and infrastructure orchestration options.&lt;/p>
&lt;h2 id="gaining-buy-in-from-stakeholders">Gaining Buy-In from Stakeholders&lt;/h2>
&lt;p>To make the migration as smooth as possible, it&amp;rsquo;s important to have the support of all stakeholders, including upper management, clients, and other teams within the organization. Share the benefits of the migration, such as better performance, scalability, and maintainability, and explore the potential cost savings and increased competitiveness that the new tech stack can bring. By presenting a well-reasoned case, you can secure the resources and support needed for the migration.&lt;/p>
&lt;p>The buy-in is the most important step, as by nature there is going to be no new features (mostly) as do the migration and the cost and effort invested into the migration has to be understood by everyone.&lt;/p>
&lt;h2 id="connecting-with-your-development-team">Connecting with Your Development Team&lt;/h2>
&lt;p>Migrating a legacy application is a big step, and development team might have concerns. It&amp;rsquo;s important to understand their perspective and address any worries they might have, such as attachment to the old stack, learning new technologies, or job security. Connecting with your team and acknowledging their concerns can create a supportive environment for the migration process.&lt;/p>
&lt;p>Present feasible options, explore additional suggestions and address any technological challenges that may arise with the shortlisted new stack. Most of the time the friction to change can be from moving from familiar way of development to the unease of new way of thinking that would require for the introduced technology stack. It is in best interest of the everyone to take small steps, allow for small and easy wins for the team to ease into the future stack by attacking low hanging fruits. It will help having one on ones with everyone to assess their comfort level and workout a migration path to onboard them.&lt;/p>
&lt;h2 id="supporting-your-teams-learning">Supporting Your Team&amp;rsquo;s Learning&lt;/h2>
&lt;p>Once you&amp;rsquo;ve connected with your team, it&amp;rsquo;s time to support them in learning the new tech stack. Invest in their development by providing training in the new technologies. Encourage experienced developers to collaborate with those who are less familiar with the new stack, fostering a culture of learning and growth.&lt;/p>
&lt;h2 id="exploring-application-scaling">Exploring Application Scaling&lt;/h2>
&lt;p>When migrating a legacy application, it&amp;rsquo;s crucial to consider how the application will scale as it grows. Initially, you might focus on optimizing the application&amp;rsquo;s performance and resource usage without infrastructure orchestration. This can involve refining code, optimizing database queries, and implementing caching strategies, but it is always a good idea to have a high level plan to address the scaling needs in order to steer the migration towards the goal.&lt;/p>
&lt;h2 id="investigating-infrastructure-orchestration-options">Investigating Infrastructure Orchestration Options&lt;/h2>
&lt;p>As your application continues to grow, you may want to explore infrastructure orchestration options to manage the increasing complexity. There are several choices available, such as Docker, Docker Compose, Docker Swarm, and Kubernetes. Each option has its own strengths and weaknesses, so it&amp;rsquo;s essential to evaluate them based on your organization&amp;rsquo;s needs and resources.&lt;/p>
&lt;p>Normally, I have found that just containerizing the application as the first step to orchestration nirvana. I usually go Simple Docker -&amp;gt; Docker Compose -&amp;gt; Kubernetes. This allows the teams also to have proper exposure to the technologies and not overwhelm them too much.&lt;/p>
&lt;h2 id="training-the-development-team-on-devops-essentials">Training the Development Team on DevOps Essentials&lt;/h2>
&lt;p>As you explore infrastructure orchestration solutions, it&amp;rsquo;s important to support your development team in learning the associated DevOps requirements. DevOps is a set of practices that combines software development and IT operations, aiming to shorten the development life cycle and provide continuous delivery with high software quality.&lt;/p>
&lt;p>Focus on these key areas when training your team:&lt;/p>
&lt;p>Version control systems: Ensure your team is comfortable using version control systems like Git, as they are essential for maintaining code quality and fostering collaboration.&lt;/p>
&lt;p>Continuous Integration (CI) and Continuous Deployment (CD): Help your team learn how to set up and use CI/CD pipelines, which can automate the process of building, testing, and deploying applications.&lt;/p>
&lt;p>Infrastructure as Code (IaC): Introduce your developers to IaC, which involves managing and provisioning infrastructure through code. This approach makes it easier to maintain and scale.&lt;/p>
&lt;p>Monitoring and Logging: Support your team in developing the skills to monitor application performance and troubleshoot issues using logging and monitoring tools.&lt;/p>
&lt;p>Security Best Practices: Emphasize the importance of security in the DevOps process and guide your team in implementing secure coding practices, vulnerability scanning, and regular security audits.&lt;/p>
&lt;h2 id="conclusion">Conclusion&lt;/h2>
&lt;p>Embarking on the journey of modernizing a legacy application can be challenging, but by connecting with your development team, supporting their learning, and gaining buy-in from stakeholders, you&amp;rsquo;re setting the stage for success. As you explore application scaling and investigate infrastructure orchestration options, ensure your team is well-versed in the essential DevOps practices. This exploratory and supportive approach will not only help you modernize your legacy application effectively but also create a culture of continuous learning and improvement within your organization. Let the adventure begin!&lt;/p></description></item><item><title>Trying t3-app for a project and my learnings</title><link>/2023/01/trying-t3-app-for-a-project-and-my-learnings/</link><pubDate>Thu, 26 Jan 2023 10:18:04 +0400</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2023/01/trying-t3-app-for-a-project-and-my-learnings/</guid><description>&lt;p>Been in the industry for over a couple of decades and having worked in Microsoft stack for the majority of it, I had a chance to try the &lt;a href="https://create.t3.gg">t3-app&lt;/a> for a project, it is pleasant to work with. It was a intuitive to add or modify features due to integration of the backend and the frontend using &lt;a href="https://trpc.io">tRPC&lt;/a>, and it provided a smooth development experience for to and fro communication.&lt;/p>
&lt;p>I believe it would be one of my goto technology stack to start of any proof of concepts going forward along with Python and Django, and to do initial deployments unless huge scalability and need for high volume of background processing would be a requirement; which for majority of projects even on production would not be an immediate requirement or can be handled by scaling the infrastructure.&lt;/p>
&lt;p>I recommend anyone who are doing hands-on development for communicating their ideas to stakeholders, teams or to get the initial setup friction-free to give &lt;a href="https://create.t3.gg">t3-app&lt;/a> a try.&lt;/p>
&lt;p>That being said, since I didn&amp;rsquo;t have extended experience in Javascript / Typescript / Node land; I faced few hurdles along the way and solved them with the help of the community. The below are few stumbling blocks I had and the solutions for them.&lt;/p>
&lt;h2 id="lint-validation-difference-when-developing-vs-building">Lint validation difference when developing vs building&lt;/h2>
&lt;p>A lot of linting errors get passed over when you are developing, or even when you run &lt;code>next lint&lt;/code> but fail when you try building for the production deployment. The best workaround is to run both Typescript compilation and lint checking before moving to the production build by combining &lt;code>tsc --noemit&lt;/code> and &lt;code>next lint&lt;/code>.&lt;/p>
&lt;p>&lt;strong>Reference&lt;/strong>: Thanks to &lt;a href="https://github.com/zolalsl">zolalsl&lt;/a> for the solution at &lt;a href="https://github.com/vercel/next.js/discussions/31439#discussioncomment-1652062">Typescript inconsistency between &amp;ldquo;next lint&amp;rdquo; and &amp;ldquo;next build&amp;rdquo;&lt;/a>&lt;/p>
&lt;h2 id="customizing-next-auth">Customizing Next-Auth&lt;/h2>
&lt;p>Added a custom property named &lt;code>role&lt;/code> to enable role based authorization. The document at &lt;a href="https://create.t3.gg/en/usage/next-auth#adding-new-fields-to-your-models">t3-app documentation&lt;/a> was helpful for this.&lt;/p>
&lt;h2 id="accessing-objects-using-bracket-notation-in-typescript">Accessing objects using bracket notation in Typescript&lt;/h2>
&lt;p>&lt;a href="https://nextjs.org">Next.js&lt;/a> is nice platform, but one of its advantage of creating routing from file structure means for role based navigation links you need to build your list of links and manage them.&lt;/p>
&lt;p>The approach I took involved setting up a route json structure with role specific keys, then doing server side authorization on pages to make sure the current user had the appropriate role to access them.&lt;/p>
&lt;p>The route json structure looked like&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">17
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">18
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">19
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">20
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">21
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">22
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">23
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">24
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">25
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">26
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">27
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">28
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">29
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">30
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">31
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">32
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">33
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">34
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-typescript" data-lang="typescript">&lt;span style="color:#00a8c8">const&lt;/span> &lt;span style="color:#75af00">commonRoutes&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">[&lt;/span>
&lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#d88200">&amp;#34;name&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#d88200">&amp;#34;My Profile&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#d88200">&amp;#34;href&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#d88200">&amp;#34;/user/my-profile&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#d88200">&amp;#34;key&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#d88200">&amp;#34;myprofile&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#d88200">&amp;#34;subKey&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#d88200">&amp;#34;_root_&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#d88200">&amp;#34;showInNavbar&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#00a8c8">true&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#111">]&lt;/span>
&lt;span style="color:#00a8c8">const&lt;/span> &lt;span style="color:#75af00">roleRoutes&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">[&lt;/span>
&lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#d88200">&amp;#34;Role1&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#111">[&lt;/span>
&lt;span style="color:#111">...&lt;/span>&lt;span style="color:#75af00">commonRoutes&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#d88200">&amp;#34;name&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#d88200">&amp;#34;Role 1 Modules&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#d88200">&amp;#34;key&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#d88200">&amp;#34;role1mods&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#d88200">&amp;#34;subKey&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#d88200">&amp;#34;_root_&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#d88200">&amp;#34;children&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#111">[...],&lt;/span>
&lt;span style="color:#d88200">&amp;#34;showInNavbar&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#00a8c8">true&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#111">],&lt;/span>
&lt;span style="color:#d88200">&amp;#34;Role2&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#111">[&lt;/span>
&lt;span style="color:#111">...&lt;/span>&lt;span style="color:#75af00">commonRoutes&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#d88200">&amp;#34;name&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#d88200">&amp;#34;Role 2 Modules&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#d88200">&amp;#34;key&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#d88200">&amp;#34;role2mods&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#d88200">&amp;#34;subKey&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#d88200">&amp;#34;_root_&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#d88200">&amp;#34;children&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#111">[...],&lt;/span>
&lt;span style="color:#d88200">&amp;#34;showInNavbar&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#00a8c8">true&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#111">]&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#111">]&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Based on the currently logged in user&amp;rsquo;s role, I wanted to access their menu structure to populate the navigation bar. I was trying to do this by accessing the menu key using &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Property_Accessors#bracket_notation">bracket notation&lt;/a> as we do in Javascript.&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-typescript" data-lang="typescript">&lt;span style="color:#75715e">// validate session and other objects before this...
&lt;/span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#00a8c8">const&lt;/span> &lt;span style="color:#75af00">role&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">session&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#75af00">data&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#75af00">user&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#75af00">role&lt;/span> &lt;span style="color:#00a8c8">as&lt;/span> &lt;span style="color:#00a8c8">string&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#00a8c8">const&lt;/span> &lt;span style="color:#75af00">menuItems&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">Constants&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#75af00">roleRoutes&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#75af00">role&lt;/span>&lt;span style="color:#111">];&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>But Typescript wouldn&amp;rsquo;t have any of that and complained&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-text" data-lang="text">No index signature with a parameter of type &amp;#39;string&amp;#39; was found on type &amp;#39;{ Role1: {name:string; path:string; key:string;}} ...
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>The solution was to use &lt;code>as keyof typeof&lt;/code> and then use it as the bracket notation&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-typescript" data-lang="typescript">&lt;span style="color:#75715e">// validate session and other objects before this...
&lt;/span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#00a8c8">const&lt;/span> &lt;span style="color:#75af00">role&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">session&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#75af00">data&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#75af00">user&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#75af00">role&lt;/span> &lt;span style="color:#00a8c8">as&lt;/span> &lt;span style="color:#00a8c8">keyof&lt;/span> &lt;span style="color:#00a8c8">typeof&lt;/span> &lt;span style="color:#75af00">Constants&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#75af00">roleRoutes&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#00a8c8">const&lt;/span> &lt;span style="color:#75af00">menuItems&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">Constants&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#75af00">roleRoutes&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#75af00">role&lt;/span>&lt;span style="color:#111">];&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="database-migration-deployment-and-seeding-as-part-of-cicd">Database migration deployment and seeding as part of CI/CD&lt;/h2>
&lt;p>t3-app provides a &lt;a href="https://create.t3.gg/en/deployment/docker">Dockerfile&lt;/a> to help us start off the dockerizing process. The file consists of 3 stages; dependencies, builder and runner. I think the best stage to run the deployment and seeding would be at the builder stage, which is accomplished by appending &lt;code>SKIP_ENV_VALIDATION=1 yarn build;&lt;/code> with &lt;code>SKIP_ENV_VALIDATION=1 yarn build &amp;amp;&amp;amp; yarn prisma migrate deploy &amp;amp;&amp;amp; yarn prisma db seed;&lt;/code>.&lt;/p>
&lt;p>Make sure your seeding script is re-runnable by using &lt;a href="https://www.prisma.io/docs/reference/api-reference/prisma-client-reference#upsert">upsert&lt;/a> and &lt;code>skipDuplicates: true&lt;/code> option for &lt;a href="https://www.prisma.io/docs/reference/api-reference/prisma-client-reference#createmany">createMany&lt;/a>.&lt;/p>
&lt;p>I also changed the images to be from &lt;code>node:18.13-bullseye-slim&lt;/code> instead of &lt;code>node:16-alpine3.17&lt;/code> after I had issues with the &lt;code>openssl&lt;/code> packages on &lt;code>alpine&lt;/code>.&lt;/p>
&lt;p>Finally I changed the hardcoded &lt;code>PORT&lt;/code> environment variable to be an &lt;code>ARG&lt;/code>, so that the images can be deployed on cloud solutions which provides the appropriate port number your application needs to listen during runtime.&lt;/p>
&lt;p>The seeding instructions were followed from &lt;a href="https://www.prisma.io/docs/guides/database/seed-database#how-to-seed-your-database-in-prisma">prisma&amp;rsquo;s documentation&lt;/a> and cross-checked with &lt;a href="https://create.t3.gg/en/usage/prisma#seeding-your-database">t3-app&amp;rsquo;s documentation&lt;/a>. When in the seeding file if you want to access the environment variables, use &lt;code>process.env&lt;/code> instead of the &lt;code>env&lt;/code> from &lt;code>server.mjs&lt;/code>.&lt;/p>
&lt;h2 id="handling-file-upload">Handling file upload&lt;/h2>
&lt;p>tRPC is text based protocol, which means we cannot push binary data over the wire. We can either base64 encode the file and use tRPC or better to setup Next.js api endpoint for handling file upload alone. This will depend on what size of file uploads you are accepting and what justifies your efforts.&lt;/p>
&lt;hr>
&lt;p>That&amp;rsquo;s mostly the things I wanted to keep a record to refer back when starting a new project on the same stack. Hope you all enjoy using &lt;a href="https://create.t3.gg">t3-app&lt;/a> as me and bring your ideas to life with minimal effort 👍🏽.&lt;/p></description></item><item><title>Microsoft Dotnet Gitignore File</title><link>/2020/03/microsoft-dotnet-gitignore-file/</link><pubDate>Wed, 11 Mar 2020 22:12:04 +0400</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2020/03/microsoft-dotnet-gitignore-file/</guid><description>&lt;p>Came across this helpful &lt;code>dotnet new&lt;/code> template for creating &lt;code>.gitignore&lt;/code> file for dotnet core projects:&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">dotnet new gitignore
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>The above command adds a &lt;code>.gitignore&lt;/code> that covers the full length and breath of dotnet related files that normally needs to be ignored. Also note that it covers subfolders, so all you need is the single file generated at your project git root location.&lt;/p>
&lt;p>Happy coding!&lt;/p>
&lt;p>&lt;code>.gitignore&lt;/code> file generated as of &lt;time datetime="2020-03-11">11 March 2020&lt;/time>:&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 10
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 11
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 12
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 13
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 14
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 15
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 16
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 17
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 18
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 19
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 20
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 21
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 22
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 23
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 24
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 25
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 26
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 27
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 28
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 29
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 30
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 31
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 32
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 33
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 34
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 35
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 36
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 37
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 38
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 39
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 40
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 41
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 42
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 43
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 44
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 45
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 46
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 47
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 48
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 49
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 50
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 51
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 52
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 53
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 54
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 55
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 56
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 57
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 58
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 59
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 60
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 61
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 62
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 63
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 64
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 65
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 66
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 67
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 68
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 69
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 70
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 71
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 72
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 73
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 74
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 75
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 76
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 77
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 78
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 79
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 80
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 81
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 82
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 83
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 84
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 85
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 86
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 87
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 88
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 89
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 90
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 91
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 92
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 93
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 94
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 95
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 96
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 97
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 98
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 99
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">100
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">101
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">102
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">103
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">104
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">105
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">106
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">107
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">108
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">109
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">110
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">111
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">112
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">113
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">114
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">115
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">116
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">117
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">118
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">119
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">120
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">121
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">122
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">123
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">124
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">125
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">126
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">127
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">128
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">129
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">130
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">131
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">132
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">133
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">134
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">135
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">136
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">137
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">138
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">139
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">140
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">141
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">142
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">143
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">144
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">145
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">146
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">147
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">148
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">149
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">150
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">151
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">152
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">153
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">154
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">155
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">156
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">157
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">158
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">159
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">160
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">161
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">162
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">163
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">164
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">165
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">166
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">167
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">168
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">169
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">170
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">171
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">172
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">173
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">174
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">175
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">176
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">177
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">178
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">179
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">180
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">181
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">182
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">183
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">184
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">185
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">186
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">187
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">188
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">189
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">190
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">191
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">192
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">193
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">194
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">195
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">196
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">197
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">198
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">199
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">200
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">201
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">202
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">203
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">204
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">205
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">206
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">207
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">208
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">209
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">210
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">211
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">212
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">213
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">214
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">215
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">216
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">217
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">218
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">219
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">220
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">221
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">222
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">223
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">224
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">225
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">226
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">227
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">228
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">229
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">230
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">231
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">232
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">233
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">234
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">235
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">236
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">237
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">238
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">239
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">240
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">241
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">242
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">243
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">244
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">245
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">246
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">247
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">248
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">249
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">250
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">251
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">252
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">253
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">254
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">255
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">256
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">257
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">258
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">259
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">260
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">261
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">262
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">263
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">264
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">265
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">266
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">267
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">268
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">269
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">270
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">271
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">272
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">273
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">274
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">275
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">276
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">277
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">278
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">279
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">280
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">281
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">282
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">283
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">284
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">285
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">286
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">287
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">288
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">289
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">290
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">291
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">292
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">293
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">294
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">295
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">296
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">297
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">298
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">299
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">300
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">301
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">302
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">303
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">304
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">305
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">306
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">307
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">308
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">309
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">310
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">311
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">312
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">313
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">314
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">315
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">316
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">317
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">318
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">319
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">320
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">321
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">322
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">323
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">324
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">325
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">326
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">327
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">328
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">329
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">330
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">331
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">332
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">333
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">334
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">335
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">336
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">337
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">338
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">339
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">340
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">341
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">342
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">343
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">344
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">345
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">346
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">347
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">348
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">349
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">350
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">351
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">352
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">353
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">354
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">355
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">356
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">357
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">358
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">359
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">360
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">361
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">362
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">363
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">364
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">365
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">366
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">367
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">368
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">369
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">370
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">371
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">372
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">373
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">374
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">375
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">376
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">377
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">378
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">379
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">380
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">381
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">382
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">383
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">384
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">385
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">386
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">387
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">388
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">389
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">390
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">391
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">392
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">393
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">394
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">395
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">396
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">397
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">398
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">399
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">400
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">401
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">402
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">403
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">404
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">405
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">406
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">407
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">408
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">409
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">410
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">411
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">412
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">413
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">414
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">415
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">416
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">417
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">418
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">419
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">420
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">421
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">422
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">423
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">424
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">425
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">426
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">427
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">428
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">429
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">430
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">431
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">432
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">433
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-plain" data-lang="plain">## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Mono auto generated files
mono_crash.*
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project&amp;#39;s static files in wwwroot
#wwwroot/
# Visual Studio 2017 auto generated files
Generated\ Files/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUNIT
*.VisualState.xml
TestResult.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# Visual Studio Trace Files
*.e2e
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# JustCode is a .NET coding add-in
.JustCode
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# Visual Studio code coverage results
*.coverage
*.coveragexml
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3&amp;#39;s project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
*.appxbundle
*.appxupload
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup &amp;amp; report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak
# SQL Server files
*.mdf
*.ldf
*.ndf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- Backup*.rdl
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# CodeRush personal settings
.cr/personal
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
# Tabs Studio
*.tss
# Telerik&amp;#39;s JustMock configuration file
*.jmconfig
# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
# OpenCover UI analysis results
OpenCover/
# Azure Stream Analytics local run output
ASALocalRun/
# MSBuild Binary and Structured Log
*.binlog
# NVidia Nsight GPU debugger configuration file
*.nvuser
# MFractors (Xamarin productivity tool) working folder
.mfractor/
# Local History for Visual Studio
.localhistory/
# BeatPulse healthcheck temp database
healthchecksdb
# Backup folder for Package Reference Convert tool in Visual Studio 2017
MigrationBackup/
##
## Visual studio for Mac
##
# globs
Makefile.in
*.userprefs
*.usertasks
config.make
config.status
aclocal.m4
install-sh
autom4te.cache/
*.tar.gz
tarballs/
test-results/
# Mac bundle stuff
*.dmg
*.app
# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore
# General
.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore
# Windows thumbnail cache files
Thumbs.db
ehthumbs.db
ehthumbs_vista.db
# Dump file
*.stackdump
# Folder config file
[Dd]esktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows Installer files
*.cab
*.msi
*.msix
*.msm
*.msp
# Windows shortcuts
*.lnk
# JetBrains Rider
.idea/
*.sln.iml
##
## Visual Studio Code
##
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div></description></item><item><title>Setting up Teamcity as CI CD on self-hosted server with reverse proxy (nginx)</title><link>/2020/02/setting-up-teamcity-as-ci-cd-on-self-hosted-server-with-reverse-proxy-nginx/</link><pubDate>Fri, 21 Feb 2020 16:20:12 +0400</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2020/02/setting-up-teamcity-as-ci-cd-on-self-hosted-server-with-reverse-proxy-nginx/</guid><description>&lt;p>As part of automating things, I have setup my CI-CD system using &lt;a href="https://www.jetbrains.com/teamcity/">Jetbrains Teamcity&lt;/a> on my self-hosted server. As the first step I am setting the CD-CI piple for &lt;a href="https://blog.vijay.name/">my blog&lt;/a>. I am documenting my steps for future reference.&lt;/p>
&lt;h3 id="why-teamcity">Why Teamcity?&lt;/h3>
&lt;p>Mostly because it was the first one that worked as I wanted right on the initial try, the concepts matched my requirements of what I wanted to do with a CD server. It also had docker images readily available for both the server and the agent and putting up a customized docker-compose file was easy. I was also able to setup Teamcity behind an Nginx reverse proxy which already had the SSL ready and running.&lt;/p>
&lt;p>I am also looking into &lt;a href="https://drone.io/">Drone&lt;/a> and will document my experience at a later stage.&lt;/p>
&lt;h3 id="overview">Overview&lt;/h3>
&lt;p>Setup involves a cloud server as both the CI-CD system and the development environment to test the changes before I push it to the final hosting location.&lt;/p>
&lt;p>Below is my envisioned flow of the changes:&lt;/p>
&lt;p>&lt;img src="/2020/02/CI-CD flow for blog.svg" style="border:1px solid black; border-radius:20px" alt="CI-CD for blog" title="CI-CD for blog" />&lt;/p>
&lt;h3 id="server-component-setup">Server component setup&lt;/h3>
&lt;p>The setup consist of the following main components:&lt;/p>
&lt;ul>
&lt;li>Nginx - Reverse proxy server&lt;/li>
&lt;li>Docker with docker-compose
&lt;ul>
&lt;li>Jetbrains Teamcity Server (jetbrains/teamcity-server)&lt;/li>
&lt;li>Jetbrains Teamcity Agent (jetbrains/teamcity-agent)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="customization">Customization&lt;/h3>
&lt;p>The setup was customized so that the in-built webserver of the build server is not exposed to the public IP and is accessed through &lt;code>/teamcity/&lt;/code> path of the domain name pointing to the cloud server.&lt;/p>
&lt;p>This is accomplished by&lt;/p>
&lt;h4 id="create-a-new-location-block-in-nginx-named-teamcity-and-configure-it-for-reverse-proxying">Create a new Location block in Nginx named &lt;code>/teamcity/&lt;/code> and configure it for reverse proxying&lt;/h4>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;span style="display:block;width:100%;background-color:#e1e1e1">&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">17
&lt;/span>&lt;span style="display:block;width:100%;background-color:#e1e1e1">&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">18
&lt;/span>&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">19
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">20
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">21
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">22
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">23
&lt;/span>&lt;span style="display:block;width:100%;background-color:#e1e1e1">&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">24
&lt;/span>&lt;/span>&lt;span style="display:block;width:100%;background-color:#e1e1e1">&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">25
&lt;/span>&lt;/span>&lt;span style="display:block;width:100%;background-color:#e1e1e1">&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">26
&lt;/span>&lt;/span>&lt;span style="display:block;width:100%;background-color:#e1e1e1">&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">27
&lt;/span>&lt;/span>&lt;span style="display:block;width:100%;background-color:#e1e1e1">&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">28
&lt;/span>&lt;/span>&lt;span style="display:block;width:100%;background-color:#e1e1e1">&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">29
&lt;/span>&lt;/span>&lt;span style="display:block;width:100%;background-color:#e1e1e1">&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">30
&lt;/span>&lt;/span>&lt;span style="display:block;width:100%;background-color:#e1e1e1">&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">31
&lt;/span>&lt;/span>&lt;span style="display:block;width:100%;background-color:#e1e1e1">&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">32
&lt;/span>&lt;/span>&lt;span style="display:block;width:100%;background-color:#e1e1e1">&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">33
&lt;/span>&lt;/span>&lt;span style="display:block;width:100%;background-color:#e1e1e1">&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">34
&lt;/span>&lt;/span>&lt;span style="display:block;width:100%;background-color:#e1e1e1">&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">35
&lt;/span>&lt;/span>&lt;span style="display:block;width:100%;background-color:#e1e1e1">&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">36
&lt;/span>&lt;/span>&lt;span style="display:block;width:100%;background-color:#e1e1e1">&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">37
&lt;/span>&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">38
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-plain" data-lang="plain">map $http_upgrade $connection_upgrade { # WebSocket support
default upgrade;
&amp;#39;&amp;#39; &amp;#39;&amp;#39;;
}
server {
listen 80;
listen [::]:80;
&lt;span style="display:block;width:100%;background-color:#e1e1e1"> server_name cicd.example.com; # domain pointing to your server
&lt;/span> return 301 https://$host$request_uri;
}
server {
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
&lt;span style="display:block;width:100%;background-color:#e1e1e1"> server_name cicd.example.com; # domain pointing to your server
&lt;/span>
################################################
# your regular configuration settings go here...
################################################
&lt;span style="display:block;width:100%;background-color:#e1e1e1"> location /teamcity/ {
&lt;/span>&lt;span style="display:block;width:100%;background-color:#e1e1e1"> proxy_read_timeout 1200;
&lt;/span>&lt;span style="display:block;width:100%;background-color:#e1e1e1"> proxy_connect_timeout 240;
&lt;/span>&lt;span style="display:block;width:100%;background-color:#e1e1e1"> client_max_body_size 0; # maximum size of an HTTP request. 0 allows uploading large artifacts to TeamCity
&lt;/span>&lt;span style="display:block;width:100%;background-color:#e1e1e1">
&lt;/span>&lt;span style="display:block;width:100%;background-color:#e1e1e1"> proxy_pass http://localhost:1056; # full internal address
&lt;/span>&lt;span style="display:block;width:100%;background-color:#e1e1e1"> proxy_http_version 1.1;
&lt;/span>&lt;span style="display:block;width:100%;background-color:#e1e1e1"> proxy_set_header Host $server_name:$server_port;
&lt;/span>&lt;span style="display:block;width:100%;background-color:#e1e1e1"> proxy_set_header X-Forwarded-Host $http_host; # necessary for proper absolute redirects and TeamCity CSRF check
&lt;/span>&lt;span style="display:block;width:100%;background-color:#e1e1e1"> proxy_set_header X-Forwarded-Proto $scheme;
&lt;/span>&lt;span style="display:block;width:100%;background-color:#e1e1e1"> proxy_set_header X-Forwarded-For $remote_addr;
&lt;/span>&lt;span style="display:block;width:100%;background-color:#e1e1e1"> proxy_set_header Upgrade $http_upgrade; # WebSocket support
&lt;/span>&lt;span style="display:block;width:100%;background-color:#e1e1e1"> proxy_set_header Connection $connection_upgrade; # WebSocket support
&lt;/span>&lt;span style="display:block;width:100%;background-color:#e1e1e1"> }
&lt;/span>}
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h4 id="customizing-optteamcityconfserverxml-file-to-accept-connection-from-the-reverse-proxy">Customizing &lt;code>/opt/teamcity/conf/server.xml&lt;/code> file to accept connection from the reverse proxy&lt;/h4>
&lt;p>Make a copy of the existing &lt;code>server.xml&lt;/code> file and change the &lt;code>Connector&lt;/code> node to accept reverse proxy details.&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-xml" data-lang="xml">&lt;span style="color:#f92672">&amp;lt;Connector&lt;/span> &lt;span style="color:#75af00">port=&lt;/span>&lt;span style="color:#d88200">&amp;#34;8111&amp;#34;&lt;/span> &lt;span style="color:#75af00">protocol=&lt;/span>&lt;span style="color:#d88200">&amp;#34;org.apache.coyote.http11.Http11NioProtocol&amp;#34;&lt;/span>
&lt;span style="color:#75af00">connectionTimeout=&lt;/span>&lt;span style="color:#d88200">&amp;#34;60000&amp;#34;&lt;/span>
&lt;span style="color:#75af00">useBodyEncodingForURI=&lt;/span>&lt;span style="color:#d88200">&amp;#34;true&amp;#34;&lt;/span>
&lt;span style="color:#75af00">socket.txBufSize=&lt;/span>&lt;span style="color:#d88200">&amp;#34;64000&amp;#34;&lt;/span>
&lt;span style="color:#75af00">socket.rxBufSize=&lt;/span>&lt;span style="color:#d88200">&amp;#34;64000&amp;#34;&lt;/span>
&lt;span style="color:#75af00">tcpNoDelay=&lt;/span>&lt;span style="color:#d88200">&amp;#34;1&amp;#34;&lt;/span>
&lt;span style="color:#75af00">proxyName=&lt;/span>&lt;span style="color:#d88200">&amp;#34;cicd.example.com&amp;#34;&lt;/span>
&lt;span style="color:#75af00">proxyPort=&lt;/span>&lt;span style="color:#d88200">&amp;#34;443&amp;#34;&lt;/span>
&lt;span style="color:#75af00">secure=&lt;/span>&lt;span style="color:#d88200">&amp;#34;true&amp;#34;&lt;/span>
&lt;span style="color:#75af00">scheme=&lt;/span>&lt;span style="color:#d88200">&amp;#34;https&amp;#34;&lt;/span>
&lt;span style="color:#f92672">/&amp;gt;&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Another approach is to use the &lt;code>RemoteIpValue&lt;/code> configuration as mentioned in the &lt;a href="https://www.jetbrains.com/help/teamcity/how-to.html#HowTo...-%22RemoteIpValve%22Approach">Teamcity documentation&lt;/a>. This configuration did not work out for me and I went with the &lt;code>Connector&lt;/code> based one.&lt;/p>
&lt;h4 id="customize-the-docker-compose-file-to-handle-the-port-mapping-and-context-as-needed">Customize the docker-compose file to handle the port mapping and context as needed&lt;/h4>
&lt;p>Change the &lt;code>docker-compose.yml&lt;/code> file to include the following configs:&lt;/p>
&lt;ol>
&lt;li>Environment variable &lt;code>TEAMCITY_CONTEXT&lt;/code> with the value of your nginx &lt;code>Location&lt;/code> block path&lt;/li>
&lt;li>Map port to loopback IP so that Teamcity server is not listening on the public IP&lt;/li>
&lt;li>Map the volumes, especially the customized &lt;code>server.xml&lt;/code> file&lt;/li>
&lt;li>Agent: Set the &lt;code>SERVER_URL&lt;/code> to reflect the context&lt;/li>
&lt;li>Agent: Map the required volume to any folder you want to publish (in my case &lt;code>/var/www:/var/www&lt;/code>)&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="display:block;width:100%;background-color:#e1e1e1">&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;span style="display:block;width:100%;background-color:#e1e1e1">&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
&lt;/span>&lt;span style="display:block;width:100%;background-color:#e1e1e1">&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
&lt;/span>&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16
&lt;/span>&lt;span style="display:block;width:100%;background-color:#e1e1e1">&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">17
&lt;/span>&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">18
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">19
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">20
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">21
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">22
&lt;/span>&lt;span style="display:block;width:100%;background-color:#e1e1e1">&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">23
&lt;/span>&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">24
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">25
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="color:#f92672">version&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#d88200">&amp;#39;3&amp;#39;&lt;/span>
&lt;span style="color:#f92672">services&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;span style="color:#f92672">server&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;span style="color:#f92672">image&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#ae81ff">jetbrains/teamcity-server&lt;/span>
&lt;span style="color:#f92672">environment&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;span style="display:block;width:100%;background-color:#e1e1e1"> - &lt;span style="color:#ae81ff">TEAMCITY_CONTEXT=/teamcity/&lt;/span>
&lt;/span> &lt;span style="color:#f92672">ports&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;span style="display:block;width:100%;background-color:#e1e1e1"> - &lt;span style="color:#ae81ff">127.0.0.1&lt;/span>&lt;span style="color:#111">:&lt;/span>&lt;span style="color:#ae81ff">8111&lt;/span>&lt;span style="color:#111">:&lt;/span>&lt;span style="color:#ae81ff">8111&lt;/span>
&lt;/span> &lt;span style="color:#f92672">volumes&lt;/span>&lt;span style="color:#111">:&lt;/span>
- &lt;span style="color:#ae81ff">/home/docker/teamcity/server/data:/data/teamcity_server/datadir&lt;/span>
- &lt;span style="color:#ae81ff">/home/docker/teamcity/server/logs:/opt/teamcity/logs&lt;/span>
&lt;span style="display:block;width:100%;background-color:#e1e1e1"> - &lt;span style="color:#ae81ff">/home/docker/teamcity/server/conf/server.xml:/opt/teamcity/conf/server.xml&lt;/span>
&lt;/span> &lt;span style="color:#f92672">agent&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;span style="color:#f92672">image&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#ae81ff">jetbrains/teamcity-agent&lt;/span>
&lt;span style="color:#f92672">environment&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;span style="display:block;width:100%;background-color:#e1e1e1"> - &lt;span style="color:#ae81ff">SERVER_URL=http://server:8111/teamcity/&lt;/span>
&lt;/span> - &lt;span style="color:#ae81ff">AGENT_NAME=build-agent-01&lt;/span>
&lt;span style="color:#f92672">volumes&lt;/span>&lt;span style="color:#111">:&lt;/span>
- &lt;span style="color:#ae81ff">/home/docker/teamcity/agent/conf:/data/teamcity_agent/conf&lt;/span>
- &lt;span style="color:#ae81ff">/home/docker/teamcity/agent/work:/opt/buildagent/work&lt;/span>
- &lt;span style="color:#ae81ff">/home/docker/teamcity/agent/system:/opt/buildagent/system&lt;/span>
&lt;span style="display:block;width:100%;background-color:#e1e1e1"> - &lt;span style="color:#ae81ff">/var/www:/var/www&lt;/span>
&lt;/span> &lt;span style="color:#f92672">depends_on&lt;/span>&lt;span style="color:#111">:&lt;/span>
- &lt;span style="color:#ae81ff">server&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Finally &lt;a href="https://www.jetbrains.com/help/teamcity/configuring-server-url.html">configure the server url configuration&lt;/a>.&lt;/p>
&lt;h3 id="references">References&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://hub.docker.com/r/jetbrains/teamcity-server/">Teamcity server docker image&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://hub.docker.com/r/jetbrains/teamcity-agent/">Teamcity agent docker image&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.jetbrains.com/help/teamcity/how-to.html#HowTo...-SetUpTeamCitybehindaProxyServer">Set Up TeamCity behind a Proxy Server&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Google Cloud SDK Auto Updated</title><link>/2019/04/google-cloud-sdk-auto-updated/</link><pubDate>Thu, 04 Apr 2019 04:41:29 +0400</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2019/04/google-cloud-sdk-auto-updated/</guid><description>&lt;p>The script I use for keeping Google cloud SDK auto-updated:&lt;/p>
&lt;script type="application/javascript" src="https://gist.github.com/vijaysg/85ecf04836ee7a7173f150f58c3183c5.js">&lt;/script></description></item><item><title>Visual Studio Code Settings</title><link>/2017/12/visual-studio-code-settings/</link><pubDate>Tue, 12 Dec 2017 22:06:13 +0400</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2017/12/visual-studio-code-settings/</guid><description>&lt;h2 id="user-setings">User Setings&lt;/h2>
&lt;p>Below are few user preferences I use that defer from the default&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">17
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">18
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">19
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">20
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">21
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">22
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">23
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">24
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">25
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">26
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">27
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">28
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">29
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">30
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">31
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">32
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">33
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">34
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">35
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">36
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">37
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">38
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">39
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">40
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">41
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">42
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">43
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">44
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">45
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">46
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">47
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">48
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">49
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">50
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">51
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">52
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">53
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">54
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">55
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">56
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">57
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">58
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">59
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">60
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">61
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">62
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">63
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">64
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">65
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">66
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">67
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">68
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">69
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">70
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">71
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">72
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">73
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">74
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">75
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">76
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">77
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">78
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">79
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">80
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">81
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">82
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-javascript" data-lang="javascript">&lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#75715e">// Controls the font family.
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#d88200">&amp;#34;editor.fontFamily&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#d88200">&amp;#34;Fira Code Light, Consolas, monospace&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#75715e">// Enables font ligatures
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#d88200">&amp;#34;editor.fontLigatures&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#00a8c8">true&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#75715e">// The number of spaces a tab is equal to. This setting is overriden based on the file contents when `editor.detectIndentation` is on.
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#d88200">&amp;#34;editor.tabSize&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#ae81ff">2&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#75715e">// Controls how lines should wrap. Can be:
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#75715e">// - &amp;#39;off&amp;#39; (disable wrapping),
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#75715e">// - &amp;#39;on&amp;#39; (viewport wrapping),
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#75715e">// - &amp;#39;wordWrapColumn&amp;#39; (wrap at `editor.wordWrapColumn`) or
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#75715e">// - &amp;#39;bounded&amp;#39; (wrap at minimum of viewport and `editor.wordWrapColumn`).
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#d88200">&amp;#34;editor.wordWrap&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#d88200">&amp;#34;on&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#75715e">// Controls whether the editor should detect links and make them clickable
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#d88200">&amp;#34;editor.links&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#00a8c8">false&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#75715e">// Controls the cursor style, accepted values are &amp;#39;block&amp;#39;, &amp;#39;block-outline&amp;#39;, &amp;#39;line&amp;#39;, &amp;#39;line-thin&amp;#39;, &amp;#39;underline&amp;#39; and &amp;#39;underline-thin&amp;#39;
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#d88200">&amp;#34;editor.cursorStyle&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#d88200">&amp;#34;line-thin&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#75715e">// Control the cursor animation style, possible values are &amp;#39;blink&amp;#39;, &amp;#39;smooth&amp;#39;, &amp;#39;phase&amp;#39;, &amp;#39;expand&amp;#39; and &amp;#39;solid&amp;#39;
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#d88200">&amp;#34;editor.cursorBlinking&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#d88200">&amp;#34;solid&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#75715e">// Controls whether the editor should render control characters
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#d88200">&amp;#34;editor.renderControlCharacters&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#00a8c8">true&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#75715e">// Controls if the minimap is shown
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#d88200">&amp;#34;editor.minimap.enabled&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#00a8c8">false&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#75715e">// Controls whether the fold controls on the gutter are automatically hidden.
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#d88200">&amp;#34;editor.showFoldingControls&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#d88200">&amp;#34;always&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#75715e">// Controls how the editor should render whitespace characters, possibilities are &amp;#39;none&amp;#39;, &amp;#39;boundary&amp;#39;, and &amp;#39;all&amp;#39;. The &amp;#39;boundary&amp;#39; option does not render single spaces between words.
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#d88200">&amp;#34;editor.renderWhitespace&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#d88200">&amp;#34;boundary&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#75715e">// Controls the position of the editor&amp;#39;s tabs close buttons or disables them when set to &amp;#39;off&amp;#39;.
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#d88200">&amp;#34;workbench.editor.tabCloseButton&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#d88200">&amp;#34;off&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#75715e">// Controls where editors open. Select &amp;#39;left&amp;#39; or &amp;#39;right&amp;#39; to open editors to the left or right of the currently active one. Select &amp;#39;first&amp;#39; or &amp;#39;last&amp;#39; to open editors independently from the currently active one.
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#d88200">&amp;#34;workbench.editor.openPositioning&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#d88200">&amp;#34;last&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#75715e">// Controls which editor is shown at startup, if none is restored from the previous session. Select &amp;#39;none&amp;#39; to start without an editor, &amp;#39;welcomePage&amp;#39; to open the Welcome page (default), &amp;#39;newUntitledFile&amp;#39; to open a new untitled file (only opening an empty workspace).
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#d88200">&amp;#34;workbench.startupEditor&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#d88200">&amp;#34;none&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#75715e">// Confirm before synchronizing git repositories
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#d88200">&amp;#34;git.confirmSync&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#00a8c8">false&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#75715e">// Commit all changes when there are no staged changes.
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#d88200">&amp;#34;git.enableSmartCommit&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#00a8c8">true&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#75715e">// Enable Emmet abbreviations in languages that are not supported by default. Add a mapping here between the language and emmet supported language.
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#75715e">// Eg: {&amp;#34;vue-html&amp;#34;: &amp;#34;html&amp;#34;, &amp;#34;javascript&amp;#34;: &amp;#34;javascriptreact&amp;#34;}
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#d88200">&amp;#34;emmet.includeLanguages&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#d88200">&amp;#34;vue-html&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#d88200">&amp;#34;html&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#d88200">&amp;#34;razor&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#d88200">&amp;#34;html&amp;#34;&lt;/span>
&lt;span style="color:#111">},&lt;/span>
&lt;span style="color:#75715e">// Wrap attributes.
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#d88200">&amp;#34;html.format.wrapAttributes&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#d88200">&amp;#34;force-aligned&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#75715e">// Enable/disable implementations CodeLens. Requires TypeScript &amp;gt;= 2.2.0.
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#d88200">&amp;#34;typescript.implementationsCodeLens.enabled&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#00a8c8">true&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#75715e">// Enable usage data and errors to be sent to Microsoft.
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#d88200">&amp;#34;telemetry.enableTelemetry&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#00a8c8">false&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#75715e">// Enable crash reports to be sent to Microsoft.
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#75715e">// This option requires restart to take effect.
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#d88200">&amp;#34;telemetry.enableCrashReporter&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#00a8c8">false&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#75715e">// Link file types to the beautifier type
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#d88200">&amp;#34;beautify.language&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#d88200">&amp;#34;js&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#d88200">&amp;#34;type&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#111">[&lt;/span>
&lt;span style="color:#d88200">&amp;#34;javascript&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#d88200">&amp;#34;json&amp;#34;&lt;/span>
&lt;span style="color:#111">],&lt;/span>
&lt;span style="color:#d88200">&amp;#34;filename&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#111">[&lt;/span>
&lt;span style="color:#d88200">&amp;#34;.jshintrc&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#d88200">&amp;#34;.jsbeautify&amp;#34;&lt;/span>
&lt;span style="color:#111">]&lt;/span>
&lt;span style="color:#111">},&lt;/span>
&lt;span style="color:#d88200">&amp;#34;css&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#111">[&lt;/span>
&lt;span style="color:#d88200">&amp;#34;css&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#d88200">&amp;#34;scss&amp;#34;&lt;/span>
&lt;span style="color:#111">],&lt;/span>
&lt;span style="color:#d88200">&amp;#34;html&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#111">[&lt;/span>
&lt;span style="color:#d88200">&amp;#34;htm&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#d88200">&amp;#34;html&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#d88200">&amp;#34;vue-html&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#d88200">&amp;#34;razor&amp;#34;&lt;/span>
&lt;span style="color:#111">]&lt;/span>
&lt;span style="color:#111">},&lt;/span>
&lt;span style="color:#75715e">// Default formatter for &amp;lt;template&amp;gt; region
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#75715e">// need beautify extension
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#d88200">&amp;#34;vetur.format.defaultFormatter.html&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#d88200">&amp;#34;js-beautify-html&amp;#34;&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div></description></item><item><title>Laravel Mix and Path Settings</title><link>/2017/12/laravel-mix-and-path-settings/</link><pubDate>Sat, 09 Dec 2017 09:36:10 +0400</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2017/12/laravel-mix-and-path-settings/</guid><description>&lt;p>A quick refernece for myself, when setting up new asp.net core spa and &lt;a href="https://vuejs.org/">VueJS&lt;/a> based project along with &lt;a href="https://github.com/JeffreyWay/laravel-mix">laravel mix&lt;/a> the following setting helps in translating the path resolution correctly:&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-javascript" data-lang="javascript">&lt;span style="color:#75af00">mix&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#75af00">setResourceRoot&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#39;/dist/&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#75af00">setPublicPath&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#75af00">path&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#75af00">normalize&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#39;wwwroot/dist&amp;#39;&lt;/span>&lt;span style="color:#111">));&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>so a typical laravel-mix &lt;code>webpack.mix.js&lt;/code> file for asp.net core and vue js project (especially with admin-lte) would look like:&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">17
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-javascript" data-lang="javascript">&lt;span style="color:#75af00">mix&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#75af00">js&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#39;client-src/main.js&amp;#39;&lt;/span>&lt;span style="color:#111">,&lt;/span>&lt;span style="color:#d88200">&amp;#39;&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#75af00">extract&lt;/span>&lt;span style="color:#111">([&lt;/span>
&lt;span style="color:#d88200">&amp;#39;vue&amp;#39;&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#d88200">&amp;#39;vue-router&amp;#39;&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#d88200">&amp;#39;vuex&amp;#39;&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#d88200">&amp;#39;chart.js&amp;#39;&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#d88200">&amp;#39;admin-lte&amp;#39;&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#d88200">&amp;#39;bootstrap&amp;#39;&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#d88200">&amp;#39;jquery&amp;#39;&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#111">])&lt;/span>
&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#75af00">autoload&lt;/span>&lt;span style="color:#111">({&lt;/span>
&lt;span style="color:#75af00">jquery&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#111">[&lt;/span>&lt;span style="color:#d88200">&amp;#39;$&amp;#39;&lt;/span>&lt;span style="color:#111">,&lt;/span>&lt;span style="color:#d88200">&amp;#39;jQuery&amp;#39;&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#d88200">&amp;#39;window.jQuery&amp;#39;&lt;/span>&lt;span style="color:#111">]&lt;/span>
&lt;span style="color:#111">})&lt;/span>
&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#75af00">sass&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#39;client-src/assets/vendor.scss&amp;#39;&lt;/span>&lt;span style="color:#111">,&lt;/span>&lt;span style="color:#d88200">&amp;#39;&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#75af00">sass&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#39;client-src/assets/main.scss&amp;#39;&lt;/span>&lt;span style="color:#111">,&lt;/span>&lt;span style="color:#d88200">&amp;#39;&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#75af00">setResourceRoot&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#39;/dist/&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#75af00">setPublicPath&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#75af00">path&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#75af00">normalize&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#39;wwwroot/dist&amp;#39;&lt;/span>&lt;span style="color:#111">))&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div></description></item><item><title>Publishing aspnet core web app to linux</title><link>/2017/12/publishing-aspnet-core-web-app-to-linux/</link><pubDate>Mon, 04 Dec 2017 17:26:43 +0400</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2017/12/publishing-aspnet-core-web-app-to-linux/</guid><description>&lt;h2 id="step-1--publish-your-project-to-a-proper-directory">Step 1 : Publish your project to a proper directory&lt;/h2>
&lt;p>On researching a subfolder under &lt;code>/var&lt;/code> seems to be a good candidate. So, create a suitable subfolder and copy the published app files to it. For future reference lets assume we have copied the app to &lt;code>/var/myproject&lt;/code> folder.&lt;/p>
&lt;h2 id="step-2-configure-reverse-proxy">Step 2: Configure reverse proxy&lt;/h2>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">&amp;gt; sudo apt-get install nginx
&amp;gt; sudo service nginx start
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>update &lt;code>/etc/nginx/sites-available/default&lt;/code> to&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">server &lt;span style="color:#f92672">{&lt;/span>
listen 80&lt;span style="color:#111">;&lt;/span>
location / &lt;span style="color:#f92672">{&lt;/span>
proxy_pass http://localhost:&amp;lt;port_number&amp;gt;&lt;span style="color:#111">;&lt;/span>
proxy_http_version 1.1&lt;span style="color:#111">;&lt;/span>
proxy_set_header Upgrade &lt;span style="color:#111">$http_upgrade&lt;/span>&lt;span style="color:#111">;&lt;/span>
proxy_set_header Connection keep-alive&lt;span style="color:#111">;&lt;/span>
proxy_set_header Host &lt;span style="color:#111">$host&lt;/span>&lt;span style="color:#111">;&lt;/span>
proxy_cache_bypass &lt;span style="color:#111">$http_upgrade&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#f92672">}&lt;/span>
&lt;span style="color:#f92672">}&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>the &lt;code>&amp;lt;port_number&amp;gt;&lt;/code> is by default &lt;strong>5000&lt;/strong> for kestrel, which you could have set a custom port as part of configuration.&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">&amp;gt;sudo nginx -t &lt;span style="color:#75715e"># verify config syntax&lt;/span>
&amp;gt;sudo nginx -s reload &lt;span style="color:#75715e"># reload the config&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="step-3--configure-web-app-as-a-service-for-automatic-startup-and-failure-recovery">Step 3 : Configure web app as a service for automatic startup and failure recovery&lt;/h2>
&lt;h3 id="create-service-definition-file">create service definition file&lt;/h3>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">&amp;gt;sudo nano /var/myproject/web-myproject.service
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>with content&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-plain" data-lang="plain">[Unit]
Description=MyProject web app
[Service]
WorkingDirectory=/var/myproject
ExecStart=/usr/bin/dotnet /var/myproject/myproject.dll
Restart=always
RestartSec=10 # Restart after 10 seconds if it crashes
SyslogIdentifier=dotnet-web-myproject
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
[Install]
WantedBy=multi-user.target
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="manage-the-service">Manage the service&lt;/h3>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">&amp;gt;sudo systemctl &lt;span style="color:#111">enable&lt;/span> /var/myproject/web-myproject.service
&lt;span style="color:#75715e"># the above command will automatically create the symbolic link /etc/systemd/system/web-myproject.service&lt;/span>
&lt;span style="color:#75715e"># Start the service and verify that it is running&lt;/span>
&amp;gt;sudo systemctl start web-myproject.service
&amp;gt;sudo systemctl status web-myproject.service
&lt;span style="color:#75715e"># above command should report Active: active (running)&lt;/span>
&lt;span style="color:#75715e"># Tail the service log&lt;/span>
&amp;gt;sudo journalctl --unit web-myproject.service --follow
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="stopping-and-starting-service">Stopping and Starting Service&lt;/h3>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">5
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">6
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">7
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">&lt;span style="color:#75715e"># Stop service&lt;/span>
&amp;gt;sudo systemctl stop web-myproject.service
&amp;gt;sudo systemctl status web-myproject.service
&lt;span style="color:#75715e"># Restart the service&lt;/span>
&amp;gt;sudo systemctl start web-myproject.service
&amp;gt;sudo systemctl status web-myproject.service
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Thats it! make sure you are able to browse your app, and have a nice time.&lt;/p>
&lt;h4 id="references">References&lt;/h4>
&lt;ol>
&lt;li>&lt;a href="https://docs.microsoft.com/en-us/aspnet/core/publishing/linuxproduction?tabs=aspnetcore2x">Host ASP.NET Core on Linux with Nginx | Microsoft Docs&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://rehansaeed.com/nginx-asp-net-core-depth/">NGINX for ASP.NET Core In-Depth - Muhammad Rehan Saeed&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.hanselman.com/blog/PublishingAnASPNETCoreWebsiteToACheapLinuxVMHost.aspx">Publishing an ASP.NET Core website to a cheap Linux VM host - Scott Hanselman&lt;/a>&lt;/li>
&lt;/ol></description></item><item><title>Adding Service Account in Linux</title><link>/2017/12/adding-service-account-in-linux/</link><pubDate>Sun, 03 Dec 2017 07:11:01 +0400</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2017/12/adding-service-account-in-linux/</guid><description>&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">useradd --system &lt;span style="color:#f92672">[&lt;/span>--no-create-home&lt;span style="color:#f92672">]&lt;/span> &amp;lt;account name&amp;gt;
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>from the man pages&lt;/p>
&lt;blockquote>
&lt;p>If called with one non-option argument and the &amp;ndash;system option, adduser will add a system user.&lt;/p>
&lt;p>By default, system users are placed in the nogroup group. To place the new system user in an already existing group, use the &amp;ndash;gid or &amp;ndash;ingroup options. To place the new system user in a new group with the same ID, use the &amp;ndash;group option.&lt;/p>
&lt;p>A home directory is created by the same rules as for normal users. The new system user will have the shell /bin/false (unless overridden with the &amp;ndash;shell option), and have logins disabled. Skeletal configuration files are not copied.&lt;/p>
&lt;/blockquote></description></item><item><title>Hugo Template - Scant Blog</title><link>/my-projects/scant-blog/</link><pubDate>Fri, 01 Dec 2017 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/my-projects/scant-blog/</guid><description>&lt;h1 id="scant-blog">Scant Blog&lt;/h1>
&lt;p>A very minimalistic &lt;a href="https://gohugo.io/">hugo&lt;/a> blog template. Still not released, you can check the &lt;a href="https://gitlab.com/vijayganesh/oss/hugo-templates/scant-blog">source code&lt;/a>.&lt;/p></description></item><item><title>NuFetch</title><link>/my-projects/nufetch/</link><pubDate>Tue, 01 Sep 2015 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/my-projects/nufetch/</guid><description>&lt;h1 id="nuget-packages-with-dependency-downloader">NuGet packages with dependency downloader&lt;/h1>
&lt;p>When there is a need to host your own NuGet repository for a walled network without internet access, it is quite painful to download a package along with its dependencies. This is true especially for packages which has multiple levels of dependencies. NuFetch downloader helps in downloading packages along with its dependencies, so that you can relax and copy the package target folder and get your local NuGet ready.&lt;/p>
&lt;p>To start off, its easy to get the desired package using the following command:&lt;/p>
&lt;p>&lt;code>NuFetch -p Microsoft.AspNet.Mvc&lt;/code>&lt;/p>
&lt;p>This in-turn downloads the following packages:&lt;/p>
&lt;ol>
&lt;li>Microsoft.AspNet.Mvc&lt;/li>
&lt;li>Microsoft.AspNet.WebPages&lt;/li>
&lt;li>Microsoft.Web.Infrastructure&lt;/li>
&lt;li>Microsoft.AspNet.Razor&lt;/li>
&lt;/ol>
&lt;p>The full usage is as follows:&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">17
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">18
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">19
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">NuFetch -p &amp;lt;packageid&amp;gt; &lt;span style="color:#f92672">[&lt;/span>-s &amp;lt;sourceserver&amp;gt;&lt;span style="color:#f92672">]&lt;/span> &lt;span style="color:#f92672">[&lt;/span>-v &amp;lt;packageversion&amp;gt;&lt;span style="color:#f92672">]&lt;/span> &lt;span style="color:#f92672">[&lt;/span>-t &amp;lt;targetfolder&amp;gt;&lt;span style="color:#f92672">]&lt;/span> &lt;span style="color:#f92672">[&lt;/span>-o&lt;span style="color:#f92672">]&lt;/span> &lt;span style="color:#f92672">[&lt;/span>-i&lt;span style="color:#f92672">]&lt;/span>
-s, --source &lt;span style="color:#f92672">(&lt;/span>Default: https://www.nuget.org/api/v2/&lt;span style="color:#f92672">)&lt;/span> NuGet repository &lt;span style="color:#111">source&lt;/span> server URL
-p, --pid Required. Package Id to download
-v, --version &lt;span style="color:#f92672">(&lt;/span>Default: &lt;span style="color:#f92672">)&lt;/span> Package Version to download&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#00a8c8">do&lt;/span> not mention this parameter to donwload the latest version
--depVerType &lt;span style="color:#f92672">(&lt;/span>Default: Min&lt;span style="color:#f92672">)&lt;/span> Dependency version to download &lt;span style="color:#f92672">(&lt;/span>Min or Max version&lt;span style="color:#f92672">)&lt;/span>
-t, --targetFolder &lt;span style="color:#f92672">(&lt;/span>Default: Packages&lt;span style="color:#f92672">)&lt;/span> Target folder path to download the packages
-o, --overwrite &lt;span style="color:#f92672">(&lt;/span>Default: False&lt;span style="color:#f92672">)&lt;/span> Flag to overwrite existing file matching a package version
-i, --includePrelease &lt;span style="color:#f92672">(&lt;/span>Default: False&lt;span style="color:#f92672">)&lt;/span> Flag denoting &lt;span style="color:#00a8c8">if&lt;/span> the downloader should include prerelease when searching &lt;span style="color:#00a8c8">for&lt;/span> package
-a, --allowUnlisted &lt;span style="color:#f92672">(&lt;/span>Default: False&lt;span style="color:#f92672">)&lt;/span> Flag denoting &lt;span style="color:#00a8c8">if&lt;/span> the downloader should search &lt;span style="color:#00a8c8">for&lt;/span> package in unlisted packages
--help Display this &lt;span style="color:#111">help&lt;/span> screen.
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Source control: &lt;a href="https://gitlab.com/vijayganesh/oss/dotnet/NuFetch">https://gitlab.com/vijayganesh/oss/dotnet/NuFetch&lt;/a>&lt;/p>
&lt;p>Latest Release: &lt;a href="https://gitlab.com/vijayganesh/oss/dotnet/NuFetch/tags/v0.1.5725.818">v0.1.5725.818&lt;/a>&lt;/p>
&lt;p>&lt;a href="/my-projects/">My other projects&lt;/a>&lt;/p></description></item><item><title>NuFetch – Nuget package with dependency downloader</title><link>/2015/09/nufetch-nuget-package-with-dependency-downloader/</link><pubDate>Tue, 01 Sep 2015 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2015/09/nufetch-nuget-package-with-dependency-downloader/</guid><description>&lt;p>At last got some free time and got a chance to solve a problem I was having; downloading NuGet packages along with its dependencies for hosting them in an internal network NuGet server.&lt;/p>
&lt;p>It was a big pain to download a package along with its dependent packages till now, you have to either use Chrome/Firefox plugin or the NuGet package manager and download the depedencies one after another. To address this I spent the last week cooking up a package downloader which takes care of the dependencies along with the main package and stores them in a folder of your choice.&lt;/p>
&lt;p>You can get more information at the &lt;a href="/my-projects/nufetch/">NuFetch project page&lt;/a>, and at its &lt;a href="https://github.com/vijaysg/NuFetch">source control page&lt;/a>.&lt;/p></description></item><item><title>Preparing Visual Studio 2015 and Windows SDK setup for Offline installation</title><link>/2015/08/preparing-visual-studio-2015-and-windows-sdk-setup-for-offline-installation/</link><pubDate>Thu, 13 Aug 2015 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2015/08/preparing-visual-studio-2015-and-windows-sdk-setup-for-offline-installation/</guid><description>&lt;p>There are 2 ways to get the &lt;a href="https://www.visualstudio.com/downloads/download-visual-studio-vs" target="_blank">Visual Studio 2015&lt;/a> installation for offline installation:&lt;/p>
&lt;p>&lt;strong>Option 1 – ISO File&lt;/strong>: Download the ISO file for &lt;a href="https://go.microsoft.com/fwlink/?LinkId=615448&amp;#038;clcid=0x409" target="_blank">Community&lt;/a> or &lt;a href="https://go.microsoft.com/fwlink/?LinkId=615436&amp;#038;clcid=0x409" target="_blank">Enterprise&lt;/a> edition. Then virtual mount them to a drive or extract them using a tool (like &lt;a href="http://www.7-zip.org/" target="_blank">7Zip&lt;/a>), and start your installation. When I tried this option, the visual studio seemed to miss few packages which it downloaded through an online feed during the installation. So, a better option is to use…&lt;/p>
&lt;p>&lt;strong>Option 2 – /layout switch&lt;/strong>: Download the web installer for &lt;a href="https://go.microsoft.com/fwlink/?LinkId=532606&amp;#038;clcid=0x409" target="_blank">Community&lt;/a> or &lt;a href="https://go.microsoft.com/fwlink/?LinkId=615437&amp;#038;clcid=0x409" target="_blank">Enterprise&lt;/a> edition. Using administrative command prompt, navigate to the folder where the installation file were downloaded and run the installation file with &lt;code class="vs2015">/layout&lt;/code> command.&lt;/p>
&lt;p>Example, for Community edition it would be &lt;code class="vs2015">vs_community.exe /layout&lt;/code> and for Enterprise version it would be &lt;code class="vs2015">vs_enterprise.exe /layout&lt;/code>. This option allows you to download the full set of files to a local folder, and this folder has all the necessary files for offline installation.&lt;/p>
&lt;p>Same way the installation for &lt;a href="https://go.microsoft.com/fwlink/p/?LinkId=619296" target="_blank">latest Windows SDK&lt;/a> can also be prepared.&lt;/p></description></item><item><title>Visual Studio 2015 Extensions</title><link>/2015/08/visual-studio-2015-extensions/</link><pubDate>Thu, 13 Aug 2015 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2015/08/visual-studio-2015-extensions/</guid><description>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Plugin&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;a href="https://visualstudiogallery.msdn.microsoft.com/daf5c6db-386b-4994-bdd7-b6cd52f11b72" target="_blank">NuGet Packager&lt;/a>&lt;/td>
&lt;td>Template for creating NuGet packages easily.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://visualstudiogallery.msdn.microsoft.com/0e313dfd-be80-4afb-b5e9-6e74d369f7a1" target="_blank">SQL Server Compact/SQLite Toolbox&lt;/a>&lt;/td>
&lt;td>This add-in adds several features to help your embedded database development efforts: Scripting of tables and data, import from SQL Server and CSV files and much, much more.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://visualstudiogallery.msdn.microsoft.com/dbfa0540-b710-4764-a314-8157e7629655">Database .NET v16&lt;/a>&lt;/td>
&lt;td>Multiple database management tool&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://visualstudiogallery.msdn.microsoft.com/site/search?f%5B0%5D.Type=VisualStudioVersion&amp;amp;f%5B0%5D.Value=14.0&amp;amp;f%5B0%5D.Text=Visual%20Studio%202015&amp;amp;f%5B1%5D.Type=CostCategory&amp;amp;f%5B1%5D.Value=Free&amp;amp;f%5B1%5D.Text=Free&amp;amp;f%5B2%5D.Type=User&amp;amp;f%5B2%5D.Value=Mads%20Kristensen&amp;amp;f%5B2%5D.Text=Mads%20Kristensen&amp;amp;sortBy=Date">Most stuff from Mads Kristensen&lt;/a>&lt;/td>
&lt;td>* Web Compiler * Bundler &amp;amp; Minifier * Web Essentials 2015 * Add New File * CssCop – FxCop for Stylesheets * Image Optimizer * SideWaffle Template Pack * File Nesting&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://visualstudiogallery.msdn.microsoft.com/3b64e04c-e8de-4b97-8358-06c73a97cc68">ResXManager&lt;/a>&lt;/td>
&lt;td>Manage localization of all ResX-Based resources in one place. Shows all resources of a solution and let&amp;rsquo;s you edit the strings and their localizations in a well-arranged data grid.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://visualstudiogallery.msdn.microsoft.com/f43d27fa-6bf7-4f3d-bf5e-3e716e63716b">Extended Strongly Typed Resource Generator&lt;/a>&lt;/td>
&lt;td>Generates a managed class that exposes every resource you have in the *.resx file as a strongly typed static property. Now, any type of resource supported — including images, icons, strings, etc. — is a piece of cake to retrieve.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://visualstudiogallery.msdn.microsoft.com/site/search?f%5B0%5D.Type=User&amp;amp;f%5B0%5D.Value=Multilingual%20App%20Toolkit">Multilingual App Toolkit&lt;/a>&lt;/td>
&lt;td>The Multilingual App Toolkit works with Visual Studio to streamline your localization workflow&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://visualstudiogallery.msdn.microsoft.com/34ebc6a2-2777-421d-8914-e29c1dfa7f5d">Productivity Power Tools 2015&lt;/a>&lt;/td>
&lt;td>A set of extensions to Visual Studio 2015 Community (and above) which improves developer productivity.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://visualstudiogallery.msdn.microsoft.com/84e83a7c-9606-4f9f-83dd-0f6182f13add">Cloud Explorer for Visual Studio 2015&lt;/a>&lt;/td>
&lt;td>View your cloud resources, inspect their properties, and perform key developer actions from within Visual Studio.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://visualstudiogallery.msdn.microsoft.com/7b421a95-c32c-4433-a2be-a41b276013ab">Roaming Extension Manager&lt;/a>&lt;/td>
&lt;td>Allows users to roam and download Visual Studio extensions across machines&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://visualstudiogallery.msdn.microsoft.com/0ad320bc-80e4-402a-bf2b-d6c23a3a6730">Tenon HTML Accessibility Checker&lt;/a>&lt;/td>
&lt;td>The Tenon’s HTML Accessibility Checker service makes it easier for developers to detect and resolve common accessibility issues within their HTML-based user interfaces.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://visualstudiogallery.msdn.microsoft.com/8ad891d2-142b-4acf-b487-46db9f3bb5cf">TFS Source Control Explorer Extension&lt;/a>&lt;/td>
&lt;td>Visual Studio 2015 Extension for Team Foundation Server Source Control Explorer&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://visualstudiogallery.msdn.microsoft.com/03ead7e5-3680-4834-a4cb-271a2b189108">TFS Productivity Pack&lt;/a>&lt;/td>
&lt;td>A set of extensions to Visual Studio designed to improve your interaction with Team Foundation Server&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://visualstudiogallery.msdn.microsoft.com/8a8c753d-e10e-42b2-940e-2f6e8ed68d84">TFS Auto Shelve for Visual Studio 2015&lt;/a>&lt;/td>
&lt;td>Create a shelveset for the latest version of all pending changes, automatically. Pending changes from the local TFS workspaces will be shelved to the TFS Server every “x” number of minutes.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://visualstudiogallery.msdn.microsoft.com/05bb50e3-c971-4613-9379-acae2cfe6f9e">SlowCheetah – XML Transforms&lt;/a>&lt;/td>
&lt;td>Transform your app.config or any other XML file based on the build configuration&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://visualstudiogallery.msdn.microsoft.com/f1cc3f3e-c300-40a7-8797-c509fb8933b9">Microsoft Visual Studio 2015 Installer Projects&lt;/a>&lt;/td>
&lt;td>Official Microsoft extension provides support for Visual Studio Installer Projects in Visual Studio 2015.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://visualstudiogallery.msdn.microsoft.com/92452068-2478-45aa-8a63-19e2b9bc11d1">Node Tools 1.1 RC for Visual Studio 2015&lt;/a>&lt;/td>
&lt;td>Node.js Tools for Visual Studio (NTVS) is a free, open-source plug-in that turns Visual Studio into a Node.js Integrated Development Environment (IDE)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://visualstudiogallery.msdn.microsoft.com/60fc53d4-e414-461b-a27c-3d5d2a53f637">Msiler&lt;/a>&lt;/td>
&lt;td>MSIL Code Viewer for Visual Studio 2013/2015&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://visualstudiogallery.msdn.microsoft.com/8ef1d688-f80c-4380-8004-2ec7f814e7de">ILSpy&lt;/a>&lt;/td>
&lt;td>Integrates the ILSpy decompiler into Visual Studio.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://visualstudiogallery.msdn.microsoft.com/44034a7b-143d-4b51-b7bc-99aa656ba137">IL Support&lt;/a>&lt;/td>
&lt;td>Provides syntax highlighting for the IL (Intermediate Language) and project templates for C#, F# and Visual Basic that support embedding and calling IL code.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://visualstudiogallery.msdn.microsoft.com/eedc48e7-5169-40d3-b602-ad451990a420">Array Visualizer&lt;/a>&lt;/td>
&lt;td>Array Visualizer is a free, open source extension for visual studio. It is designed to display arrays (Jagged and up to 4D) while debugging an application.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://visualstudiogallery.msdn.microsoft.com/2beb9705-b568-45d1-8550-751e181e3aef">MultiEditing&lt;/a>&lt;/td>
&lt;td>Simultaneously edit in more than one location in the editor&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://visualstudiogallery.msdn.microsoft.com/7179e851-a263-44b7-a177-1d31e33c84fd">Code alignment&lt;/a>&lt;/td>
&lt;td>Code alignment helps you present your code beautifully, enhancing clarity and readability.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://visualstudiogallery.msdn.microsoft.com/19609469-380e-4fcf-bcde-e31caeb658b2">Viasfora&lt;/a>&lt;/td>
&lt;td>Enrich your text editing experience with Rainbow Braces and more!&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://visualstudiogallery.msdn.microsoft.com/1f6ec6ff-e89b-4c47-8e79-d2d68df894ec">Razor Generator&lt;/a>&lt;/td>
&lt;td>Generates source code from Razor files (.cshtml files), allowing them to be compiled into your assemblies. Supports MVC, Web Pages and standalone templates.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://visualstudiogallery.msdn.microsoft.com/39ae8dec-d11a-4ac9-974e-be0fdadec71b">F# MVC 5&lt;/a> and &lt;a href="https://visualstudiogallery.msdn.microsoft.com/f1dae7fe-1ecc-4f1b-86b5-32a2970d012a">F# Web Item Templates&lt;/a>&lt;/td>
&lt;td>F# Web Application templates (MVC 5 and Web API 2.2) and item templates for pure F# web projects&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://visualstudiogallery.msdn.microsoft.com/136b942e-9f2c-4c0b-8bac-86d774189cff">Visual F# Power Tools&lt;/a>&lt;/td>
&lt;td>A collection of additional commands for F# in Visual Studio&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://visualstudiogallery.msdn.microsoft.com/16b9d664-d88c-460e-84a5-700ab40ba452">Regex Tester&lt;/a>&lt;/td>
&lt;td>Regular expression tester for Visual Studio&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table></description></item><item><title>EnsureBclBuildImported pre-build check causing build errors in Visual Studio 2014 Update 4</title><link>/2014/11/ensurebclbuildimported-pre-build-check-causing-build-errors-in-visual-studio-2014-update-4/</link><pubDate>Sun, 23 Nov 2014 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2014/11/ensurebclbuildimported-pre-build-check-causing-build-errors-in-visual-studio-2014-update-4/</guid><description>&lt;p>After the recent update to Update 4 creating a new web application is by default causing a build error. The real error message is as follows:&lt;/p>
&lt;blockquote>
&lt;p>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see &lt;a href="http://go.microsoft.com/fwlink/?LinkID=317567">http://go.microsoft.com/fwlink/?LinkID=317567&lt;/a>.&lt;/p>
&lt;/blockquote>
&lt;p>Editing the project file revealed the following line:&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-xml" data-lang="xml">&lt;span style="color:#f92672">&amp;lt;Target&lt;/span> &lt;span style="color:#75af00">Name=&lt;/span>&lt;span style="color:#d88200">&amp;#34;EnsureBclBuildImported&amp;#34;&lt;/span> &lt;span style="color:#75af00">BeforeTargets=&lt;/span>&lt;span style="color:#d88200">&amp;#34;BeforeBuild&amp;#34;&lt;/span> &lt;span style="color:#75af00">Condition=&lt;/span>&lt;span style="color:#d88200">&amp;#34;&amp;#39;$(BclBuildImported)&amp;#39; == &amp;#39;&amp;#39;&amp;#34;&lt;/span>&lt;span style="color:#f92672">&amp;gt;&lt;/span>
&lt;span style="color:#f92672">&amp;lt;Error&lt;/span> &lt;span style="color:#75af00">Condition=&lt;/span>&lt;span style="color:#d88200">&amp;#34;!Exists(&amp;#39;..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets&amp;#39;)&amp;#34;&lt;/span> &lt;span style="color:#75af00">Text=&lt;/span>&lt;span style="color:#d88200">&amp;#34;This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=317567.&amp;#34;&lt;/span> &lt;span style="color:#75af00">HelpKeyword=&lt;/span>&lt;span style="color:#d88200">&amp;#34;BCLBUILD2001&amp;#34;&lt;/span> &lt;span style="color:#f92672">/&amp;gt;&lt;/span>
&lt;span style="color:#f92672">&amp;lt;Error&lt;/span> &lt;span style="color:#75af00">Condition=&lt;/span>&lt;span style="color:#d88200">&amp;#34;Exists(&amp;#39;..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets&amp;#39;)&amp;#34;&lt;/span> &lt;span style="color:#75af00">Text=&lt;/span>&lt;span style="color:#d88200">&amp;#34;The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568.&amp;#34;&lt;/span> &lt;span style="color:#75af00">HelpKeyword=&lt;/span>&lt;span style="color:#d88200">&amp;#34;BCLBUILD2002&amp;#34;&lt;/span> &lt;span style="color:#f92672">/&amp;gt;&lt;/span>
&lt;span style="color:#f92672">&amp;lt;/Target&amp;gt;&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>I tried installing the &lt;code>Microsoft.Bcl.Build&lt;/code> through Nuget, but that installed version &lt;code>1.0.21&lt;/code> instead of &lt;code>1.0.14&lt;/code> and further the new version did not have the required &lt;code>tools\Microsoft.Bcl.Build.targets&lt;/code> file.&lt;/p>
&lt;p>The best option for me was to take out the lines from the project file.&lt;/p></description></item><item><title>Migrating MS-SQL 2008 to 2012</title><link>/2014/11/migrating-sql-2008-to-2012/</link><pubDate>Fri, 07 Nov 2014 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2014/11/migrating-sql-2008-to-2012/</guid><description>&lt;h2 id="pre-migration">Pre-migration&lt;/h2>
&lt;ul>
&lt;li>Update the new servers to have the latest updates for both OS and MS-SQL&lt;/li>
&lt;li>Setup Windows Failsafe cluster&lt;/li>
&lt;li>Setup Always-On availability group, replicas and listener&lt;/li>
&lt;li>Setup shared folder for storing backups from the old database servers&lt;/li>
&lt;li>Setup shared folder for storing backup/synchronization data for the new database servers&lt;/li>
&lt;li>Create a copy of the stored procedures used by jobs, and update them to work with availability group&lt;/li>
&lt;li>Script the SQL server logins&lt;/li>
&lt;li>If you want to change the databases to read-only mode, remove existing mirroring functionality for the databases&lt;/li>
&lt;/ul>
&lt;h2 id="migration">Migration&lt;/h2>
&lt;ol>
&lt;li>
&lt;p>Put up App_Offline.htm file for the web servers&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Take full backup of the database&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">5
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">6
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">7
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-sql" data-lang="sql">&lt;span style="color:#111">BACKUP&lt;/span> &lt;span style="color:#00a8c8">DATABASE&lt;/span> &lt;span style="color:#111">[&lt;/span>&lt;span style="color:#960050;background-color:#1e0010">{&lt;/span>&lt;span style="color:#111">DatabaseName&lt;/span>&lt;span style="color:#960050;background-color:#1e0010">}&lt;/span>&lt;span style="color:#111">]&lt;/span>
&lt;span style="color:#00a8c8">TO&lt;/span> &lt;span style="color:#111">DISK&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">N&lt;/span>&lt;span style="color:#d88200">&amp;#39;{BackupSharedFolder}\{DatabaseName}.bak&amp;#39;&lt;/span>
&lt;span style="color:#00a8c8">WITH&lt;/span> &lt;span style="color:#111">NOFORMAT&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#111">INIT&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#111">NAME&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#111">N&lt;/span>&lt;span style="color:#d88200">&amp;#39;{DatabaseName}-Full Database Backup&amp;#39;&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#111">SKIP&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#111">NO_COMPRESSION&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/li>
&lt;li>
&lt;p>Take Transactional backup of the database&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">5
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">6
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-sql" data-lang="sql">&lt;span style="color:#111">BACKUP&lt;/span> &lt;span style="color:#111">LOG&lt;/span> &lt;span style="color:#111">[&lt;/span>&lt;span style="color:#960050;background-color:#1e0010">{&lt;/span>&lt;span style="color:#111">DatabaseName&lt;/span>&lt;span style="color:#960050;background-color:#1e0010">}&lt;/span>&lt;span style="color:#111">]&lt;/span>
&lt;span style="color:#00a8c8">TO&lt;/span> &lt;span style="color:#111">DISK&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">N&lt;/span>&lt;span style="color:#d88200">&amp;#39;{BackupSharedFolder}\{DatabaseName}.log&amp;#39;&lt;/span>
&lt;span style="color:#00a8c8">WITH&lt;/span> &lt;span style="color:#111">NOFORMAT&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#111">INIT&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#111">NAME&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">N&lt;/span>&lt;span style="color:#d88200">&amp;#39;{DatabaseName}-Transactional Backup&amp;#39;&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#111">NO_COMPRESSION&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/li>
&lt;li>
&lt;p>Set database to read-only mode&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-sql" data-lang="sql">&lt;span style="color:#00a8c8">ALTER&lt;/span> &lt;span style="color:#00a8c8">DATABASE&lt;/span> &lt;span style="color:#111">[&lt;/span>&lt;span style="color:#960050;background-color:#1e0010">{&lt;/span>&lt;span style="color:#111">DatabaseName&lt;/span>&lt;span style="color:#960050;background-color:#1e0010">}&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#00a8c8">SET&lt;/span> &lt;span style="color:#111">READ_ONLY&lt;/span> &lt;span style="color:#00a8c8">WITH&lt;/span> &lt;span style="color:#111">NO_WAIT&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/li>
&lt;li>
&lt;p>Connect to the new server&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Restore the database&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">17
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">18
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">19
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">20
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">21
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">22
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">23
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">24
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">25
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">26
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">27
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">28
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">29
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">30
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">31
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">32
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">33
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">34
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">35
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">36
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">37
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">38
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">39
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">40
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">41
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">42
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">43
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">44
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">45
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">46
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">47
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">48
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">49
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">50
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">51
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">52
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">53
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">54
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">55
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">56
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">57
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">58
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">59
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">60
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-sql" data-lang="sql">&lt;span style="color:#00a8c8">DECLARE&lt;/span> &lt;span style="color:#f92672">@&lt;/span>&lt;span style="color:#111">v_DefaultDataPath&lt;/span> &lt;span style="color:#111">NVARCHAR&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">250&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#00a8c8">CONVERT&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">NVARCHAR&lt;/span>&lt;span style="color:#111">,&lt;/span>&lt;span style="color:#111">SERVERPROPERTY&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#39;InstanceDefaultDataPath&amp;#39;&lt;/span>&lt;span style="color:#111">));&lt;/span>
&lt;span style="color:#00a8c8">DECLARE&lt;/span> &lt;span style="color:#f92672">@&lt;/span>&lt;span style="color:#111">v_DefaultLogPath&lt;/span> &lt;span style="color:#111">NVARCHAR&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">250&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#00a8c8">CONVERT&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">NVARCHAR&lt;/span>&lt;span style="color:#111">,&lt;/span>&lt;span style="color:#111">SERVERPROPERTY&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#39;InstanceDefaultLogPath&amp;#39;&lt;/span>&lt;span style="color:#111">));&lt;/span>
&lt;span style="color:#00a8c8">DECLARE&lt;/span> &lt;span style="color:#f92672">@&lt;/span>&lt;span style="color:#111">v_FinalDataFilePath&lt;/span> &lt;span style="color:#111">NVARCHAR&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">250&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">CONCAT&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#f92672">@&lt;/span>&lt;span style="color:#111">v_DefaultDataPath&lt;/span>&lt;span style="color:#111">,&lt;/span>&lt;span style="color:#d88200">&amp;#39;\{DatabaseName}.mdf&amp;#39;&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#00a8c8">DECLARE&lt;/span> &lt;span style="color:#f92672">@&lt;/span>&lt;span style="color:#111">v_FinalLogFilePath&lt;/span> &lt;span style="color:#111">NVARCHAR&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">250&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">CONCAT&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#f92672">@&lt;/span>&lt;span style="color:#111">v_DefaultLogPath&lt;/span>&lt;span style="color:#111">,&lt;/span>&lt;span style="color:#d88200">&amp;#39;\{DatabaseName}_Log.ldf&amp;#39;&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#00a8c8">DECLARE&lt;/span> &lt;span style="color:#f92672">@&lt;/span>&lt;span style="color:#111">v_LogicalDataFileName&lt;/span> &lt;span style="color:#111">NVARCHAR&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">128&lt;/span>&lt;span style="color:#111">),&lt;/span> &lt;span style="color:#f92672">@&lt;/span>&lt;span style="color:#111">v_LogicalLogFileName&lt;/span> &lt;span style="color:#111">NVARCHAR&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">128&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#00a8c8">DECLARE&lt;/span> &lt;span style="color:#f92672">@&lt;/span>&lt;span style="color:#111">tbl_FileList&lt;/span> &lt;span style="color:#00a8c8">TABLE&lt;/span>
&lt;span style="color:#111">(&lt;/span>
&lt;span style="color:#111">LogicalName&lt;/span> &lt;span style="color:#111">NVARCHAR&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">128&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#111">PhysicalName&lt;/span> &lt;span style="color:#111">NVARCHAR&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">260&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#00a8c8">Type&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#111">CHAR&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#111">FileGroupName&lt;/span> &lt;span style="color:#111">NVARCHAR&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">128&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#00a8c8">Size&lt;/span> &lt;span style="color:#111">NUMERIC&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">20&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#111">MaxSize&lt;/span> &lt;span style="color:#111">NUMERIC&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">20&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#111">FileID&lt;/span> &lt;span style="color:#111">BIGINT&lt;/span> &lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#111">CreateLSN&lt;/span> &lt;span style="color:#111">NUMERIC&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">25&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#111">DropLSN&lt;/span> &lt;span style="color:#111">NUMERIC&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">25&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#111">UniqueID&lt;/span> &lt;span style="color:#111">UNIQUEIDENTIFIER&lt;/span> &lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#111">ReadOnlyLSN&lt;/span> &lt;span style="color:#111">NUMERIC&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">25&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#111">ReadWriteLSN&lt;/span> &lt;span style="color:#111">NUMERIC&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">25&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#111">BackupSizeInBytes&lt;/span> &lt;span style="color:#111">BIGINT&lt;/span> &lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#111">SourceBlockSize&lt;/span> &lt;span style="color:#111">INT&lt;/span> &lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#111">FileGroupID&lt;/span> &lt;span style="color:#111">INT&lt;/span> &lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#111">LogGroupGUID&lt;/span> &lt;span style="color:#111">UNIQUEIDENTIFIER&lt;/span> &lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#111">DifferentialBaseLSN&lt;/span> &lt;span style="color:#111">NUMERIC&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">25&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#111">DifferentialBaseGUID&lt;/span> &lt;span style="color:#111">UNIQUEIDENTIFIER&lt;/span> &lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#111">IsReadOnl&lt;/span> &lt;span style="color:#111">BIT&lt;/span> &lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#111">IsPresent&lt;/span> &lt;span style="color:#111">BIT&lt;/span> &lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#111">TDEThumbprint&lt;/span> &lt;span style="color:#111">VARBINARY&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">32&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#00a8c8">INSERT&lt;/span> &lt;span style="color:#00a8c8">INTO&lt;/span> &lt;span style="color:#f92672">@&lt;/span>&lt;span style="color:#111">tbl_FileList&lt;/span>
&lt;span style="color:#00a8c8">EXEC&lt;/span>
&lt;span style="color:#111">(&lt;/span> &lt;span style="color:#d88200">&amp;#39;RESTORE FILELISTONLY FROM DISK = N&amp;#39;&amp;#39;{BackupSharedFolder}\{DatabaseName}.bak&amp;#39;&amp;#39;&amp;#39;&lt;/span>
&lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#75715e">-- Extract the logical data file name from the backup file
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#00a8c8">SELECT&lt;/span> &lt;span style="color:#f92672">@&lt;/span>&lt;span style="color:#111">v_LogicalDataFileName&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">LogicalName&lt;/span>
&lt;span style="color:#00a8c8">FROM&lt;/span> &lt;span style="color:#f92672">@&lt;/span>&lt;span style="color:#111">tbl_FileList&lt;/span> &lt;span style="color:#00a8c8">AS&lt;/span> &lt;span style="color:#111">tfl&lt;/span>
&lt;span style="color:#00a8c8">WHERE&lt;/span> &lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">tfl&lt;/span>&lt;span style="color:#111">].[&lt;/span>&lt;span style="color:#00a8c8">Type&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#d88200">&amp;#39;D&amp;#39;&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#75715e">-- Extract the logical log file name from the backup file
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#00a8c8">SELECT&lt;/span> &lt;span style="color:#f92672">@&lt;/span>&lt;span style="color:#111">v_LogicalLogFileName&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">LogicalName&lt;/span>
&lt;span style="color:#00a8c8">FROM&lt;/span> &lt;span style="color:#f92672">@&lt;/span>&lt;span style="color:#111">tbl_FileList&lt;/span> &lt;span style="color:#00a8c8">AS&lt;/span> &lt;span style="color:#111">tfl&lt;/span>
&lt;span style="color:#00a8c8">WHERE&lt;/span> &lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">tfl&lt;/span>&lt;span style="color:#111">].[&lt;/span>&lt;span style="color:#00a8c8">Type&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#d88200">&amp;#39;L&amp;#39;&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#111">RESTORE&lt;/span> &lt;span style="color:#00a8c8">DATABASE&lt;/span> &lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">EyeTeaERP&lt;/span>&lt;span style="color:#111">]&lt;/span>
&lt;span style="color:#00a8c8">FROM&lt;/span> &lt;span style="color:#111">DISK&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">N&lt;/span>&lt;span style="color:#d88200">&amp;#39;{BackupSharedFolder}\{DatabaseName}.bak&amp;#39;&lt;/span>
&lt;span style="color:#00a8c8">WITH&lt;/span> &lt;span style="color:#111">FILE&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#00a8c8">MOVE&lt;/span> &lt;span style="color:#f92672">@&lt;/span>&lt;span style="color:#111">v_LogicalDataFileName&lt;/span> &lt;span style="color:#00a8c8">TO&lt;/span> &lt;span style="color:#f92672">@&lt;/span>&lt;span style="color:#111">v_FinalDataFilePath&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#00a8c8">MOVE&lt;/span> &lt;span style="color:#f92672">@&lt;/span>&lt;span style="color:#111">v_LogicalLogFileName&lt;/span> &lt;span style="color:#00a8c8">TO&lt;/span> &lt;span style="color:#f92672">@&lt;/span>&lt;span style="color:#111">v_FinalLogFilePath&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#111">NORECOVERY&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#111">NOUNLOAD&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#111">RESTORE&lt;/span> &lt;span style="color:#111">LOG&lt;/span> &lt;span style="color:#111">[&lt;/span>&lt;span style="color:#960050;background-color:#1e0010">{&lt;/span>&lt;span style="color:#111">DatabaseName&lt;/span>&lt;span style="color:#960050;background-color:#1e0010">}&lt;/span>&lt;span style="color:#111">]&lt;/span>
&lt;span style="color:#00a8c8">FROM&lt;/span> &lt;span style="color:#111">DISK&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">N&lt;/span>&lt;span style="color:#d88200">&amp;#39;{BackupSharedFolder}\{DatabaseName}.log&amp;#39;&lt;/span>
&lt;span style="color:#00a8c8">WITH&lt;/span> &lt;span style="color:#111">FILE&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#111">NOUNLOAD&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/li>
&lt;li>
&lt;p>Set the compatibility level matching the new version&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-sql" data-lang="sql">&lt;span style="color:#00a8c8">DECLARE&lt;/span> &lt;span style="color:#f92672">@&lt;/span>&lt;span style="color:#111">v_CompLevel&lt;/span> &lt;span style="color:#111">INT&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#00a8c8">SELECT&lt;/span> &lt;span style="color:#f92672">@&lt;/span>&lt;span style="color:#111">v_CompLevel&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">d&lt;/span>&lt;span style="color:#111">].[&lt;/span>&lt;span style="color:#111">compatibility_level&lt;/span>&lt;span style="color:#111">]&lt;/span>
&lt;span style="color:#00a8c8">FROM&lt;/span> &lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">sys&lt;/span>&lt;span style="color:#111">].[&lt;/span>&lt;span style="color:#111">databases&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#00a8c8">AS&lt;/span> &lt;span style="color:#111">d&lt;/span>
&lt;span style="color:#00a8c8">WHERE&lt;/span> &lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">d&lt;/span>&lt;span style="color:#111">].[&lt;/span>&lt;span style="color:#111">name&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#d88200">&amp;#39;{DatabaseName}&amp;#39;&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#00a8c8">IF&lt;/span> &lt;span style="color:#f92672">@&lt;/span>&lt;span style="color:#111">v_CompLevel&lt;/span> &lt;span style="color:#f92672">&amp;amp;&lt;/span>&lt;span style="color:#111">lt&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#ae81ff">110&lt;/span>
&lt;span style="color:#00a8c8">BEGIN&lt;/span>
&lt;span style="color:#75715e">-- 100 = 2008, 110 = 2012
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#00a8c8">ALTER&lt;/span> &lt;span style="color:#00a8c8">DATABASE&lt;/span> &lt;span style="color:#111">[&lt;/span>&lt;span style="color:#960050;background-color:#1e0010">{&lt;/span>&lt;span style="color:#111">DatabaseName&lt;/span>&lt;span style="color:#960050;background-color:#1e0010">}&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#00a8c8">SET&lt;/span> &lt;span style="color:#111">COMPATIBILITY_LEVEL&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">110&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#00a8c8">END&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/li>
&lt;li>
&lt;p>Add the database to the availability group&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-sql" data-lang="sql">&lt;span style="color:#00a8c8">ALTER&lt;/span> &lt;span style="color:#111">AVAILABILITY&lt;/span> &lt;span style="color:#00a8c8">GROUP&lt;/span> &lt;span style="color:#111">[&lt;/span>&lt;span style="color:#960050;background-color:#1e0010">{&lt;/span>&lt;span style="color:#111">AvailabilityGroupName&lt;/span>&lt;span style="color:#960050;background-color:#1e0010">}&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#00a8c8">ADD&lt;/span> &lt;span style="color:#00a8c8">DATABASE&lt;/span> &lt;span style="color:#111">[&lt;/span>&lt;span style="color:#960050;background-color:#1e0010">{&lt;/span>&lt;span style="color:#111">DatabaseName&lt;/span>&lt;span style="color:#960050;background-color:#1e0010">}&lt;/span>&lt;span style="color:#111">];&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/li>
&lt;li>
&lt;p>Take a full backup and transactional backup of the database to the synch folder share&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Connect to each of the secondary replicas&lt;/p>
&lt;ol>
&lt;li>Restore the database from the synch folder share in recovering mode
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-sql" data-lang="sql">&lt;span style="color:#111">RESTORE&lt;/span> &lt;span style="color:#111">...&lt;/span> &lt;span style="color:#75715e">--AS ABOVE EXAMPLE +
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#00a8c8">WITH&lt;/span> &lt;span style="color:#111">NORECOVERY&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/li>
&lt;li>Add the database to the availability group
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-sql" data-lang="sql">&lt;span style="color:#00a8c8">ALTER&lt;/span> &lt;span style="color:#00a8c8">DATABASE&lt;/span> &lt;span style="color:#111">[&lt;/span>&lt;span style="color:#960050;background-color:#1e0010">{&lt;/span>&lt;span style="color:#111">DatabaseName&lt;/span>&lt;span style="color:#960050;background-color:#1e0010">}&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#00a8c8">SET&lt;/span> &lt;span style="color:#111">HADR&lt;/span> &lt;span style="color:#111">AVAILABILITY&lt;/span> &lt;span style="color:#00a8c8">GROUP&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">[&lt;/span>&lt;span style="color:#960050;background-color:#1e0010">{&lt;/span>&lt;span style="color:#111">AvailabilityGroupName&lt;/span>&lt;span style="color:#960050;background-color:#1e0010">}&lt;/span>&lt;span style="color:#111">];&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/li>
&lt;/ol>
&lt;/li>
&lt;li>
&lt;p>Restore server logins as needed on all replicas&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Connect to the availabiliy group and update the stored procedures with the modified copy created for working with Always-On availability group&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Setup the database mail, and all operators as needed in all of the replicas&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Restore the jobs to all of the replicas&lt;/p>
&lt;/li>
&lt;/ol>
&lt;h2 id="post-migration">Post-Migration&lt;/h2>
&lt;ul>
&lt;li>Update the configuration files connections string to point to the correct data source&lt;/li>
&lt;li>Remove the App_Offline.htm file from the web servers&lt;/li>
&lt;li>Confirm the failover is working as intended&lt;/li>
&lt;li>Confirm the jobs are working as intended&lt;/li>
&lt;/ul>
&lt;h2 id="packaging">Packaging&lt;/h2>
&lt;p>Package the above steps through an application created in language of your choice with care to set &lt;code>Connection Timeout&lt;/code> in the connection string, and also appropriate &lt;code>CommandTimeout&lt;/code> you are all set to go!&lt;/p></description></item><item><title>My Bookmarks</title><link>/my-bookmarks/</link><pubDate>Mon, 03 Nov 2014 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/my-bookmarks/</guid><description>&lt;ul>
&lt;li>Technical References
&lt;ul>
&lt;li>SQL
&lt;ul>
&lt;li>&lt;a href="https://www.simple-talk.com/sql/t-sql-programming/consuming-json-strings-in-sql-server/">Consuming JSON Strings in SQL Server&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/ercananlama/jqsql">JQSQL&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul></description></item><item><title>ASP.NET vNext, a quick look into the future</title><link>/2014/08/asp-net-vnext-a-quick-look-into-the-future/</link><pubDate>Thu, 28 Aug 2014 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2014/08/asp-net-vnext-a-quick-look-into-the-future/</guid><description>&lt;ol>
&lt;li>MVC Controllers and WebAPI Controllers are now merged to form single controller class&lt;/li>
&lt;li>No need for physical folders for Areas, just decorating a Controller with [Area(“AreaName”)] gets you the desired result. But the problem is rendering engines still look for Views in &lt;code>Areas/{area name}/Views/{controller}&lt;/code> path. So I guess you are better of placing your Controllers also in &lt;code>Areas/{area name}/Controller&lt;/code> folder for better organizing them&lt;/li>
&lt;li>Route mapping looks a bit better now with the following syntax&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">5
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-cs" data-lang="cs">&lt;span style="color:#75715e">// MVC 6 route
&lt;/span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#111">routes&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">MapRoute&lt;/span>&lt;span style="color:#111">(&lt;/span>
&lt;span style="color:#111">name&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#d88200">&amp;#34;Default&amp;#34;&lt;/span>&lt;span style="color:#111">;,&lt;/span>
&lt;span style="color:#111">template&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#d88200">&amp;#34;{controller=Home}/{action=Index}/{id?}&amp;#34;&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#111">);&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;ol start="4">
&lt;li>Even if you omit the &lt;code>{action}&lt;/code> token from the route template, your Controllers can still respond to Action names corresponding to the Request method (GET, POST, UPDATE…). So, this neatly ties up the merger of MVC Controllers and WebAPI Controllers&lt;/li>
&lt;li>OWIN and Katana seems to be all the rage now, and for good reasons. So, the startup scripts looks thus (no need for Global.asax .. will miss you my friend!)&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">17
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">18
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">19
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">20
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">21
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">22
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-cs" data-lang="cs">&lt;span style="color:#00a8c8">using&lt;/span> &lt;span style="color:#111">Microsoft.AspNet.Routing&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#00a8c8">using&lt;/span> &lt;span style="color:#111">Microsoft.AspNet.Builder&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#00a8c8">using&lt;/span> &lt;span style="color:#111">Microsoft.Framework.DependencyInjection&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#00a8c8">public&lt;/span> &lt;span style="color:#00a8c8">class&lt;/span> &lt;span style="color:#75af00">Startup&lt;/span>
&lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#00a8c8">public&lt;/span> &lt;span style="color:#00a8c8">void&lt;/span> &lt;span style="color:#111">Configure&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">IBuilder&lt;/span> &lt;span style="color:#111">app&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#111">app&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">UseServices&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">services&lt;/span> &lt;span style="color:#111">=&amp;amp;&lt;/span>&lt;span style="color:#111">gt&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#111">services&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">AddMvc&lt;/span>&lt;span style="color:#111">();&lt;/span>
&lt;span style="color:#111">});&lt;/span>
&lt;span style="color:#111">app&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">UseMvc&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">routes&lt;/span> &lt;span style="color:#111">=&amp;amp;&lt;/span>&lt;span style="color:#111">gt&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#111">routes&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">MapRoute&lt;/span>&lt;span style="color:#111">(&lt;/span>
&lt;span style="color:#111">name&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#d88200">&amp;#34;;Default&amp;#34;&lt;/span>&lt;span style="color:#111">;,&lt;/span>
&lt;span style="color:#111">template&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#d88200">&amp;#34;{controller=Home}/{action=Index}/{id?}&amp;#34;&lt;/span>&lt;span style="color:#111">;);&lt;/span>
&lt;span style="color:#111">});&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;ol start="6">
&lt;li>Now your Visual Studio project file is a simple JSON file&lt;del datetime="2014-08-29T14:33:10+00:00">, instead of the lengthy XML one&lt;/del>&lt;/li>
&lt;/ol>
&lt;p>So, overall seems to be a nice upgrade.&lt;/p>
&lt;p>Do check out &lt;a href="http://www.asp.net/vnext/overview/aspnet-vnext/overview" target="_blank">Getting started with MVC 6&lt;/a> for a more elaborate look into the features.&lt;/p></description></item><item><title>Evolution of Visual Studio, a lot to love about!</title><link>/2014/08/evolution-of-visual-studio-a-lot-to-love-about/</link><pubDate>Fri, 22 Aug 2014 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2014/08/evolution-of-visual-studio-a-lot-to-love-about/</guid><description>&lt;p>A pleasant thing I noticed in the last few years regarding Visual Studio is it’s attitude towards supporting various open source languages and platforms.&lt;/p>
&lt;p>You would have felt the same if you were looking to improve your IDE experience when trying to work on projects not based on the Microsoft .NET family. It may have been PHP or Python (with Django) or the D Language. It is quite nice to have the option to use a single IDE which you are familiar with to work on various language and platforms.&lt;/p>
&lt;p>For anyone interested, below is my toolset/plugin setup for supporting the above mentioned language and platforms:&lt;/p>
&lt;ol>
&lt;li>PHP – [Free]: &lt;a href="http://visualstudiogallery.msdn.microsoft.com/2a10ba81-26c5-47d9-939b-6bcc7bbec251" target="_blank">PHP Language Support&lt;/a> / [Commercial]:&lt;a href="http://visualstudiogallery.msdn.microsoft.com/8292e47d-8ed2-48cb-9ebd-064e0b7891cf" target="_blank">PHP Tools for Visual Studio 2013&lt;/a>&lt;/li>
&lt;li>Python – [Free]:&lt;a href="http://visualstudiogallery.msdn.microsoft.com/9ea113de-a009-46cd-99f5-65ef0595f937" target="_blank">Python Tools for Visual Studio&lt;/a> / &lt;a href="http://pytools.codeplex.com/" target="_blank">Project Page on CodePlex&lt;/a> / &lt;a href="http://www.hanselman.com/blog/OneOfMicrosoftsBestKeptSecretsPythonToolsForVisualStudioPTVS.aspx" target="_blank">Great intro by Hanselman&lt;/a>&lt;/li>
&lt;li>D Language – [Free] &lt;a href="http://rainers.github.io/visuald/visuald/StartPage.html" target="_blank">Visual D&lt;/a> / &lt;a href="https://github.com/D-Programming-Language/visuald/" target="_blank">Project page on GitHub&lt;/a>&lt;/li>
&lt;/ol>
&lt;p>To add to the good news, Visual Studio also supports Git for source control. Oh! and now we have &lt;a href="http://www.visualstudio.com/en-us/products/what-is-visual-studio-online-vs.aspx" target="_blank">Visual Studio Online&lt;/a> Basic where you can have upto 5 users for Free with unlimited team projects (can be private too) which allows you to host your repo either based on TFS or Git! As an alternative you can also sign up and use &lt;a href="https://bitbucket.org/" target="_blank">BitBucket&lt;/a> who are just cool with allowing free private repos and supporting custom domain names for accessing your repos.&lt;/p>
&lt;p>What a good time to be in development, I am loving it! 👍&lt;/p></description></item><item><title>Robin McLaurin Williams, 1951 – 2014</title><link>/2014/08/robin-mclaurin-williams-1951-2014/</link><pubDate>Tue, 12 Aug 2014 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2014/08/robin-mclaurin-williams-1951-2014/</guid><description>&lt;p>Thank you for all the laughs and entertainment, RIP.&lt;/p>
&lt;figure>&lt;img src="https://i0.wp.com/res.cloudinary.com/vjblog/image/upload/h_300,w_232/v1440142005/robin-williams_fhtch1.jpg?resize=231%2C300"/>&lt;figcaption>
&lt;h4>Robin Williams&lt;/h4>
&lt;/figcaption>
&lt;/figure></description></item><item><title>Cmder and Visual Studio 2013 (Developer Command Prompt)</title><link>/2014/08/cmder-and-visual-studio-2013-developer-command-prompt/</link><pubDate>Sun, 10 Aug 2014 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2014/08/cmder-and-visual-studio-2013-developer-command-prompt/</guid><description>&lt;p>I am a regular user of &lt;a href="http://bliker.github.io/cmder/">Cmder&lt;/a>, a very nice command line emulator for Windows. Cmder is internally using &lt;a href="https://code.google.com/p/conemu-maximus5/">ConEmu&lt;/a> for the command prompt emulation and has a very beautiful Monokai color scheme.&lt;/p>
&lt;p>Since Cmder uses ConEmu internally, we can setup custom Tasks (like loading PowerShell and Visual Studio developer command prompt) for adding additional functionality to the command shell. The below is the my Task setup for loading Visual Studio 2013 Developer command prompt from inside Cmder:&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-cmd" data-lang="cmd">cmd.exe /k &lt;span style="color:#d88200">&amp;#34;&amp;#34;&lt;/span>&lt;span style="color:#111">%VS120COMNTOOLS%&lt;/span>VsDevCmd.bat&lt;span style="color:#d88200">&amp;#34; &amp;amp; &amp;#34;&lt;/span>&lt;span style="color:#111">%CMDER_ROOT%&lt;/span>\vendor\init.bat&lt;span style="color:#d88200">&amp;#34;&amp;#34;&lt;/span> -new_console:d:D:\
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Or add the following entry in the ConEmu.xml (under config folder)&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">5
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">6
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">7
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">8
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">9
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-xml" data-lang="xml">&lt;span style="color:#f92672">&amp;lt;key&lt;/span> &lt;span style="color:#75af00">name=&lt;/span>&lt;span style="color:#d88200">&amp;#34;Task3&amp;#34;&lt;/span> &lt;span style="color:#75af00">modified=&lt;/span>&lt;span style="color:#d88200">&amp;#34;2014-08-10 20:44:11&amp;#34;&lt;/span> &lt;span style="color:#75af00">build=&lt;/span>&lt;span style="color:#d88200">&amp;#34;131215&amp;#34;&lt;/span>&lt;span style="color:#f92672">&amp;gt;&lt;/span>
&lt;span style="color:#f92672">&amp;lt;value&lt;/span> &lt;span style="color:#75af00">name=&lt;/span>&lt;span style="color:#d88200">&amp;#34;Name&amp;#34;&lt;/span> &lt;span style="color:#75af00">type=&lt;/span>&lt;span style="color:#d88200">&amp;#34;string&amp;#34;&lt;/span> &lt;span style="color:#75af00">data=&lt;/span>&lt;span style="color:#d88200">&amp;#34;{VSCmd}&amp;#34;&lt;/span>&lt;span style="color:#f92672">/&amp;gt;&lt;/span>
&lt;span style="color:#75715e">&amp;lt;!-- HotKey is Alt + Ctl + V --&amp;gt;&lt;/span>
&lt;span style="color:#f92672">&amp;lt;value&lt;/span> &lt;span style="color:#75af00">name=&lt;/span>&lt;span style="color:#d88200">&amp;#34;Hotkey&amp;#34;&lt;/span> &lt;span style="color:#75af00">type=&lt;/span>&lt;span style="color:#d88200">&amp;#34;dword&amp;#34;&lt;/span> &lt;span style="color:#75af00">data=&lt;/span>&lt;span style="color:#d88200">&amp;#34;00111256&amp;#34;&lt;/span>&lt;span style="color:#f92672">/&amp;gt;&lt;/span>
&lt;span style="color:#f92672">&amp;lt;value&lt;/span> &lt;span style="color:#75af00">name=&lt;/span>&lt;span style="color:#d88200">&amp;#34;GuiArgs&amp;#34;&lt;/span> &lt;span style="color:#75af00">type=&lt;/span>&lt;span style="color:#d88200">&amp;#34;string&amp;#34;&lt;/span> &lt;span style="color:#75af00">data=&lt;/span>&lt;span style="color:#d88200">&amp;#34;&amp;#34;&lt;/span>&lt;span style="color:#f92672">/&amp;gt;&lt;/span>
&lt;span style="color:#f92672">&amp;lt;value&lt;/span> &lt;span style="color:#75af00">name=&lt;/span>&lt;span style="color:#d88200">&amp;#34;Cmd1&amp;#34;&lt;/span> &lt;span style="color:#75af00">type=&lt;/span>&lt;span style="color:#d88200">&amp;#34;string&amp;#34;&lt;/span> &lt;span style="color:#75af00">data=&lt;/span>&lt;span style="color:#d88200">&amp;#34;* &amp;gt; cmd.exe /k &amp;#34;&lt;/span>&lt;span style="color:#960050;background-color:#1e0010">&amp;#34;%VS120COMNTOOLS%VsDevCmd.bat&amp;#34;&lt;/span> &lt;span style="color:#960050;background-color:#1e0010">&amp;amp;&lt;/span> &lt;span style="color:#960050;background-color:#1e0010">&amp;#34;%CMDER_ROOT%\vendor\init.bat&amp;#34;&amp;#34;&lt;/span> &lt;span style="color:#960050;background-color:#1e0010">-new_console:d:D:\&amp;#34;&lt;/span>&lt;span style="color:#f92672">/&amp;gt;&lt;/span>
&lt;span style="color:#f92672">&amp;lt;value&lt;/span> &lt;span style="color:#75af00">name=&lt;/span>&lt;span style="color:#d88200">&amp;#34;Active&amp;#34;&lt;/span> &lt;span style="color:#75af00">type=&lt;/span>&lt;span style="color:#d88200">&amp;#34;dword&amp;#34;&lt;/span> &lt;span style="color:#75af00">data=&lt;/span>&lt;span style="color:#d88200">&amp;#34;00000000&amp;#34;&lt;/span>&lt;span style="color:#f92672">/&amp;gt;&lt;/span>
&lt;span style="color:#f92672">&amp;lt;value&lt;/span> &lt;span style="color:#75af00">name=&lt;/span>&lt;span style="color:#d88200">&amp;#34;Count&amp;#34;&lt;/span> &lt;span style="color:#75af00">type=&lt;/span>&lt;span style="color:#d88200">&amp;#34;dword&amp;#34;&lt;/span> &lt;span style="color:#75af00">data=&lt;/span>&lt;span style="color:#d88200">&amp;#34;00000001&amp;#34;&lt;/span>&lt;span style="color:#f92672">/&amp;gt;&lt;/span>
&lt;span style="color:#f92672">&amp;lt;/key&amp;gt;&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div></description></item><item><title>How to start a movement</title><link>/2014/08/how-to-start-a-movement/</link><pubDate>Sun, 03 Aug 2014 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2014/08/how-to-start-a-movement/</guid><description>&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/V74AxCqOTvg?start=0&amp;end=189;" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen>&lt;/iframe></description></item><item><title>Largest collection of FREE Microsoft eBooks</title><link>/2014/07/largest-collection-of-free-microsoft-ebooks/</link><pubDate>Wed, 16 Jul 2014 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2014/07/largest-collection-of-free-microsoft-ebooks/</guid><description>&lt;blockquote>
&lt;p>From Eric Ligman (Microsoft):&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;p>FREE Microsoft eBooks! Who doesn&amp;rsquo;t love FREE Microsoft eBooks? Well, for the past few years, I’ve provided posts containing almost 150 FREE Microsoft eBooks and my readers, new and existing, have loved these posts so much that they downloaded over 3.5 Million free eBooks as of last June, including over 1,000,000 in a single week last year (and many, many more since then).&lt;/p>
&lt;/blockquote>
&lt;p>Get a free list of Microsoft eBooks at &lt;a href="http://blogs.msdn.com/b/mssmallbiz/archive/2014/07/07/largest-collection-of-free-microsoft-ebooks-ever-including-windows-8-1-windows-8-windows-7-office-2013-office-365-office-2010-sharepoint-2013-dynamics-crm-powershell-exchange-server-lync-2013-system-center-azure-cloud-sql.aspx">http://blogs.msdn.com/b/mssmallbiz/archive/2014/07/07/largest-collection-of-free-microsoft-ebooks-ever-including-windows-8-1-windows-8-windows-7-office-2013-office-365-office-2010-sharepoint-2013-dynamics-crm-powershell-exchange-server-lync-2013-system-center-azure-cloud-sql.aspx&lt;/a>&lt;/p></description></item><item><title>Nostalgic stories from the IT industry</title><link>/2014/04/nostalgic-stories-from-the-it-industry/</link><pubDate>Sun, 20 Apr 2014 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2014/04/nostalgic-stories-from-the-it-industry/</guid><description>&lt;blockquote>
&lt;p>One of the problems Microsoft foresaw was getting new users to join Messenger when so many people already used the other chat programs. The trouble was that the programs, then as now, didn’t talk to one another; AOL didn’t talk to Yahoo, which didn’t talk to ICQ, and none of them, of course, would talk to Messenger. AOL had the largest user base, so we discussed the possibility of adding code to allow Messenger to log in to two servers simultaneously, Microsoft’s and AOL’s, so that you could see your Messenger and AIM buddies on a single list and talk to AIM buddies via Messenger. We called it “interop.”&lt;/p>
&lt;/blockquote>
&lt;p>Came across the behind the scenes story about what went on with the MSN Messenger and AOL when Microsoft was trying to make their messenger client talk with AOL. Bought me back so much memories of the days when MSN Messenger was almost a daily interaction platform. Have a read about the story at &lt;a href="http://nplusonemag.com/chat-wars">nplusmag.com&lt;/a>&lt;/p>
&lt;p>On a similar note you can also check out on &lt;a href="http://www.joelonsoftware.com/articles/fog0000000052.html">Joel&amp;rsquo;s Strategy letter on how Microsoft made excel the leading software in spreadsheet applications&lt;/a>.&lt;/p>
&lt;blockquote>
&lt;p>In my first programming job, I didn&amp;rsquo;t have a computer on my desk.&lt;/p>
&lt;p>My desk - like those of my co-workers - was device free. The nearest we had to a personal computing device was an LCD calculator.&lt;/p>
&lt;p>Not only didn&amp;rsquo;t I have a computer on my desk, there wasn&amp;rsquo;t one in the entire office, or even in the same building. We were programming a mainframe that was about five miles along the road.&lt;/p>
&lt;/blockquote>
&lt;p>Read more about the same by Simon Allardice at &lt;a href="http://simonallardice.com/general/2014/03/17/first-computer.html">Getting Started, circa 1983&lt;/a>&lt;/p>
&lt;figure>&lt;img src="https://i2.wp.com/res.cloudinary.com/vjblog/image/upload/h_300,w_226/v1440142008/Screen-Shot-2011-12-26-at-18.38.18_cefpig.png?w=425"
alt="The IBM 350 disk system (1956) stored 5 million 7-bit (6 data bits plus 1 parity bit) alphanumeric characters (5 MB)."/>&lt;figcaption>
&lt;h4>IBM 305 RAMAC 5 MB HDD 1956&lt;/h4>&lt;p>The IBM 350 disk system (1956) stored 5 million 7-bit (6 data bits plus 1 parity bit) alphanumeric characters (5 MB).&lt;/p>
&lt;/figcaption>
&lt;/figure></description></item><item><title>.Net Runtime Web and Standalone files</title><link>/2014/04/net-runtime-web-and-standalone-files/</link><pubDate>Thu, 10 Apr 2014 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2014/04/net-runtime-web-and-standalone-files/</guid><description>&lt;p>Microsoft .NET Framework Web and Standalone(Offline) installation files:&lt;/p>
&lt;style>
tr {
border: 1px solid black;
}
&lt;/style>
&lt;table>
&lt;tr>
&lt;th>
.Net Version
&lt;/th>
&lt;th>
Mode
&lt;/th>
&lt;th>
Link
&lt;/th>
&lt;/tr>
&lt;tr>
&lt;td rowspan="2">
3.5 SP1
&lt;/td>
&lt;td>
Online (Web)
&lt;/td>
&lt;td>
&lt;a title="dotnetfx35setup.exe"
href="http://download.microsoft.com/download/0/6/1/061F001C-8752-4600-A198-53214C69B51F/dotnetfx35setup.exe"
target="_blank">dotnetfx35setup.exe&lt;/a>
&lt;/td>
&lt;/tr>
&lt;tr class="lastRow">
&lt;td>
Offline (Standalone)
&lt;/td>
&lt;td>
&lt;a title="dotnetfx35.exe"
href="http://download.microsoft.com/download/2/0/E/20E90413-712F-438C-988E-FDAA79A8AC3D/dotnetfx35.exe"
target="_blank">dotnetfx35.exe&lt;/a>
&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td rowspan="3">
4.0
&lt;/td>
&lt;td>
Online (Web)
&lt;/td>
&lt;td>
&lt;a title="dotNetFx40_Full_setup.exe"
href="http://download.microsoft.com/download/1/B/E/1BE39E79-7E39-46A3-96FF-047F95396215/dotNetFx40_Full_setup.exe"
target="_blank">dotNetFx40_Full_setup.exe&lt;/a>
&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>
Offline &amp;#8211; Client Profile (Standalone)
&lt;/td>
&lt;td>
&lt;a title="dotNetFx40_Client_x86_x64.exe"
href="http://download.microsoft.com/download/5/6/2/562A10F9-C9F4-4313-A044-9C94E0A8FAC8/dotNetFx40_Client_x86_x64.exe"
target="_blank">dotNetFx40_Client_x86_x64.exe&lt;/a>
&lt;/td>
&lt;/tr>
&lt;tr class="lastRow">
&lt;td>
Offline &amp;#8211; Full (Standalone)
&lt;/td>
&lt;td>
&lt;a title="dotNetFx40_Full_x86_x64.exe"
href="http://download.microsoft.com/download/9/5/A/95A9616B-7A37-4AF6-BC36-D6EA96C8DAAE/dotNetFx40_Full_x86_x64.exe"
target="_blank">dotNetFx40_Full_x86_x64.exe&lt;/a>
&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td rowspan="2">
4.5
&lt;/td>
&lt;td>
Online (Web)
&lt;/td>
&lt;td>
&lt;a href="http://download.microsoft.com/download/B/A/4/BA4A7E71-2906-4B2D-A0E1-80CF16844F5F/dotNetFx45_Full_setup.exe"
target="_blank">dotNetFx45_Full_setup.exe&lt;/a>
&lt;/td>
&lt;/tr>
&lt;tr class="lastRow">
&lt;td>
Offline (Standalone)
&lt;/td>
&lt;td>
&lt;a href="http://download.microsoft.com/download/D/0/F/D0F564A3-6734-470B-9772-AC38B3B6D8C2/dotNetFx45_Full_x86_x64.exe"
target="_blank">dotNetFx45_Full_x86_x64.exe&lt;/a>
&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td rowspan="2">
4.5.1
&lt;/td>
&lt;td>
Online (Web)
&lt;/td>
&lt;td>
&lt;a title="NDP451-KB2859818-Web.exe"
href="http://download.microsoft.com/download/7/4/0/74078A56-A3A1-492D-BBA9-865684B83C1B/NDP451-KB2859818-Web.exe"
target="_blank">NDP451-KB2859818-Web.exe&lt;/a>
&lt;/td>
&lt;/tr>
&lt;tr class="lastRow">
&lt;td>
Offline (Standalone)
&lt;/td>
&lt;td>
&lt;a title="NDP451-KB2858728-x86-x64-AllOS-ENU.exe"
href="http://download.microsoft.com/download/1/6/7/167F0D79-9317-48AE-AEDB-17120579F8E2/NDP451-KB2858728-x86-x64-AllOS-ENU.exe"
target="_blank">NDP451-KB2858728-x86-x64-AllOS-ENU.exe&lt;/a>
&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td rowspan="3">
4.5.2
&lt;/td>
&lt;td>
Online (Web)
&lt;/td>
&lt;td>
&lt;a title="NDP452-KB2901954-Web.exe"
href="http://download.microsoft.com/download/B/4/1/B4119C11-0423-477B-80EE-7A474314B347/NDP452-KB2901954-Web.exe"
target="_blank">NDP452-KB2901954-Web.exe&lt;/a>
&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>
Offline (Standalone)
&lt;/td>
&lt;td>
&lt;a title="NDP452-KB2901907-x86-x64-AllOS-ENU.exe"
href="http://download.microsoft.com/download/E/2/1/E21644B5-2DF2-47C2-91BD-63C560427900/NDP452-KB2901907-x86-x64-AllOS-ENU.exe"
target="_blank">NDP452-KB2901907-x86-x64-AllOS-ENU.exe&lt;/a>
&lt;/td>
&lt;/tr>
&lt;tr class="lastRow">
&lt;td>
Offline (Standalone) &amp;#8211; Developer Pack
&lt;/td>
&lt;td>
&lt;a title="NDP452-KB2901951-x86-x64-DevPack.exe"
href="http://download.microsoft.com/download/4/3/B/43B61315-B2CE-4F5B-9E32-34CCA07B2F0E/NDP452-KB2901951-x86-x64-DevPack.exe"
target="_blank">NDP452-KB2901951-x86-x64-DevPack.exe&lt;/a>
&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td rowspan="3">
4.6
&lt;/td>
&lt;td>
Online (Web)
&lt;/td>
&lt;td>
&lt;a title="NDP46-KB3045560-Web.exe"
href="http://download.microsoft.com/download/1/4/A/14A6C422-0D3C-4811-A31F-5EF91A83C368/NDP46-KB3045560-Web.exe"
target="_blank">NDP46-KB3045560-Web.exe&lt;/a>
&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>
Offline (Standalone)
&lt;/td>
&lt;td>
&lt;a title="NDP46-KB3045557-x86-x64-AllOS-ENU.exe"
href="http://download.microsoft.com/download/C/3/A/C3A5200B-D33C-47E9-9D70-2F7C65DAAD94/NDP46-KB3045557-x86-x64-AllOS-ENU.exe"
target="_blank">NDP46-KB3045557-x86-x64-AllOS-ENU.exe&lt;/a>
&lt;/td>
&lt;/tr>
&lt;tr class="lastRow">
&lt;td>
Offline (Standalone) &amp;#8211; Targeting Pack
&lt;/td>
&lt;td>
&lt;a title="NDP46-TargetingPack-KB3045566.exe"
href="http://download.microsoft.com/download/8/2/F/82FF2034-83E6-4F93-900D-F88C7AD9F3EE/NDP46-TargetingPack-KB3045566.exe"
target="_blank">NDP46-TargetingPack-KB3045566.exe&lt;/a>&lt;br /> &lt;a title="NDP46-TargetingPack-KB3045566-ENU.exe"
href="http://download.microsoft.com/download/8/2/F/82FF2034-83E6-4F93-900D-F88C7AD9F3EE/NDP46-TargetingPack-KB3045566-ENU.exe"
target="_blank">NDP46-TargetingPack-KB3045566-ENU.exe&lt;/a>
&lt;/td>
&lt;/tr>
&lt;/table></description></item><item><title>Expert (short comedy sketch)</title><link>/2014/03/expert-short-comedy-sketch/</link><pubDate>Sat, 29 Mar 2014 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2014/03/expert-short-comedy-sketch/</guid><description>&lt;p>Came across this on reddit and had me laughing hard&lt;/p>
&lt;div class="embed-responsive embed-responsive-16by9">
&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/BKorP55Aqvg?enablejsapi=1" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen>&lt;/iframe>
&lt;/div>
&lt;p>and of course the response&lt;/p>
&lt;div class="embed-responsive embed-responsive-16by9">
&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/B7MIJP90biM?enablejsapi=1" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen>&lt;/iframe>
&lt;/div></description></item><item><title>Managed ODP.NET v12.1.0.1.0 released!</title><link>/2013/08/managed-odp-net-v12-1-0-1-0-released/</link><pubDate>Wed, 14 Aug 2013 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2013/08/managed-odp-net-v12-1-0-1-0-released/</guid><description>&lt;p>ODP.NET is finally out of Beta and is now synced with the 12c client. &lt;a href="http://download.oracle.com/otn/other/ole-oo4o/ODP.NET_Managed121010.zip">Managed ODP.NET client v12.1.0.1.0&lt;/a> can be downloaded from the Oracle&amp;rsquo;s OTN site.&lt;/p>
&lt;p>&lt;strong>Related OTN sections&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;a href="http://www.oracle.com/technetwork/database/enterprise-edition/overview/index.html">Oracle Database 12c&lt;/a> / &lt;a href="http://www.oracle.com/technetwork/database/enterprise-edition/downloads/database12c-win64-download-1968077.html">Oracle Database 12c related downloads&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="http://www.oracle.com/technetwork/topics/dotnet/index-085163.html">Oracle Data Provider for .NET&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="http://www.oracle.com/technetwork/topics/dotnet/whatsnew/index.html">Oracle .NET Developer Center&lt;/a>&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>Happy coding!&lt;/p></description></item><item><title>Memory Profiling with Chrome DevTools</title><link>/2013/04/memory-profiling-with-chrome-devtools/</link><pubDate>Thu, 11 Apr 2013 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2013/04/memory-profiling-with-chrome-devtools/</guid><description>&lt;p>Nice discussion on JavaScript memory management:&lt;/p>
&lt;blockquote>
&lt;p>Introduction to JavaScript memory management basics and a deeper dive into the Heap Profiler in Chrome DevTools with John McCutchan and Loreena Lee.&lt;/p>
&lt;/blockquote>
&lt;div class="embed-responsive embed-responsive-16by9">
&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/L3ugr9BJqIs?enablejsapi=1" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen>&lt;/iframe>
&lt;/div></description></item><item><title>Bypassing YouTube stream throttling by ISPs [for Windows]</title><link>/2013/04/bypassing-youtube-stream-throttling-by-isps-for-windows/</link><pubDate>Fri, 05 Apr 2013 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2013/04/bypassing-youtube-stream-throttling-by-isps-for-windows/</guid><description>&lt;p>If you have a very decent internet connection (equal to or more than 4 mbps) but still not able to stream YouTube video&amp;rsquo;s without it waiting for buffering a lot, it maybe because your local ISP could be using a CDN for caching YouTube instead of loading from the main site.&lt;/p>
&lt;p>There is an easy way to bypass this throttling by asking your OS to block traffic from the caching CDN and loading the content directly from YouTube by simply providing the following command at elevated command prompt&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-plain" data-lang="plain">netsh advfirewall firewall add rule name=&amp;#34;YouTube Cache Bypass&amp;#34; dir=in action=block remoteip=173.194.55.0/24,206.111.0.0/16 enable=yes
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>and if you later need to disable the rule use&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-plain" data-lang="plain">netsh advfirewall firewall delete rule name=&amp;#34;YouTube Cache Bypass&amp;#34;
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>I am able to feel the difference in YouTube streaming after adding the above rule to the firewall and a happy YouTube customer again.&lt;/p>
&lt;p>&lt;a href="" target="_blank">&lt;a href="http://mitchribar.com/2013/02/how-to-stop-youtube-sucking-windows-guide/">How to stop YouTube sucking (Windows guide)&lt;/a>&lt;/p></description></item><item><title>World Backup Day</title><link>/2013/04/world-backup-day/</link><pubDate>Sun, 31 Mar 2013 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2013/04/world-backup-day/</guid><description>&lt;p>March 31st is world backup day! Signup for a cloud based backup service and save yourself a lot of regret later.&lt;/p>
&lt;p>I am singing up for &lt;a href="http://www.backblaze.com/worldbackupday.html">Backblaze&lt;/a> since they are providing an option for unlimited space and unlimited individual file size for $5/month (AED 19/month), which is a small amount to preserve all my important stuff.&lt;/p>
&lt;p>You can also check out &lt;a href="http://www.crashplan.com/backupreddit/">Crashplan&lt;/a> who have some really attractive annual and biannual plan.&lt;/p>
&lt;p>Signup and be safe 👍&lt;/p></description></item><item><title>An easier way to exporting your Google Reader feed (OPML) when Google Takeout is not helping</title><link>/2013/03/an-easier-way-to-exporting-your-google-reader-feed-opml-when-google-takeout-is-not-helping/</link><pubDate>Thu, 14 Mar 2013 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2013/03/an-easier-way-to-exporting-your-google-reader-feed-opml-when-google-takeout-is-not-helping/</guid><description>&lt;p>Tried exporting my links through Google Takeout, but was stuck with the following screen for a long time&lt;/p>
&lt;figure>&lt;img src="https://i0.wp.com/res.cloudinary.com/vjblog/image/upload/v1440142011/GoogleTakeout_stalb5.png?resize=493%2C523"
alt="Google Takeout being very helpful for exporting Reader feeds"/>&lt;figcaption>
&lt;p>Google Takeout being very helpful for exporting Reader feeds&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;p>How many ever times I refreshed or reloaded the page I was always treated to the same detail of showing that I had 0 files / 0 bytes in my Google Reader, and the percentage always stayed at 0%. Pressing the &amp;ldquo;Create Archive&amp;amp;&amp;rdquo; also just produced the following empty progress:&lt;/p>
&lt;p>&lt;img src="https://i2.wp.com/res.cloudinary.com/vjblog/image/upload/v1440142009/GoogleTakeout02_gn70h5.png?resize=625%2C101" alt="Google Takeout Create Archive" class="alignnone size-full wp-image-417" data-recalc-dims="1" />&lt;/p>
&lt;p>The Takeout did not provide any other option, so did some searching and came across &lt;a href="http://productforums.google.com/forum/?hl=en#!category-topic/reader/tqqYpQ7AnYc">this thread&lt;/a> in which Matti had given the following links which saved my day!&lt;/p>
&lt;p>For exporting your feed as OPML forget Takeout and visit &lt;strong>&lt;a href="http://www.google.com/reader/subscriptions/export">http://www.google.com/reader/subscriptions/export&lt;/a>&lt;/strong> and save yourself some trouble.&lt;/p>
&lt;p>For exporting your starred items visit: &lt;a href="http://www.google.com/reader/view/user/-/state/com.google/starred">http://www.google.com/reader/view/user/-/state/com.google/starred&lt;/a> when you are using any other browser than Opera, otherwise use &lt;strong>&lt;a href="http://www.google.com/reader/atom/user/-/state/com.google/starred?n=1000">http://www.google.com/reader/atom/user/-/state/com.google/starred?n=1000&lt;/a>&lt;/strong>.&lt;/p>
&lt;p>By the way, I think I am starting to like &lt;a href="http://www.netvibes.com">NetVibes&lt;/a>, but bit skeptical about using another free service. So, I am kind of evaluating that and also &lt;a href="http://www.newsblur.com/">NewsBlur&lt;/a>. I was OK with Feedly till it went belly up (I presume due to all the new load) for a long time today.&lt;/p></description></item><item><title>Google Reader being retired as of July 1, 2013</title><link>/2013/03/google-reader-being-retired-as-of-july-1-2013/</link><pubDate>Thu, 14 Mar 2013 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2013/03/google-reader-being-retired-as-of-july-1-2013/</guid><description>&lt;p>As part of the &lt;a href="http://googleblog.blogspot.ae/2013/03/a-second-spring-of-cleaning.html">second spring cleaning&lt;/a> Google is retiring Google Reader from July 1, 2013.&lt;/p>
&lt;blockquote>
&lt;p>We launched Google Reader in 2005 in an effort to make it easy for people to discover and keep tabs on their favorite websites. While the product has a loyal following, over the years usage has declined. So, on July 1, 2013, we will retire Google Reader. Users and developers interested in RSS alternatives can export their data, including their subscriptions, with &lt;a href="http://www.dataliberation.org/google/reader">Google Takeout&lt;/a> over the course of the next four months.&lt;/p>
&lt;/blockquote>
&lt;p>This is really a bad thing, as I extensively use Google reader for all my news gathering from various sources. Now have to start looking for alternatives, check out &lt;a href="http://lifehacker.com/5990456/google-reader-is-getting-shut-down-here-are-the-best-alternatives">Google Reader alternatives&lt;/a> from LifeHacker.&lt;/p>
&lt;p>As of now &lt;a href="http://www.newsblur.com/">NewBlur&lt;/a> looks like a good option with their $1/month Premium option. Add your comments for any other suggestions.&lt;/p>
&lt;p>Feedly has also &lt;a href="http://blog.feedly.com/2013/03/14/google-reader/">planned for providing a seamless transition&lt;/a> for Google Reader users.&lt;/p></description></item><item><title>Working with .NET Boolean and Oracle along with ASP.NET MVC</title><link>/2013/02/working-with-net-boolean-and-oracle-along-with-asp-net-mvc/</link><pubDate>Wed, 27 Feb 2013 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2013/02/working-with-net-boolean-and-oracle-along-with-asp-net-mvc/</guid><description>&lt;p>Somethings that are straight forward in MS-SQL and .NET are bit convoluted when using Oracle and .NET. A good example for this case is when trying to map a database Boolean field to a .NET POCO. With MS-SQL we can straight away use &lt;code>bit&lt;/code> which has a possible values of &lt;code>1&lt;/code> or ``, but with Oracle since it does not have a built in Boolean type we would normally go with a single character field with a value of &lt;code>'Y'&lt;/code> or &lt;code>'N'&lt;/code>.&lt;/p>
&lt;p>This is not a big issue when we are working only on the database side or if we are using pre-MVC ADO.NET based mapping mechanism. But with using ASP.NET MVC we normally use an ORM (like Dapper) and pass in a POCO to get the native representation of the data in .NET. Since Oracle&amp;rsquo;s &lt;code>'Y'&lt;/code> or &lt;code>'N'&lt;/code> cannot be directly mapped to a .NET&amp;rsquo;s &lt;code>System.Boolean&lt;/code> we need a workaround for this issue. Secondly you cannot directly use the &lt;code>@Html.CheckBoxFor(m =&amp;gt; m.DBFlag)&lt;/code> as that would throw up the following error &lt;code>Cannot implicitly convert type 'char' to 'bool'&lt;/code>&lt;/p>
&lt;p>A simple workaround that I use is to have a wrapper property for the original property which handles the conversion dynamically.&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-cs" data-lang="cs">&lt;span style="color:#00a8c8">public&lt;/span> &lt;span style="color:#00a8c8">class&lt;/span> &lt;span style="color:#75af00">MyActionModel&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#00a8c8">public&lt;/span> &lt;span style="color:#00a8c8">char&lt;/span> &lt;span style="color:#111">DBFlag&lt;/span> &lt;span style="color:#111">{&lt;/span>&lt;span style="color:#00a8c8">get&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#00a8c8">set&lt;/span>&lt;span style="color:#111">;}&lt;/span> &lt;span style="color:#75715e">// POCO property representing the actual column in the database
&lt;/span>&lt;span style="color:#75715e">&lt;/span>
&lt;span style="color:#00a8c8">public&lt;/span> &lt;span style="color:#00a8c8">bool&lt;/span> &lt;span style="color:#111">MyFlag&lt;/span> &lt;span style="color:#111">{&lt;/span> &lt;span style="color:#75715e">// Wrapper property that works around the Boolean issue
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#00a8c8">get&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#00a8c8">return&lt;/span> &lt;span style="color:#111">DBFlag&lt;/span> &lt;span style="color:#111">==&lt;/span> &lt;span style="color:#d88200">&amp;#39;Y&amp;#39;&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#00a8c8">set&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#111">DBFlag&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#00a8c8">value&lt;/span> &lt;span style="color:#111">?&lt;/span> &lt;span style="color:#d88200">&amp;#39;Y&amp;#39;&lt;/span> &lt;span style="color:#111">:&lt;/span> &lt;span style="color:#d88200">&amp;#39;N&amp;#39;&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>now we can happily use &lt;code>@Html.CheckBoxFor(m =&amp;gt; m.MyFlag)&lt;/code>.&lt;/p></description></item><item><title>ClickOnce and WinForms application – tiny tips</title><link>/2013/02/clickonce-and-winforms-application-tiny-tips/</link><pubDate>Sun, 24 Feb 2013 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2013/02/clickonce-and-winforms-application-tiny-tips/</guid><description>&lt;p>The below are few points that we learned during a recent application developed using WinForms and deployed using ClickOnce.&lt;/p>
&lt;h2 id="refracting-to-use-native-pcsc-interface">Refracting to use native PC/SC interface&lt;/h2>
&lt;p>The core functionality of the application was to provide proximity card based attendance system for students in a classroom. For this we were previously using the API provided by HID Global. This caused various dependency issues between Windows operating systems and architectures (32bit vs 64bit), so as part of the refactoring we have removed the dependency and using the PC/SC interface exposed by Windows natively. Of course, this means mucking around a bit in the P/Invoke world (for accessing WinScard.dll related functions), but it provides elegance to the application by eradicating extra baggage of dependency.&lt;/p>
&lt;h2 id="disabling-windows-smartcard-plug-and-play-policy">Disabling Windows SmartCard Plug and Play policy&lt;/h2>
&lt;p>From Windows Vista the operating system had a group policy setting where the operating system installed new device driver for every proximity card that was swiped on the card reader. This meant that for every card swipe, the user had to wait for Windows to install the device driver and then go through with the rest of the application logic. As part of our requirements this was not necessary, even so more of a hinderance. We have an internal ERP system which stores the additional identification details for the students and we had to integrate with that ERP for the student attendance marking.&lt;/p>
&lt;p>In order to disable the above behaviour of Windows, we needed to disable the SmartCard Plug and Play functionality. The details of this setting is detailed at &lt;a href="http://technet.microsoft.com/en-us/library/ff404287(WS.10).aspx">http://technet.microsoft.com/en-us/library/ff404287(WS.10).aspx&lt;/a>. Basically the administrator has to disable the &amp;ldquo;Turn on Smart Card Plug and Play service&amp;rdquo; option under &lt;code>Computer Configuration -&amp;gt; Administrative Templates -&amp;gt; Windows Components -&amp;gt; Smart Card&lt;/code> in the group policy.&lt;/p>
&lt;h2 id="encrypting-part-of-the-settings-data">Encrypting part of the settings data&lt;/h2>
&lt;p>Apart from normally authenticating the service calls from the client application, we wanted to obscure the actual service call endpoint strings stored in the application settings. In order to achieve this, we made use of protection mechanism provided by &lt;code>System.Configuration.ConfigurationSection.SectionInformation.ProtectSection&lt;/code> function.&lt;/p>
&lt;p>We determined that the application was running for the first time using&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">5
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">6
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-csharp" data-lang="csharp">&lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">ApplicationDeployment&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">IsNetworkDeployed&lt;/span> &lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">{&lt;/span> &lt;span style="color:#75715e">// make sure the application was deployed over the network
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">ApplicationDeployment&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">CurrentDeployment&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">IsFirstRun&lt;/span> &lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">{&lt;/span> &lt;span style="color:#75715e">// and this is the first time it is running
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#111">CheckAndSecureConfig&lt;/span>&lt;span style="color:#111">(&lt;/span> &lt;span style="color:#d88200">&amp;#34;applicationSettings/MyApp.Properties.Settings&amp;#34;&lt;/span> &lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#111">CheckAndSecureConfig&lt;/span>&lt;span style="color:#111">(&lt;/span> &lt;span style="color:#d88200">&amp;#34;applicationSettings/MyApp.Settings&amp;#34;&lt;/span> &lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>and then used the &lt;code>ProtectSection&lt;/code> functionality&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-cs" data-lang="cs">&lt;span style="color:#00a8c8">private&lt;/span> &lt;span style="color:#00a8c8">static&lt;/span> &lt;span style="color:#00a8c8">void&lt;/span> &lt;span style="color:#111">CheckAndSecureConfig&lt;/span>&lt;span style="color:#111">(&lt;/span> &lt;span style="color:#00a8c8">string&lt;/span> &lt;span style="color:#111">sectionName&lt;/span> &lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#111">System&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Configuration&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Configuration&lt;/span> &lt;span style="color:#111">config&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#111">ConfigurationManager&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">OpenExeConfiguration&lt;/span>&lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">ConfigurationUserLevel&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">None&lt;/span> &lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#111">ConfigurationSection&lt;/span> &lt;span style="color:#111">section&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#111">config&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">GetSection&lt;/span>&lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">sectionName&lt;/span> &lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">section&lt;/span> &lt;span style="color:#111">!=&lt;/span> &lt;span style="color:#00a8c8">null&lt;/span> &lt;span style="color:#111">&amp;amp;&amp;amp;&lt;/span> &lt;span style="color:#111">!&lt;/span>&lt;span style="color:#111">section&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">SectionInformation&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">IsProtected&lt;/span> &lt;span style="color:#111">&amp;amp;&amp;amp;&lt;/span> &lt;span style="color:#111">!&lt;/span>&lt;span style="color:#111">section&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">ElementInformation&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">IsLocked&lt;/span> &lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#111">section&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">SectionInformation&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">ProtectSection&lt;/span>&lt;span style="color:#111">(&lt;/span> &lt;span style="color:#d88200">&amp;#34;DataProtectionConfigurationProvider&amp;#34;&lt;/span> &lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#111">section&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">SectionInformation&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">ForceSave&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#00a8c8">true&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#111">config&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Save&lt;/span>&lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">ConfigurationSaveMode&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Full&lt;/span> &lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>this makes sure that the settings are not stored in plain strings for anybody to view.&lt;/p>
&lt;h2 id="manually-taking-over-clickonce-update-check">Manually taking over ClickOnce update check&lt;/h2>
&lt;p>Due to various internal reasons and ClickOnce not successfully (reliably checking and updating to newer version) we have used a check and update mechanism for updating the version of the deployed application. Without reinventing the wheel we simply used the same architecture of ClickOnce by using a custom update checking form and providing event handlers to the &lt;code>System.Deployment.Application.ApplicationDeployment&lt;/code> class.&lt;/p>
&lt;p>One more advantage of keep the update manual is we can selectively call the update process only when running the application in network deployed mode. So that when doing normal local debugging this doesn&amp;rsquo;t interfere with the debugging process.&lt;/p>
&lt;h2 id="addressing-multiple-threading-issues-on-the-ui">Addressing multiple threading issues on the UI&lt;/h2>
&lt;p>We were facing with the following exception whenever we tried copying any text from a DataGridView control:&lt;/p>
&lt;p>``&lt;/p>
&lt;p>When researching on this issue, we came across &lt;a href="http://blogs.msdn.com/b/smondal/archive/2010/09/08/current-thread-must-be-set-to-single-thread-apartment-sta-mode-before-ole-calls-can-be-made.aspx">Soumitra Mondal&amp;rsquo;s blog entry&lt;/a> on addressing the same error when invoking the OpenFileDialog in another application. And using the same methodology we used a helper class for invoking the new form objects in STA thread.&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">17
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">18
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">19
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">20
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">21
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">22
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">23
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-cs" data-lang="cs">&lt;span style="color:#00a8c8">public&lt;/span> &lt;span style="color:#00a8c8">class&lt;/span> &lt;span style="color:#75af00">DialogState&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#00a8c8">public&lt;/span> &lt;span style="color:#111">DialogResult&lt;/span> &lt;span style="color:#111">result&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#00a8c8">public&lt;/span> &lt;span style="color:#111">Form&lt;/span> &lt;span style="color:#111">dialog&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#00a8c8">public&lt;/span> &lt;span style="color:#00a8c8">void&lt;/span> &lt;span style="color:#111">ThreadProcShowDialog&lt;/span>&lt;span style="color:#111">()&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#111">result&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#111">dialog&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">ShowDialog&lt;/span>&lt;span style="color:#111">();&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#75715e">// we can use the below help function to open
&lt;/span>&lt;span style="color:#75715e">// forms on a STA thread
&lt;/span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#00a8c8">private&lt;/span> &lt;span style="color:#111">DialogResult&lt;/span> &lt;span style="color:#111">STAShowDialog&lt;/span>&lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">Form&lt;/span> &lt;span style="color:#111">frm&lt;/span> &lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#111">DialogState&lt;/span> &lt;span style="color:#111">ds&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#00a8c8">new&lt;/span> &lt;span style="color:#111">DialogState&lt;/span>&lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#111">ds&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">dialog&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#111">frm&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#111">Thread&lt;/span> &lt;span style="color:#111">t&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#00a8c8">new&lt;/span> &lt;span style="color:#111">Thread&lt;/span>&lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">ds&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">ThreadProcShowDialog&lt;/span> &lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#111">t&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">SetApartmentState&lt;/span>&lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">ApartmentState&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">STA&lt;/span> &lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#111">t&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Start&lt;/span>&lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#111">t&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Join&lt;/span>&lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#00a8c8">return&lt;/span> &lt;span style="color:#111">ds&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">result&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>By using the &lt;code>STAShowDialog&lt;/code> we successfully loaded the target form object on a STA thread and avoided the above mentioned exception.&lt;/p>
&lt;h2 id="active-directory-authentication">Active Directory Authentication&lt;/h2>
&lt;p>I have blogged about the new &lt;a href="/2013/02/authenticating-with-the-help-of-system-directoryservices-accountmanagement/">&lt;code>System.DirectoryServices.AccountManagement&lt;/code> in a past blog entry&lt;/a>. The main requirement was that we needed to authenticate Active Directory users without a separate administrative login credential for connecting to the directory service. This was achieved using a elaborate LDAP DirectoryEntry class with a directory path using ldap protocol and such. With .NET 4.0 we simply use &lt;code>System.DirectoryServices.AccountManagement&lt;/code> for these purposes.&lt;/p>
&lt;h2 id="managing-audio-volume">Managing Audio Volume&lt;/h2>
&lt;p>The authentication of student entry needed to be confirmed using audible alerts apart from the visual alerts. We also wanted to make sure that the system&amp;rsquo;s volume was appropriately set so that we were not playing the sounds on muted systems. For this purpose we used &lt;a href="http://www.codeproject.com/Articles/18520/Vista-Core-Audio-API-Master-Volume-Contro">CoreAudioAPI&lt;/a> for the major weight lifting and a helper class to address our requirements:&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">17
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">18
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">19
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">20
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">21
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">22
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">23
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">24
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">25
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">26
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">27
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">28
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">29
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">30
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">31
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">32
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">33
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">34
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">35
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">36
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">37
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">38
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">39
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">40
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">41
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">42
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">43
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">44
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">45
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">46
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">47
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">48
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">49
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">50
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">51
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">52
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">53
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">54
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">55
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">56
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">57
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">58
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">59
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">60
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">61
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">62
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">63
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">64
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">65
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">66
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">67
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">68
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">69
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">70
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">71
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">72
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">73
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">74
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">75
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">76
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">77
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">78
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">79
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">80
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">81
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">82
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">83
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">84
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-cs" data-lang="cs">&lt;span style="color:#00a8c8">using&lt;/span> &lt;span style="color:#111">System&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#00a8c8">using&lt;/span> &lt;span style="color:#111">System.Runtime.InteropServices&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#00a8c8">using&lt;/span> &lt;span style="color:#111">CoreAudioApi&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#00a8c8">namespace&lt;/span> &lt;span style="color:#111">SmartCard&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#00a8c8">public&lt;/span> &lt;span style="color:#00a8c8">static&lt;/span> &lt;span style="color:#00a8c8">class&lt;/span> &lt;span style="color:#75af00">VolumeManager&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#75af00"> [DllImport( &amp;#34;winmm.dll&amp;#34; )]&lt;/span>
&lt;span style="color:#00a8c8">public&lt;/span> &lt;span style="color:#00a8c8">static&lt;/span> &lt;span style="color:#00a8c8">extern&lt;/span> &lt;span style="color:#00a8c8">int&lt;/span> &lt;span style="color:#111">waveOutGetVolume&lt;/span>&lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">IntPtr&lt;/span> &lt;span style="color:#111">hwo&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#00a8c8">out&lt;/span> &lt;span style="color:#00a8c8">uint&lt;/span> &lt;span style="color:#111">dwVolume&lt;/span> &lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#75af00">
&lt;/span>&lt;span style="color:#75af00"> [DllImport( &amp;#34;winmm.dll&amp;#34; )]&lt;/span>
&lt;span style="color:#00a8c8">public&lt;/span> &lt;span style="color:#00a8c8">static&lt;/span> &lt;span style="color:#00a8c8">extern&lt;/span> &lt;span style="color:#00a8c8">int&lt;/span> &lt;span style="color:#111">waveOutSetVolume&lt;/span>&lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">IntPtr&lt;/span> &lt;span style="color:#111">hwo&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#00a8c8">uint&lt;/span> &lt;span style="color:#111">dwVolume&lt;/span> &lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#00a8c8">static&lt;/span> &lt;span style="color:#111">MMDeviceEnumerator&lt;/span> &lt;span style="color:#111">DevEnum&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#00a8c8">null&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#00a8c8">static&lt;/span> &lt;span style="color:#111">MMDevice&lt;/span> &lt;span style="color:#111">device&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#00a8c8">null&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#75715e">// device will stay null for workstations which do not have a speaker or headphone plugged in
&lt;/span>&lt;span style="color:#75715e">&lt;/span>
&lt;span style="color:#00a8c8">static&lt;/span> &lt;span style="color:#111">VolumeManager&lt;/span>&lt;span style="color:#111">()&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#00a8c8">if&lt;/span>&lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">Environment&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">OSVersion&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Platform&lt;/span> &lt;span style="color:#111">==&lt;/span> &lt;span style="color:#111">PlatformID&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Win32NT&lt;/span> &lt;span style="color:#111">&amp;amp;&amp;amp;&lt;/span> &lt;span style="color:#111">Environment&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">OSVersion&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Version&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Major&lt;/span> &lt;span style="color:#111">&amp;amp;&lt;/span>&lt;span style="color:#111">gt&lt;/span>&lt;span style="color:#111">;=&lt;/span> &lt;span style="color:#ae81ff">6&lt;/span> &lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">{&lt;/span> &lt;span style="color:#75715e">// If it is Vista or greater
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#111">DevEnum&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#00a8c8">new&lt;/span> &lt;span style="color:#111">MMDeviceEnumerator&lt;/span>&lt;span style="color:#111">();&lt;/span>
&lt;span style="color:#00a8c8">try&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#111">device&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#111">DevEnum&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">GetDefaultAudioEndpoint&lt;/span>&lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">EDataFlow&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">eRender&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">ERole&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">eMultimedia&lt;/span> &lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#111">}&lt;/span> &lt;span style="color:#00a8c8">catch&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">COMException&lt;/span> &lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#111">device&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#00a8c8">null&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#00a8c8">public&lt;/span> &lt;span style="color:#00a8c8">static&lt;/span> &lt;span style="color:#00a8c8">ushort&lt;/span> &lt;span style="color:#111">GetCurrentVolume&lt;/span>&lt;span style="color:#111">()&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">device&lt;/span> &lt;span style="color:#111">==&lt;/span> &lt;span style="color:#00a8c8">null&lt;/span> &lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#00a8c8">return&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#00a8c8">if&lt;/span>&lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">Environment&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">OSVersion&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Platform&lt;/span> &lt;span style="color:#111">==&lt;/span> &lt;span style="color:#111">PlatformID&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Win32NT&lt;/span> &lt;span style="color:#111">&amp;amp;&amp;amp;&lt;/span> &lt;span style="color:#111">Environment&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">OSVersion&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Version&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Major&lt;/span> &lt;span style="color:#111">&amp;amp;&lt;/span>&lt;span style="color:#111">gt&lt;/span>&lt;span style="color:#111">;=&lt;/span> &lt;span style="color:#ae81ff">6&lt;/span> &lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#00a8c8">return&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#00a8c8">ushort&lt;/span> &lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">device&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">AudioEndpointVolume&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">MasterVolumeLevelScalar&lt;/span> &lt;span style="color:#111">*&lt;/span> &lt;span style="color:#ae81ff">100&lt;/span> &lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#75715e">// By the default set the volume to 0
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#00a8c8">uint&lt;/span> &lt;span style="color:#111">CurrVol&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#75715e">// At this point, CurrVol gets assigned the volume
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#111">waveOutGetVolume&lt;/span>&lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">IntPtr&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Zero&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#00a8c8">out&lt;/span> &lt;span style="color:#111">CurrVol&lt;/span> &lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#75715e">// Calculate the volume
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#00a8c8">ushort&lt;/span> &lt;span style="color:#111">CalcVol&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#00a8c8">ushort&lt;/span> &lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">CurrVol&lt;/span> &lt;span style="color:#111">&amp;amp;&lt;/span> &lt;span style="color:#ae81ff">0x0000ffff&lt;/span> &lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#75715e">// Get the volume on a scale of 1 to 10 (to fit the trackbar)
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#111">CalcVol&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#00a8c8">ushort&lt;/span> &lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">CalcVol&lt;/span> &lt;span style="color:#111">/&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#00a8c8">ushort&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">MaxValue&lt;/span> &lt;span style="color:#111">/&lt;/span> &lt;span style="color:#ae81ff">100&lt;/span> &lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#00a8c8">return&lt;/span> &lt;span style="color:#111">CalcVol&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#00a8c8">public&lt;/span> &lt;span style="color:#00a8c8">static&lt;/span> &lt;span style="color:#00a8c8">bool&lt;/span> &lt;span style="color:#111">Mute&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#00a8c8">get&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">device&lt;/span> &lt;span style="color:#111">!=&lt;/span> &lt;span style="color:#00a8c8">null&lt;/span> &lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#00a8c8">return&lt;/span> &lt;span style="color:#111">device&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">AudioEndpointVolume&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Mute&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#00a8c8">return&lt;/span> &lt;span style="color:#00a8c8">true&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#00a8c8">set&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">device&lt;/span> &lt;span style="color:#111">!=&lt;/span> &lt;span style="color:#00a8c8">null&lt;/span> &lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#111">device&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">AudioEndpointVolume&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Mute&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#00a8c8">value&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#00a8c8">public&lt;/span> &lt;span style="color:#00a8c8">static&lt;/span> &lt;span style="color:#00a8c8">void&lt;/span> &lt;span style="color:#111">SetVolume&lt;/span>&lt;span style="color:#111">(&lt;/span> &lt;span style="color:#00a8c8">ushort&lt;/span> &lt;span style="color:#111">volume&lt;/span> &lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">device&lt;/span> &lt;span style="color:#111">==&lt;/span> &lt;span style="color:#00a8c8">null&lt;/span> &lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#00a8c8">return&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#00a8c8">if&lt;/span>&lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">Environment&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">OSVersion&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Platform&lt;/span> &lt;span style="color:#111">==&lt;/span> &lt;span style="color:#111">PlatformID&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Win32NT&lt;/span> &lt;span style="color:#111">&amp;amp;&amp;amp;&lt;/span> &lt;span style="color:#111">Environment&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">OSVersion&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Version&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Major&lt;/span> &lt;span style="color:#111">&amp;amp;&lt;/span>&lt;span style="color:#111">gt&lt;/span>&lt;span style="color:#111">;=&lt;/span> &lt;span style="color:#ae81ff">6&lt;/span> &lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#00a8c8">if&lt;/span>&lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">volume&lt;/span> &lt;span style="color:#111">&amp;amp;&lt;/span>&lt;span style="color:#111">gt&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span> &lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#111">Mute&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#00a8c8">false&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#111">device&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">AudioEndpointVolume&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">MasterVolumeLevelScalar&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#00a8c8">float&lt;/span> &lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">volume&lt;/span> &lt;span style="color:#111">/&lt;/span> &lt;span style="color:#ae81ff">100.0f&lt;/span> &lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#00a8c8">return&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#75715e">// Calculate the volume that&amp;#39;s being set
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#00a8c8">int&lt;/span> &lt;span style="color:#111">NewVolume&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#00a8c8">ushort&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">MaxValue&lt;/span> &lt;span style="color:#111">/&lt;/span> &lt;span style="color:#ae81ff">100&lt;/span> &lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">*&lt;/span> &lt;span style="color:#111">volume&lt;/span> &lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#75715e">// Set the same volume for both the left and the right channels
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#00a8c8">uint&lt;/span> &lt;span style="color:#111">NewVolumeAllChannels&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#00a8c8">uint&lt;/span> &lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">NewVolume&lt;/span> &lt;span style="color:#111">&amp;amp;&lt;/span> &lt;span style="color:#ae81ff">0x0000ffff&lt;/span> &lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">|&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#00a8c8">uint&lt;/span> &lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">NewVolume&lt;/span> &lt;span style="color:#111">&amp;amp;&lt;/span>&lt;span style="color:#111">lt&lt;/span>&lt;span style="color:#111">;&amp;amp;&lt;/span>&lt;span style="color:#111">lt&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#ae81ff">16&lt;/span> &lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#75715e">// Set the volume
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#111">waveOutSetVolume&lt;/span>&lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">IntPtr&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Zero&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">NewVolumeAllChannels&lt;/span> &lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="disabling-close-button-for-winforms">Disabling close button for WinForms&lt;/h2>
&lt;p>The final form had few business logic to take care before the application was closed, and to control the exit we had to disable standard close button on the top right of the form. We also wanted the user to be able to minimize the application at will, so we couldn&amp;rsquo;t simply disable the ControlBox. So, the &lt;code>CreateParams&lt;/code> was overridden to achieve the desired effect as follows:&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">5
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">6
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">7
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">8
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">9
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-cs" data-lang="cs">&lt;span style="color:#00a8c8">private&lt;/span> &lt;span style="color:#00a8c8">const&lt;/span> &lt;span style="color:#00a8c8">int&lt;/span> &lt;span style="color:#111">CP_NOCLOSE_BUTTON&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#ae81ff">0x200&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#00a8c8">protected&lt;/span> &lt;span style="color:#00a8c8">override&lt;/span> &lt;span style="color:#111">CreateParams&lt;/span> &lt;span style="color:#111">CreateParams&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#00a8c8">get&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#111">CreateParams&lt;/span> &lt;span style="color:#111">cp&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#00a8c8">base&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">CreateParams&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#111">cp&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">ClassStyle&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#111">cp&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">ClassStyle&lt;/span> &lt;span style="color:#111">|&lt;/span> &lt;span style="color:#111">CP_NOCLOSE_BUTTON&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#00a8c8">return&lt;/span> &lt;span style="color:#111">cp&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>tip from &lt;a href="http://www.codeproject.com/Articles/20379/Disabling-Close-Button-on-Forms">http://www.codeproject.com/Articles/20379/Disabling-Close-Button-on-Forms&lt;/a>.&lt;/p>
&lt;p>That is it for now, I hope the above tips ends up helpful for someone.&lt;/p>
&lt;p>Happy coding!&lt;/p></description></item><item><title>Authenticating with the help of System.DirectoryServices.AccountManagement</title><link>/2013/02/authenticating-with-the-help-of-system-directoryservices-accountmanagement/</link><pubDate>Thu, 21 Feb 2013 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2013/02/authenticating-with-the-help-of-system-directoryservices-accountmanagement/</guid><description>&lt;p>With the help of &lt;code>System.DirectoryServices.AccountManagement&lt;/code> (available from .NET Framework 4.0) authenticating users against Microsoft Active Directory has become a lot simpler.&lt;/p>
&lt;p>Compare the below code&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">5
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-csharp" data-lang="csharp">&lt;span style="color:#00a8c8">public&lt;/span> &lt;span style="color:#00a8c8">static&lt;/span> &lt;span style="color:#00a8c8">bool&lt;/span> &lt;span style="color:#111">IsAuthenticated&lt;/span>&lt;span style="color:#111">(&lt;/span> &lt;span style="color:#00a8c8">string&lt;/span> &lt;span style="color:#111">domain&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#00a8c8">string&lt;/span> &lt;span style="color:#111">username&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#00a8c8">string&lt;/span> &lt;span style="color:#111">pwd&lt;/span> &lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#00a8c8">using&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">PrincipalContext&lt;/span> &lt;span style="color:#111">pc&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#00a8c8">new&lt;/span> &lt;span style="color:#111">PrincipalContext&lt;/span>&lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">ContextType&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Domain&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">domain&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#00a8c8">return&lt;/span> &lt;span style="color:#111">pc&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">ValidateCredentials&lt;/span>&lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">username&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">pwd&lt;/span> &lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>to what you have to do previously&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">17
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">18
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">19
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">20
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">21
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">22
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">23
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">24
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">25
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">26
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">27
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-csharp" data-lang="csharp">&lt;span style="color:#00a8c8">public&lt;/span> &lt;span style="color:#00a8c8">static&lt;/span> &lt;span style="color:#00a8c8">bool&lt;/span> &lt;span style="color:#111">IsAuthenticated&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#00a8c8">string&lt;/span> &lt;span style="color:#111">domain&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#00a8c8">string&lt;/span> &lt;span style="color:#111">username&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#00a8c8">string&lt;/span> &lt;span style="color:#111">pwd&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#00a8c8">string&lt;/span> &lt;span style="color:#111">domainAndUsername&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#111">username&lt;/span> &lt;span style="color:#111">+&lt;/span> &lt;span style="color:#d88200">&amp;#34;@&amp;#34;&lt;/span> &lt;span style="color:#111">+&lt;/span> &lt;span style="color:#111">domain&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#00a8c8">string&lt;/span> &lt;span style="color:#ae81ff">_&lt;/span>&lt;span style="color:#111">path&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#d88200">&amp;#34;LDAP://mydcserver.com:389/DC=ad,DC=mydcserver,DC=com&amp;#34;&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#111">DirectoryEntry&lt;/span> &lt;span style="color:#111">entry&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#00a8c8">new&lt;/span> &lt;span style="color:#111">DirectoryEntry&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">_&lt;/span>&lt;span style="color:#111">path&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">domainAndUsername&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">pwd&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#00a8c8">try&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#75715e">// Bind to the native AdsObject to force authentication.
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#111">Object&lt;/span> &lt;span style="color:#111">obj&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#111">entry&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">NativeObject&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#111">DirectorySearcher&lt;/span> &lt;span style="color:#111">search&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#00a8c8">new&lt;/span> &lt;span style="color:#111">DirectorySearcher&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">entry&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#111">search&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Filter&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#d88200">&amp;#34;(SAMAccountName=&amp;#34;&lt;/span> &lt;span style="color:#111">+&lt;/span> &lt;span style="color:#111">username&lt;/span> &lt;span style="color:#111">+&lt;/span> &lt;span style="color:#d88200">&amp;#34;)&amp;#34;&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#111">search&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">PropertiesToLoad&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Add&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;cn&amp;#34;&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#111">SearchResult&lt;/span> &lt;span style="color:#111">result&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#111">search&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">FindOne&lt;/span>&lt;span style="color:#111">();&lt;/span>
&lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#00a8c8">null&lt;/span> &lt;span style="color:#111">==&lt;/span> &lt;span style="color:#111">result&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#00a8c8">return&lt;/span> &lt;span style="color:#00a8c8">false&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#75715e">// Update the new path to the user in the directory
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#ae81ff">_&lt;/span>&lt;span style="color:#111">path&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#111">result&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Path&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#ae81ff">_f&lt;/span>&lt;span style="color:#111">ilterAttribute&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">String&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#111">result&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Properties&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#d88200">&amp;#34;cn&amp;#34;&lt;/span>&lt;span style="color:#111">][&lt;/span>&lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">];&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#00a8c8">catch&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">Exception&lt;/span> &lt;span style="color:#111">ex&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#75715e">//throw new Exception(&amp;#34;Error authenticating user. &amp;#34; + ex.Message);
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#00a8c8">return&lt;/span> &lt;span style="color:#00a8c8">false&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#00a8c8">return&lt;/span> &lt;span style="color:#00a8c8">true&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>pretty neat ha!&lt;/p></description></item><item><title>Secret Universe – The Hidden Life of the Cell</title><link>/2013/02/secret-universe-the-hidden-life-of-the-cell/</link><pubDate>Tue, 12 Feb 2013 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2013/02/secret-universe-the-hidden-life-of-the-cell/</guid><description>&lt;p>Came down with fever, and this reminded me of this documentary … go defense go!&lt;/p>
&lt;div class="embed-responsive embed-responsive-16by9">
&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/v1MnNO4I9aU?enablejsapi=1" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen>&lt;/iframe>
&lt;/div></description></item><item><title>Zen Coding for Visual Studio 2012</title><link>/2013/01/zen-coding-for-visual-studio-2012/</link><pubDate>Wed, 16 Jan 2013 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2013/01/zen-coding-for-visual-studio-2012/</guid><description>&lt;p>Don&amp;rsquo;t wait, head over to VS extensions gallery and grab hold of &lt;a href="http://visualstudiogallery.msdn.microsoft.com/07d54d12-7133-4e15-becb-6f451ea3bea6">Web Essentials 2012&lt;/a> by &lt;a href="http://madskristensen.net/">Mads Kristensen&lt;/a>. The extension offers good amount of features for VS based developers, of all of them the one I am going to talk about is the &lt;a href="http://en.wikipedia.org/wiki/Zen_Coding">Zen Coding&lt;/a> style introduced by Sergey Chikuyonok (as mentioned in &lt;a href="http://www.johnpapa.net/zen-coding-in-visual-studio-2012/">JohnPapa.net&lt;/a>).&lt;/p>
&lt;p>Before I proceed further Zen Coding style has been implemented across various text editors, and if you are a full time or regular web developer you should have a look into it. For all the supported text editors check out the Wikipedia entry at &lt;a href="http://en.wikipedia.org/wiki/Zen_Coding#Text_editors">http://en.wikipedia.org/wiki/Zen_Coding#Text_editors&lt;/a>.&lt;/p>
&lt;p>Once you have installed Web Essentials 2012, you will have support for coding in Zen Coding style development inside of Visual Studio 2012. The main idea behind the coding style is to reduce the manual typing process of creating the mundane html code for your web application. It is kind of text expansion mechanism, but it is much more than that.&lt;/p>
&lt;p>Lets start with few examples:&lt;/p>
&lt;h2 id="1-create-a-normal-div-tag">1. Create a normal div tag&lt;/h2>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">5
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-html" data-lang="html">&lt;span style="color:#75715e">&amp;lt;!-- When you type --&amp;gt;&lt;/span>
div &lt;span style="color:#75715e">&amp;lt;!-- Press TAB --&amp;gt;&lt;/span>
&lt;span style="color:#75715e">&amp;lt;!-- created content is --&amp;gt;&lt;/span>
&lt;span style="color:#111">&amp;lt;&lt;/span>&lt;span style="color:#f92672">div&lt;/span>&lt;span style="color:#111">&amp;gt;&amp;lt;/&lt;/span>&lt;span style="color:#f92672">div&lt;/span>&lt;span style="color:#111">&amp;gt;&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>as simple as that. In the above example itself you have skipped over typing all the angle brackets and the end tag of the div.&lt;/p>
&lt;h2 id="2-create-a-list-of-items--multiplication--and-item-numbering-">2. Create a list of items / multiplication &lt;code>*&lt;/code> and item numbering &lt;code>$&lt;/code>&lt;/h2>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">5
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">6
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">7
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">8
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">9
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-html" data-lang="html">&lt;span style="color:#75715e">&amp;lt;!-- When you type --&amp;gt;&lt;/span>
ul&amp;gt;li{Item $$}*3
&lt;span style="color:#75715e">&amp;lt;!-- created content is --&amp;gt;&lt;/span>
&lt;span style="color:#111">&amp;lt;&lt;/span>&lt;span style="color:#f92672">ul&lt;/span>&lt;span style="color:#111">&amp;gt;&lt;/span>
&lt;span style="color:#111">&amp;lt;&lt;/span>&lt;span style="color:#f92672">li&lt;/span>&lt;span style="color:#111">&amp;gt;&lt;/span>Item 01&lt;span style="color:#111">&amp;lt;/&lt;/span>&lt;span style="color:#f92672">li&lt;/span>&lt;span style="color:#111">&amp;gt;&lt;/span>
&lt;span style="color:#111">&amp;lt;&lt;/span>&lt;span style="color:#f92672">li&lt;/span>&lt;span style="color:#111">&amp;gt;&lt;/span>Item 02&lt;span style="color:#111">&amp;lt;/&lt;/span>&lt;span style="color:#f92672">li&lt;/span>&lt;span style="color:#111">&amp;gt;&lt;/span>
&lt;span style="color:#111">&amp;lt;&lt;/span>&lt;span style="color:#f92672">li&lt;/span>&lt;span style="color:#111">&amp;gt;&lt;/span>Item 03&lt;span style="color:#111">&amp;lt;/&lt;/span>&lt;span style="color:#f92672">li&lt;/span>&lt;span style="color:#111">&amp;gt;&lt;/span>
&lt;span style="color:#111">&amp;lt;/&lt;/span>&lt;span style="color:#f92672">ul&lt;/span>&lt;span style="color:#111">&amp;gt;&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Check out that you can repeat items using the syntax &lt;code>li*3&lt;/code> which simply creates that many items and you can specify what you would want to go inside the tag by using the curly braces. So &lt;code>li{hi}&lt;/code> would create:&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-html" data-lang="html">&lt;span style="color:#111">&amp;lt;&lt;/span>&lt;span style="color:#f92672">li&lt;/span>&lt;span style="color:#111">&amp;gt;&lt;/span>hi&lt;span style="color:#111">&amp;lt;/&lt;/span>&lt;span style="color:#f92672">li&lt;/span>&lt;span style="color:#111">&amp;gt;&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Also note that you can access the current index of the element using &lt;code>$&lt;/code> symbol, and when you use &lt;code>$$&lt;/code> it does the padding for you.&lt;/p>
&lt;h2 id="3-provide-id--class--and-custom-attributes-">3. Provide id &lt;code>#&lt;/code>, class &lt;code>.&lt;/code> and custom attributes &lt;code>[]&lt;/code>&lt;/h2>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-html" data-lang="html">&lt;span style="color:#75715e">&amp;lt;!-- When you type --&amp;gt;&lt;/span>
div.row&amp;gt;div.twelve.columns&amp;gt;div#header&amp;gt;h1[style=&amp;#34;text-decoration: underline&amp;#34;]{User Management}
&lt;span style="color:#75715e">&amp;lt;!-- created content is --&amp;gt;&lt;/span>
&lt;span style="color:#111">&amp;lt;&lt;/span>&lt;span style="color:#f92672">div&lt;/span> &lt;span style="color:#75af00">class&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#d88200">&amp;#34;row&amp;#34;&lt;/span>&lt;span style="color:#111">&amp;gt;&lt;/span>
&lt;span style="color:#111">&amp;lt;&lt;/span>&lt;span style="color:#f92672">div&lt;/span> &lt;span style="color:#75af00">class&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#d88200">&amp;#34;twelve columns&amp;#34;&lt;/span>&lt;span style="color:#111">&amp;gt;&lt;/span>
&lt;span style="color:#111">&amp;lt;&lt;/span>&lt;span style="color:#f92672">div&lt;/span> &lt;span style="color:#75af00">id&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#d88200">&amp;#34;header&amp;#34;&lt;/span>&lt;span style="color:#111">&amp;gt;&lt;/span>
&lt;span style="color:#111">&amp;lt;&lt;/span>&lt;span style="color:#f92672">h1&lt;/span> &lt;span style="color:#75af00">style&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#d88200">&amp;#34;text-decoration: underline&amp;#34;&lt;/span>&lt;span style="color:#111">&amp;gt;&lt;/span>User Management&lt;span style="color:#111">&amp;lt;/&lt;/span>&lt;span style="color:#f92672">h1&lt;/span>&lt;span style="color:#111">&amp;gt;&lt;/span>
&lt;span style="color:#111">&amp;lt;/&lt;/span>&lt;span style="color:#f92672">div&lt;/span>&lt;span style="color:#111">&amp;gt;&lt;/span>
&lt;span style="color:#111">&amp;lt;/&lt;/span>&lt;span style="color:#f92672">div&lt;/span>&lt;span style="color:#111">&amp;gt;&lt;/span>
&lt;span style="color:#111">&amp;lt;/&lt;/span>&lt;span style="color:#f92672">div&lt;/span>&lt;span style="color:#111">&amp;gt;&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="4-sibling-elements-">4. Sibling elements: &lt;code>+&lt;/code>&lt;/h2>
&lt;p>I am sure by now you understand that &lt;code>&amp;gt;&lt;/code> creates child elements, similarly for creating siblings you can use the &lt;code>+&lt;/code> element&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">5
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">6
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">7
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">8
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">9
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-html" data-lang="html">&lt;span style="color:#75715e">&amp;lt;!-- When you type --&amp;gt;&lt;/span>
a[href=&amp;#34;mycompany.com&amp;#34;]&amp;gt;img[src=&amp;#34;logo.png&amp;#34;]+div{MyCompany}
&lt;span style="color:#75715e">&amp;lt;!-- created content is --&amp;gt;&lt;/span>
&lt;span style="color:#111">&amp;lt;&lt;/span>&lt;span style="color:#f92672">a&lt;/span> &lt;span style="color:#75af00">href&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#d88200">&amp;#34;mycompany.com&amp;#34;&lt;/span>&lt;span style="color:#111">&amp;gt;&lt;/span>
&lt;span style="color:#111">&amp;lt;&lt;/span>&lt;span style="color:#f92672">img&lt;/span> &lt;span style="color:#75af00">src&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#d88200">&amp;#34;logo.png&amp;#34;&lt;/span> &lt;span style="color:#75af00">alt&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#d88200">&amp;#34;&amp;#34;&lt;/span> &lt;span style="color:#111">/&amp;gt;&amp;lt;&lt;/span>&lt;span style="color:#f92672">div&lt;/span>&lt;span style="color:#111">&amp;gt;&lt;/span>
MyCompany
&lt;span style="color:#111">&amp;lt;/&lt;/span>&lt;span style="color:#f92672">div&lt;/span>&lt;span style="color:#111">&amp;gt;&lt;/span>
&lt;span style="color:#111">&amp;lt;/&lt;/span>&lt;span style="color:#f92672">a&lt;/span>&lt;span style="color:#111">&amp;gt;&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="5-climbing-elements-">5. Climbing elements: &lt;code>^&lt;/code>&lt;/h2>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-html" data-lang="html">&lt;span style="color:#75715e">&amp;lt;!-- When you type --&amp;gt;&lt;/span>
p&amp;gt;div.header{Header goes here}+div.body{Body text}&amp;gt;div.footnote^a[href=&amp;#34;link&amp;#34;]{myLink}
&lt;span style="color:#75715e">&amp;lt;!-- created content is --&amp;gt;&lt;/span>
&lt;span style="color:#111">&amp;lt;&lt;/span>&lt;span style="color:#f92672">p&lt;/span>&lt;span style="color:#111">&amp;gt;&lt;/span>
&lt;span style="color:#111">&amp;lt;&lt;/span>&lt;span style="color:#f92672">div&lt;/span> &lt;span style="color:#75af00">class&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#d88200">&amp;#34;header&amp;#34;&lt;/span>&lt;span style="color:#111">&amp;gt;&lt;/span>
Header goes here
&lt;span style="color:#111">&amp;lt;/&lt;/span>&lt;span style="color:#f92672">div&lt;/span>&lt;span style="color:#111">&amp;gt;&lt;/span>
&lt;span style="color:#111">&amp;lt;&lt;/span>&lt;span style="color:#f92672">div&lt;/span> &lt;span style="color:#75af00">class&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#d88200">&amp;#34;body&amp;#34;&lt;/span>&lt;span style="color:#111">&amp;gt;&lt;/span>
Body text&lt;span style="color:#111">&amp;lt;&lt;/span>&lt;span style="color:#f92672">div&lt;/span> &lt;span style="color:#75af00">class&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#d88200">&amp;#34;footnote&amp;#34;&lt;/span>&lt;span style="color:#111">&amp;gt;&amp;lt;/&lt;/span>&lt;span style="color:#f92672">div&lt;/span>&lt;span style="color:#111">&amp;gt;&lt;/span>
&lt;span style="color:#111">&amp;lt;/&lt;/span>&lt;span style="color:#f92672">div&lt;/span>&lt;span style="color:#111">&amp;gt;&lt;/span>
&lt;span style="color:#111">&amp;lt;&lt;/span>&lt;span style="color:#f92672">a&lt;/span> &lt;span style="color:#75af00">href&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#d88200">&amp;#34;link&amp;#34;&lt;/span>&lt;span style="color:#111">&amp;gt;&lt;/span>myLink&lt;span style="color:#111">&amp;lt;/&lt;/span>&lt;span style="color:#f92672">a&lt;/span>&lt;span style="color:#111">&amp;gt;&lt;/span>
&lt;span style="color:#111">&amp;lt;/&lt;/span>&lt;span style="color:#f92672">p&lt;/span>&lt;span style="color:#111">&amp;gt;&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="6-lorem-ipsum-generator-lorem3">6. Lorem Ipsum generator &lt;code>lorem3&lt;/code>&lt;/h2>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-html" data-lang="html">&lt;span style="color:#75715e">&amp;lt;!-- When you type --&amp;gt;&lt;/span>
ul&amp;gt;li*5&amp;gt;lorem3
&lt;span style="color:#75715e">&amp;lt;!-- created content is --&amp;gt;&lt;/span>
&lt;span style="color:#111">&amp;lt;&lt;/span>&lt;span style="color:#f92672">ul&lt;/span>&lt;span style="color:#111">&amp;gt;&lt;/span>
&lt;span style="color:#111">&amp;lt;&lt;/span>&lt;span style="color:#f92672">li&lt;/span>&lt;span style="color:#111">&amp;gt;&lt;/span>Lorem ipsum dolor.&lt;span style="color:#111">&amp;lt;/&lt;/span>&lt;span style="color:#f92672">li&lt;/span>&lt;span style="color:#111">&amp;gt;&lt;/span>
&lt;span style="color:#111">&amp;lt;&lt;/span>&lt;span style="color:#f92672">li&lt;/span>&lt;span style="color:#111">&amp;gt;&lt;/span>Sit amet, consectetur.&lt;span style="color:#111">&amp;lt;/&lt;/span>&lt;span style="color:#f92672">li&lt;/span>&lt;span style="color:#111">&amp;gt;&lt;/span>
&lt;span style="color:#111">&amp;lt;&lt;/span>&lt;span style="color:#f92672">li&lt;/span>&lt;span style="color:#111">&amp;gt;&lt;/span>Adipiscing elit fusce.&lt;span style="color:#111">&amp;lt;/&lt;/span>&lt;span style="color:#f92672">li&lt;/span>&lt;span style="color:#111">&amp;gt;&lt;/span>
&lt;span style="color:#111">&amp;lt;&lt;/span>&lt;span style="color:#f92672">li&lt;/span>&lt;span style="color:#111">&amp;gt;&lt;/span>Vel sapien elit.&lt;span style="color:#111">&amp;lt;/&lt;/span>&lt;span style="color:#f92672">li&lt;/span>&lt;span style="color:#111">&amp;gt;&lt;/span>
&lt;span style="color:#111">&amp;lt;&lt;/span>&lt;span style="color:#f92672">li&lt;/span>&lt;span style="color:#111">&amp;gt;&lt;/span>In malesuada semper.&lt;span style="color:#111">&amp;lt;/&lt;/span>&lt;span style="color:#f92672">li&lt;/span>&lt;span style="color:#111">&amp;gt;&lt;/span>
&lt;span style="color:#111">&amp;lt;/&lt;/span>&lt;span style="color:#f92672">ul&lt;/span>&lt;span style="color:#111">&amp;gt;&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Unfortunately, as of Web Essentials 2012 v2.3.1 grouping is not supported yet. So you may want to &lt;a href="http://visualstudiogallery.msdn.microsoft.com/07d54d12-7133-4e15-becb-6f451ea3bea6/view/Discussions#6381">write to Kris&lt;/a> about the same and request for the feature.&lt;/p>
&lt;p>Overall Zen Coding style saves a lot of mundane typing that comes with html file development, and I hope this helps you as much as it has helped me.&lt;/p>
&lt;p>Do check out &lt;a href="http://vswebessentials.com/">Web Essentials&lt;/a> as it is much more than an extension which supports Zen Coding style.&lt;/p></description></item><item><title>Displaying SYS_REFCURSOR / CURSOR results from Oracle in Toad</title><link>/2012/12/displaying-sys_refcursor-cursor-results-from-oracle-in-toad/</link><pubDate>Sat, 08 Dec 2012 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2012/12/displaying-sys_refcursor-cursor-results-from-oracle-in-toad/</guid><description>&lt;p>I keep forgetting this method when I try to debug a procedure after some interval, so I am blogging it for my own reference.&lt;/p>
&lt;p>Procedure:&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-sql" data-lang="sql">&lt;span style="color:#00a8c8">PROCEDURE&lt;/span> &lt;span style="color:#111">GET_ROLES_FOR_USER_LOGIN&lt;/span> &lt;span style="color:#111">(&lt;/span>
&lt;span style="color:#111">i_user_domain&lt;/span> &lt;span style="color:#00a8c8">IN&lt;/span> &lt;span style="color:#111">IEMS_USERS&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#00a8c8">DOMAIN&lt;/span>&lt;span style="color:#f92672">%&lt;/span>&lt;span style="color:#00a8c8">TYPE&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#111">i_user_login&lt;/span> &lt;span style="color:#00a8c8">IN&lt;/span> &lt;span style="color:#111">IEMS_USERS&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">LOGIN&lt;/span>&lt;span style="color:#f92672">%&lt;/span>&lt;span style="color:#00a8c8">TYPE&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#111">o_roles&lt;/span> &lt;span style="color:#00a8c8">OUT&lt;/span> &lt;span style="color:#111">SYS_REFCURSOR&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Generally, we can right click on the procedure name on the schema browser and select Execute package, which gives the skeleton for executing your procedure. Once we have the code, we just add a &lt;code>refcursor&lt;/code> variable at the top, assign its value from the output of the procedure and then print it at the end.&lt;/p>
&lt;p>Displaying Output:&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-sql" data-lang="sql">&lt;span style="color:#00a8c8">variable&lt;/span> &lt;span style="color:#111">v_roles&lt;/span> &lt;span style="color:#111">refcursor&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#00a8c8">DECLARE&lt;/span>
&lt;span style="color:#111">I_USER_DOMAIN&lt;/span> &lt;span style="color:#111">NVARCHAR2&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">100&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#111">I_USER_LOGIN&lt;/span> &lt;span style="color:#111">NVARCHAR2&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">100&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#111">O_ROLES&lt;/span> &lt;span style="color:#111">SYS_REFCURSOR&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#00a8c8">BEGIN&lt;/span>
&lt;span style="color:#111">I_USER_DOMAIN&lt;/span> &lt;span style="color:#111">:&lt;/span>&lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#d88200">&amp;#39;External&amp;#39;&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#111">I_USER_LOGIN&lt;/span> &lt;span style="color:#111">:&lt;/span>&lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#d88200">&amp;#39;Vijay&amp;#39;&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#111">O_ROLES&lt;/span> &lt;span style="color:#111">:&lt;/span>&lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#00a8c8">NULL&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#111">IEMS&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">PKG_USER&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">GET_ROLES_FOR_USER_LOGIN&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">I_USER_DOMAIN&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">I_USER_LOGIN&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">O_ROLES&lt;/span> &lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#00a8c8">COMMIT&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#111">:&lt;/span>&lt;span style="color:#111">v_roles&lt;/span> &lt;span style="color:#111">:&lt;/span>&lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">O_ROLES&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#00a8c8">END&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#111">Print&lt;/span> &lt;span style="color:#111">v_roles&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Happy coding!&lt;/p></description></item><item><title>Oracle Managed ODP.NET</title><link>/2012/11/oracle-managed-odp-net/</link><pubDate>Wed, 14 Nov 2012 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2012/11/oracle-managed-odp-net/</guid><description>&lt;p>&lt;span style="float: left; width: 100%; background-color: #eee8aa; border: black 1px solid;">&lt;strong>Note:&lt;/strong>This documentation/guide is based on Managed ODP.NET v11.2.0.3.50 Beta&lt;/span>&lt;/p>
&lt;p>Download &lt;a href="http://www.oracle.com/technetwork/database/windows/downloads/odpmbeta-1696432.html">Managed ODP.NET from Oracle Technology Network&lt;/a>.&lt;/p>
&lt;p>Finally Oracle has released a pure .NET based client for connecting and working with Oracle databases from your CLR world without the dependencies lying around in the GC ignorant world. With a reference added to the Oracle.ManagedDataAccess.dll which weighs a mere 6+ MB’s (against 150+ MB’s previously) you are ready to get started with you day-to-day interaction to the 10g R2 or higher Oracle Databases.&lt;/p>
&lt;p>It is not without its quirks though, but for me the advantages have outweighed the issues and I have started using them in my current development even though it is still in Beta.&lt;/p>
&lt;p>Let’s get started with accomplishing something than me doing the happy dance any longer.&lt;/p>
&lt;ol>
&lt;li>To start off, get the package from the download link I have provided earlier.&lt;/li>
&lt;li>Open your .NET project (should be based on .NET Framework 4 or higher).&lt;/li>
&lt;li>Provide the connection information in the configration file (web.config, app.config)&lt;/li>
&lt;li>Extract and attach Oracle.ManagedDataAccess.dll from the package you downloaded.&lt;/li>
&lt;li>Write your data access code&lt;/li>
&lt;li>Profit?&lt;/li>
&lt;/ol>
&lt;h3 id="configuration">Configuration&lt;/h3>
&lt;p>With Managed ODP.NET now you would be able to provide the connection configurations as part of the application configuration settings. For a detailed information on all possible configuration settings check out the &lt;a href="http://www.oracle.com/technetwork/database/windows/downloads/odpmbetainstall-1696475.html#Configuration">documentation on OTN&lt;/a>.&lt;/p>
&lt;p>Generally you would simply add the needed connection string as&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-xml" data-lang="xml">&lt;span style="color:#f92672">&amp;lt;connectionStrings&amp;gt;&lt;/span>
&lt;span style="color:#f92672">&amp;lt;add&lt;/span> &lt;span style="color:#75af00">name=&lt;/span>&lt;span style="color:#d88200">&amp;#34;MyDB&amp;#34;&lt;/span> &lt;span style="color:#75af00">connectionString=&lt;/span>&lt;span style="color:#d88200">&amp;#34;Data Source=oracle;User Id=scott;Password=tiger;&amp;#34;&lt;/span> &lt;span style="color:#f92672">/&amp;gt;&lt;/span>
&lt;span style="color:#f92672">&amp;lt;/connectionStrings&amp;gt;&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>and use that in your application. But since the Managed ODP.NET is self contained, Oracle is providing 3 options for resolving the TNS “oracle” in the above connection string;&lt;/p>
&lt;ol>
&lt;li>you can either replace the TNS name with the full descriptor. Example:&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-plain" data-lang="plain">(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=myservername)(PORT=1521))(CONNECT_DATA=(FAILOVER_MODE=(TYPE=select)(METHOD=basic))(SERVER=dedicated)(SERVICE_NAME=oracle)))
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;ol start="2">
&lt;li>under the &lt;code>oracle.manageddataaccess.client&lt;/code> configuration section provide settings for the &lt;code>TNS_ADMIN&lt;/code> variable&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">5
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">6
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">7
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">8
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">9
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-xml" data-lang="xml">&lt;span style="color:#f92672">&amp;lt;configuration&amp;gt;&lt;/span>
&lt;span style="color:#f92672">&amp;lt;oracle.manageddataaccess.client&amp;gt;&lt;/span>
&lt;span style="color:#f92672">&amp;lt;version&lt;/span> &lt;span style="color:#75af00">number=&lt;/span>&lt;span style="color:#d88200">&amp;#34;*&amp;#34;&lt;/span>&lt;span style="color:#f92672">&amp;gt;&lt;/span>
&lt;span style="color:#f92672">&amp;lt;settings&amp;gt;&lt;/span>
&lt;span style="color:#f92672">&amp;lt;setting&lt;/span> &lt;span style="color:#75af00">name=&lt;/span>&lt;span style="color:#d88200">&amp;#34;TNS_ADMIN&amp;#34;&lt;/span> &lt;span style="color:#75af00">value=&lt;/span>&lt;span style="color:#d88200">&amp;#34;C:\oracle\network\admin&amp;#34;&lt;/span>&lt;span style="color:#f92672">/&amp;gt;&lt;/span>
&lt;span style="color:#f92672">&amp;lt;/settings&amp;gt;&lt;/span>
&lt;span style="color:#f92672">&amp;lt;/version&amp;gt;&lt;/span>
&lt;span style="color:#f92672">&amp;lt;/oracle.manageddataaccess.client&amp;gt;&lt;/span>
&lt;span style="color:#f92672">&amp;lt;/configuration&amp;gt;&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;ol start="3">
&lt;li>under the &lt;code>oracle.manageddataaccess.client&lt;/code> provide the &lt;code>dataSource&lt;/code> description separately&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-xml" data-lang="xml">&lt;span style="color:#f92672">&amp;lt;configuration&amp;gt;&lt;/span>
&lt;span style="color:#f92672">&amp;lt;oracle.manageddataaccess.client&amp;gt;&lt;/span>
&lt;span style="color:#f92672">&amp;lt;version&lt;/span> &lt;span style="color:#75af00">number=&lt;/span>&lt;span style="color:#d88200">&amp;#34;*&amp;#34;&lt;/span>&lt;span style="color:#f92672">&amp;gt;&lt;/span>
&lt;span style="color:#f92672">&amp;lt;dataSources&amp;gt;&lt;/span>
&lt;span style="color:#f92672">&amp;lt;dataSource&lt;/span> &lt;span style="color:#75af00">alias=&lt;/span>&lt;span style="color:#d88200">&amp;#34;oracle&amp;#34;&lt;/span> &lt;span style="color:#75af00">descriptor=&lt;/span>&lt;span style="color:#d88200">&amp;#34;(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=sales-server)......)))&amp;#34;&lt;/span>&lt;span style="color:#f92672">/&amp;gt;&lt;/span>
&lt;span style="color:#f92672">&amp;lt;dataSource&lt;/span> &lt;span style="color:#75af00">alias=&lt;/span>&lt;span style="color:#d88200">&amp;#34;oralcetest&amp;#34;&lt;/span> &lt;span style="color:#75af00">descriptor=&lt;/span>&lt;span style="color:#d88200">&amp;#34;(DESCRIPTION= ......)))&amp;#34;&lt;/span>&lt;span style="color:#f92672">/&amp;gt;&lt;/span>
&lt;span style="color:#f92672">&amp;lt;/dataSources&amp;gt;&lt;/span>
&lt;span style="color:#f92672">&amp;lt;/version&amp;gt;&lt;/span>
&lt;span style="color:#f92672">&amp;lt;/oracle.manageddataaccess.client&amp;gt;&lt;/span>
&lt;span style="color:#f92672">&amp;lt;/configuration&amp;gt;&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>&lt;strong>Note:&lt;/strong> The &lt;code>oracle.manageddataaccess.client&lt;/code> section needs to be declared in the &lt;code>configSections&lt;/code> as follows:&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">5
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-xml" data-lang="xml">&lt;span style="color:#f92672">&amp;lt;configuration&amp;gt;&lt;/span>
&lt;span style="color:#f92672">&amp;lt;configSections&amp;gt;&lt;/span>
&lt;span style="color:#f92672">&amp;lt;section&lt;/span> &lt;span style="color:#75af00">name=&lt;/span>&lt;span style="color:#d88200">&amp;#34;oracle.manageddataaccess.client&amp;#34;&lt;/span> &lt;span style="color:#75af00">type=&lt;/span>&lt;span style="color:#d88200">&amp;#34;OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess&amp;#34;&lt;/span> &lt;span style="color:#f92672">/&amp;gt;&lt;/span>
&lt;span style="color:#f92672">&amp;lt;/configSections&amp;gt;&lt;/span>
&lt;span style="color:#f92672">&amp;lt;/configuration&amp;gt;&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="code--migration">Code / Migration&lt;/h3>
&lt;p>If you have previous experience with writing code for ODP.NET, &lt;u>mostly&lt;/u> the only change you are going to do is remove the filthy old ODP.NET reference, add the new managed ODP.NET reference and change the namespace on the top of your code files from &lt;span style='font-family:monospace'>using Oracle.&lt;del style='color:red'>DataAccess&lt;/del>.Client; using Oracle.&lt;del style='color:#DC143C'>DataAccess&lt;/del>.Types;&lt;/span> to &lt;span style='font-family:monospace'>using Oracle.&lt;strong style='color:#4682B4'>ManagedDataAccess&lt;/strong>.Client; using Oracle.&lt;strong style='color:#4682B4'>ManagedDataAccess&lt;/strong>.Types;&lt;/span> and it should work just fine.&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">17
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">18
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">19
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">20
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">21
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">22
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">23
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">24
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">25
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">26
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">27
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">28
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">29
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">30
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">31
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-csharp" data-lang="csharp">&lt;span style="color:#75715e">// C#
&lt;/span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#00a8c8">using&lt;/span> &lt;span style="color:#111">System&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#00a8c8">using&lt;/span> &lt;span style="color:#111">Oracle.ManagedDataAccess.Client&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#00a8c8">using&lt;/span> &lt;span style="color:#111">Oracle.ManagedDataAccess.Types&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#00a8c8">namespace&lt;/span> &lt;span style="color:#111">Connect&lt;/span>
&lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#00a8c8">class&lt;/span> &lt;span style="color:#75af00">Program&lt;/span>
&lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#00a8c8">static&lt;/span> &lt;span style="color:#00a8c8">void&lt;/span> &lt;span style="color:#111">Main&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#00a8c8">string&lt;/span>&lt;span style="color:#111">[]&lt;/span> &lt;span style="color:#111">args&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#00a8c8">try&lt;/span>
&lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#75715e">// Please replace the connection string attribute settings
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#00a8c8">string&lt;/span> &lt;span style="color:#111">constr&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#d88200">&amp;#34;user id=scott;password=tiger;data source=oracle&amp;#34;&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#111">OracleConnection&lt;/span> &lt;span style="color:#111">con&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#00a8c8">new&lt;/span> &lt;span style="color:#111">OracleConnection&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">constr&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#111">con&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Open&lt;/span>&lt;span style="color:#111">();&lt;/span>
&lt;span style="color:#111">Console&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">WriteLine&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;Connected to Oracle Database {0}&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">con&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">ServerVersion&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#111">con&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Dispose&lt;/span>&lt;span style="color:#111">();&lt;/span>
&lt;span style="color:#111">Console&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">WriteLine&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;Press RETURN to exit.&amp;#34;&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#111">Console&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">ReadLine&lt;/span>&lt;span style="color:#111">();&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#00a8c8">catch&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">Exception&lt;/span> &lt;span style="color:#111">ex&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#111">Console&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">WriteLine&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;Error : {0}&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">ex&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>&lt;em>Sample from &lt;a href="http://www.oracle.com/technetwork/database/windows/downloads/odpmbetainstall-1696475.html">http://www.oracle.com/technetwork/database/windows/downloads/odpmbetainstall-1696475.html&lt;/a>&lt;/em>&lt;/p>
&lt;h3 id="limitations">Limitations&lt;/h3>
&lt;p>There are limitations on the Managed ODP.NET which may or may not affect you, please refer to the [documentation on the same](&lt;a href="http://www.oracle.com/technetwork/database/windows/downloads/odpmbetainstall-1696475.html#Known">http://www.oracle.com/technetwork/database/windows/downloads/odpmbetainstall-1696475.html#Known&lt;/a> Issues).&lt;/p>
&lt;h3 id="conclusion">Conclusion&lt;/h3>
&lt;p>Overall, the Managed ODP.NET seems to be a great step for Oracle in the way to support Microsoft .NET developer community. It is also great for server administrators as they do not have to face various issues with version compatibility as was with the native ODP.NET / Wrapper version.&lt;/p></description></item><item><title>WebAPI – Multiple actions were found that match the request</title><link>/2012/10/multiple-actions-were-found-that-match-the-request/</link><pubDate>Thu, 04 Oct 2012 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2012/10/multiple-actions-were-found-that-match-the-request/</guid><description>&lt;p>&lt;a href="http://www.asp.net/web-api">WebAPI&lt;/a> looks very suitable for exposing RESTful services for any web based application. So, during a recent implementation of WebAPI on a project I was receiving the &lt;code>Multiple actions were found that match the request&lt;/code> exception.&lt;/p>
&lt;p>To get some context below was my setup:&lt;/p>
&lt;p>The route configuration:&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">5
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">6
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">7
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">8
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">9
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-csharp" data-lang="csharp">&lt;span style="color:#00a8c8">public&lt;/span> &lt;span style="color:#00a8c8">static&lt;/span> &lt;span style="color:#00a8c8">class&lt;/span> &lt;span style="color:#75af00">WebApiConfig&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#00a8c8">public&lt;/span> &lt;span style="color:#00a8c8">static&lt;/span> &lt;span style="color:#00a8c8">void&lt;/span> &lt;span style="color:#111">Register&lt;/span>&lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">HttpConfiguration&lt;/span> &lt;span style="color:#111">config&lt;/span> &lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#111">config&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Routes&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">MapHttpRoute&lt;/span>&lt;span style="color:#111">(&lt;/span>
&lt;span style="color:#111">name&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#d88200">&amp;#34;DefaultApi&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#111">routeTemplate&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#d88200">&amp;#34;api/{controller}/{id}&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#111">defaults&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#00a8c8">new&lt;/span> &lt;span style="color:#111">{&lt;/span> &lt;span style="color:#111">id&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#111">RouteParameter&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Optional&lt;/span> &lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>The controller:&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-csharp" data-lang="csharp">&lt;span style="color:#00a8c8">public&lt;/span> &lt;span style="color:#00a8c8">class&lt;/span> &lt;span style="color:#75af00">PIAPIController&lt;/span> &lt;span style="color:#111">:&lt;/span> &lt;span style="color:#111">ApiController&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#00a8c8">private&lt;/span> &lt;span style="color:#00a8c8">readonly&lt;/span> &lt;span style="color:#111">IFilterRepository&lt;/span> &lt;span style="color:#111">repository&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#00a8c8">new&lt;/span> &lt;span style="color:#111">FilterRepository&lt;/span>&lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#00a8c8">public&lt;/span> &lt;span style="color:#111">List&lt;/span>&lt;span style="color:#111">&amp;amp;&lt;/span>&lt;span style="color:#111">lt&lt;/span>&lt;span style="color:#111">;&lt;/span>&lt;span style="color:#111">AutoCompleteItems&lt;/span>&lt;span style="color:#111">&amp;amp;&lt;/span>&lt;span style="color:#111">gt&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#111">GetCampusList&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#00a8c8">string&lt;/span> &lt;span style="color:#111">term&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#00a8c8">null&lt;/span> &lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#75715e">// business logic...
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#00a8c8">return&lt;/span> &lt;span style="color:#111">nv&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#00a8c8">public&lt;/span> &lt;span style="color:#111">List&lt;/span>&lt;span style="color:#111">&amp;amp;&lt;/span>&lt;span style="color:#111">lt&lt;/span>&lt;span style="color:#111">;&lt;/span>&lt;span style="color:#111">AutoCompleteItems&lt;/span>&lt;span style="color:#111">&amp;amp;&lt;/span>&lt;span style="color:#111">gt&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#111">GetDivisionList&lt;/span>&lt;span style="color:#111">(&lt;/span> &lt;span style="color:#00a8c8">string&lt;/span> &lt;span style="color:#111">term&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#00a8c8">null&lt;/span> &lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#75715e">// business logic...
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#00a8c8">return&lt;/span> &lt;span style="color:#111">nv&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>The controller in issue has multiple Get actions with varying names, since all of this actions were addressing a similar unit of filters I had grouped them together in the same controller.&lt;/p>
&lt;p>After Googling around for a while I came across the following useful answers on StackOverflow:&lt;/p>
&lt;p>&lt;a href="http://stackoverflow.com/questions/9499794/single-controller-with-multiple-get-methods-in-asp-net-web-api/12185249#12185249">http://stackoverflow.com/a/12185249&lt;/a>&lt;/p>
&lt;p>&lt;a href="http://stackoverflow.com/questions/11407267/multiple-httppost-method-in-mvc4-web-api-controller/12703423#12703423">http://stackoverflow.com/a/12703423&lt;/a>&lt;/p>
&lt;p>After changing the route config to&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">5
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">6
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">7
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">8
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-csharp" data-lang="csharp">&lt;span style="color:#00a8c8">public&lt;/span> &lt;span style="color:#00a8c8">static&lt;/span> &lt;span style="color:#00a8c8">void&lt;/span> &lt;span style="color:#111">Register&lt;/span>&lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">HttpConfiguration&lt;/span> &lt;span style="color:#111">config&lt;/span> &lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#111">config&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Routes&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">MapHttpRoute&lt;/span>&lt;span style="color:#111">(&lt;/span>
&lt;span style="color:#111">name&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#d88200">&amp;#34;DefaultApiWithID&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#111">routeTemplate&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#d88200">&amp;#34;api/{controller}/{id}&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#111">defaults&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#00a8c8">null&lt;/span>
&lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#111">config&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Routes&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">MapHttpRoute&lt;/span>&lt;span style="color:#111">(&lt;/span> &lt;span style="color:#d88200">&amp;#34;DefaultApiWithAction&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#d88200">&amp;#34;Api/{controller}/{action}&amp;#34;&lt;/span> &lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>and decorating the action names with &lt;code>[ActionName(&amp;quot;uniqueactionname&amp;quot;)]&lt;/code>, the modifications did not help address the error.&lt;/p>
&lt;p>But finally changing the order of routes in the route configuration solved the issue.&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">5
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">6
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">7
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">8
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-csharp" data-lang="csharp">&lt;span style="color:#00a8c8">public&lt;/span> &lt;span style="color:#00a8c8">static&lt;/span> &lt;span style="color:#00a8c8">void&lt;/span> &lt;span style="color:#111">Register&lt;/span>&lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">HttpConfiguration&lt;/span> &lt;span style="color:#111">config&lt;/span> &lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#111">config&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Routes&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">MapHttpRoute&lt;/span>&lt;span style="color:#111">(&lt;/span> &lt;span style="color:#d88200">&amp;#34;DefaultApiWithAction&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#d88200">&amp;#34;Api/{controller}/{action}&amp;#34;&lt;/span> &lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#111">config&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Routes&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">MapHttpRoute&lt;/span>&lt;span style="color:#111">(&lt;/span>
&lt;span style="color:#111">name&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#d88200">&amp;#34;DefaultApiWithID&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#111">routeTemplate&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#d88200">&amp;#34;api/{controller}/{id}&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#111">defaults&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#00a8c8">null&lt;/span>
&lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Lesson Learned: Move more greedy routes to the end.&lt;/p></description></item><item><title>Dapper – Micro ORM for Oracle and Microsoft .NET</title><link>/2012/07/dapper-micro-orm-for-oracle-and-microsoft-net/</link><pubDate>Wed, 11 Jul 2012 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2012/07/dapper-micro-orm-for-oracle-and-microsoft-net/</guid><description>&lt;p>I have been on the hunt for an easier ORM tool to help with my day-to-day work. Till now the ones I have tested have fallen short of fulling one of criteria:&lt;/p>
&lt;ol>
&lt;li>Should work with Oracle&lt;/li>
&lt;li>Should support multiple REFCURSOR output parameters from Oracle Stored Procedures and OracleDbType&amp;rsquo;s&lt;/li>
&lt;/ol>
&lt;blockquote>
&lt;p>We use stored procedures exclusively for our CURD operations, so this is the determining requirement and I do not like compromising having an abstract layer which does not support OracleDbType&amp;rsquo;s just because it has to work with other DB&amp;rsquo;s&lt;/p>
&lt;/blockquote>
&lt;ol start="3">
&lt;li>Should have decent performance for serving enterprise applications&lt;/li>
&lt;/ol>
&lt;blockquote>
&lt;p>This need was the main reason I have stayed away from heavy weight ORM&amp;rsquo;s like NHibernate and Entity Framework&lt;/p>
&lt;/blockquote>
&lt;ol start="4">
&lt;li>Should be light weight and simple&lt;/li>
&lt;li>Preferable not a stale project&lt;/li>
&lt;li>Preferably open source&lt;/li>
&lt;/ol>
&lt;p>The 2 main micro ORMs I am taking into consideration are &lt;a href="http://code.google.com/p/dapper-dot-net/">Dapper&lt;/a> and &lt;a href="http://www.toptensoftware.com/petapoco/">PetaPoco&lt;/a>.&lt;/p>
&lt;p>I feel Dapper is more suited for my situation because it meets all of my above requirements and it works in the following scenarios&lt;/p>
&lt;h3 id="integrating-oracle-stored-procedures">Integrating Oracle Stored Procedures&lt;/h3>
&lt;p>Getting the result out from an Oracle Stored Procedure with the help of Dapper seemed very easy after just adding a custom implementation of &lt;code>Dapper.SqlMapper.IDynamicParameters&lt;/code> which supports &lt;code>Oracle.DataAccess.Client.OracleDbType&lt;/code>.&lt;/p>
&lt;h3 id="mapping-multiple-refcursors-to-multiple-models">Mapping Multiple RefCursors to Multiple Models&lt;/h3>
&lt;p>Dapper has a nice way to map multiple models to the procedure as shown below&lt;/p>
&lt;p>&lt;strong>SQL&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-sql" data-lang="sql">&lt;span style="color:#00a8c8">PROCEDURE&lt;/span> &lt;span style="color:#111">GetUserDetailsForPIDM&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">i_id&lt;/span> &lt;span style="color:#00a8c8">IN&lt;/span> &lt;span style="color:#111">NUMBER&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#111">o_user&lt;/span> &lt;span style="color:#00a8c8">OUT&lt;/span> &lt;span style="color:#111">SYS_REFCURSOR&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;span style="color:#111">o_roles&lt;/span> &lt;span style="color:#00a8c8">OUT&lt;/span> &lt;span style="color:#111">SYS_REFCURSOR&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>&lt;strong>CSharp&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-csharp" data-lang="csharp">&lt;span style="color:#00a8c8">public&lt;/span> &lt;span style="color:#00a8c8">static&lt;/span> &lt;span style="color:#111">User&lt;/span> &lt;span style="color:#111">GetUserDetailsByID&lt;/span>&lt;span style="color:#111">(&lt;/span> &lt;span style="color:#00a8c8">int&lt;/span> &lt;span style="color:#111">ID&lt;/span> &lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#111">User&lt;/span> &lt;span style="color:#111">u&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#00a8c8">null&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#00a8c8">using&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">OracleConnection&lt;/span> &lt;span style="color:#111">cnn&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#00a8c8">new&lt;/span> &lt;span style="color:#111">OracleConnection&lt;/span>&lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">ConnectionString&lt;/span> &lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#111">cnn&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Open&lt;/span>&lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#00a8c8">var&lt;/span> &lt;span style="color:#111">p&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#00a8c8">new&lt;/span> &lt;span style="color:#111">OracleDynamicParameters&lt;/span>&lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#111">p&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Add&lt;/span>&lt;span style="color:#111">(&lt;/span> &lt;span style="color:#d88200">&amp;#34;i_id&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">ID&lt;/span> &lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#111">p&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Add&lt;/span>&lt;span style="color:#111">(&lt;/span> &lt;span style="color:#d88200">&amp;#34;o_user&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">dbType&lt;/span>&lt;span style="color:#111">:&lt;/span>&lt;span style="color:#111">OracleDbType&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">RefCursor&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">direction&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#111">ParameterDirection&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Output&lt;/span> &lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#111">p&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Add&lt;/span>&lt;span style="color:#111">(&lt;/span> &lt;span style="color:#d88200">&amp;#34;o_roles&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">dbType&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#111">OracleDbType&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">RefCursor&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">direction&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#111">ParameterDirection&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Output&lt;/span> &lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#00a8c8">using&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#00a8c8">var&lt;/span> &lt;span style="color:#111">multi&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#111">cnn&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">QueryMultiple&lt;/span>&lt;span style="color:#111">(&lt;/span> &lt;span style="color:#d88200">&amp;#34;PKG_USERS.GetUserDetailsForID&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">param&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#111">p&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">commandType&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#111">CommandType&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">StoredProcedure&lt;/span> &lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#111">u&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#111">multi&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Read&lt;/span>&lt;span style="color:#111">&amp;amp;&lt;/span>&lt;span style="color:#111">lt&lt;/span>&lt;span style="color:#111">;&lt;/span>&lt;span style="color:#111">User&lt;/span>&lt;span style="color:#111">&amp;amp;&lt;/span>&lt;span style="color:#111">gt&lt;/span>&lt;span style="color:#111">;(&lt;/span> &lt;span style="color:#111">).&lt;/span>&lt;span style="color:#111">Single&lt;/span>&lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#111">u&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Roles&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#111">multi&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Read&lt;/span>&lt;span style="color:#111">&amp;amp;&lt;/span>&lt;span style="color:#111">lt&lt;/span>&lt;span style="color:#111">;&lt;/span>&lt;span style="color:#111">UserRole&lt;/span>&lt;span style="color:#111">&amp;amp;&lt;/span>&lt;span style="color:#111">gt&lt;/span>&lt;span style="color:#111">;.&lt;/span>&lt;span style="color:#111">ToList&lt;/span>&lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#00a8c8">return&lt;/span> &lt;span style="color:#111">u&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>You can download the &lt;a href="https://gist.github.com/3096151">OracleDynamicParameters.cs&lt;/a> file from Gist.&lt;/p>
&lt;h3 id="performance">Performance&lt;/h3>
&lt;p>According to &lt;a href="http://code.google.com/p/dapper-dot-net/#Performance_of_SELECT_mapping_over_500_iterations_-_POCO_seriali">Dapper&amp;rsquo;s website&lt;/a> and &lt;a href="http://stevenhollidge.blogspot.com/2011/04/how-to-use-dapper-petapoco-micro-orms.html">Steven Hollidge&lt;/a> Dapper&amp;rsquo;s performs only next to hand written ADO.NET code. Apart from this &lt;a href="http://blog.stackoverflow.com/2012/01/stack-exchange-data-explorer-2-0/">Stackoverflow&lt;/a> is using Dapper for their ORM needs. Considering their load I am convinced that Dapper is worth a try for our ORM needs as well.&lt;/p></description></item><item><title>Map your SkyDrive to a drive on your PC</title><link>/2012/07/map-your-skydrive-to-a-drive-on-your-pc/</link><pubDate>Tue, 10 Jul 2012 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2012/07/map-your-skydrive-to-a-drive-on-your-pc/</guid><description>&lt;p>Reference: &lt;a href="http://www.howtogeek.com/56096/how-to-use-skydrives-25-gb-as-a-mapped-drive-for-easy-access/">http://www.howtogeek.com/56096/how-to-use-skydrives-25-gb-as-a-mapped-drive-for-easy-access/&lt;/a>&lt;/p>
&lt;p>— On Windows 7 you can store the online credentials in your windows account so you don’t have to login every time you visit the online drive&lt;/p>
&lt;p>Go to Control Panel –&amp;gt; User Accounts –&amp;gt; User Accounts –&amp;gt; Link online IDs&lt;/p>
&lt;p>Choose to “Link online ID” using the WindowsLiveID provider&lt;/p>
&lt;p>Provide your login credentials for the Windows Live ID&lt;/p>
&lt;p>—-&lt;/p>
&lt;p>Visit &lt;a href="http://skydrive.live.com">http://skydrive.live.com&lt;/a>&lt;/p>
&lt;p>Navigate to one of the sub-folder and note down the “cid” parameter in the query string&lt;/p>
&lt;p>Open explorer and choose “Map network drive” option.&lt;/p>
&lt;p>Provide the destination as &lt;code>https://d.docs.live.net/{cid}&lt;/code> substitute the {cid} with the noted value and assign the preferred drive letter.&lt;/p>
&lt;p>Now you have access to your SkyDrive from your computer.&lt;/p></description></item><item><title>Installing Chirpy for VS2011</title><link>/2012/05/installing-chirpy-for-vs2011/</link><pubDate>Tue, 08 May 2012 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2012/05/installing-chirpy-for-vs2011/</guid><description>&lt;p>&lt;a title="Chirpy" href="http://chirpy.codeplex.com/" target="_blank">&lt;img style="display: inline" border="0" src="/wp-content/uploads/2012/11/Chirpy.jpg" width="174" height="221" />&lt;/a>&lt;/p>
&lt;p>&lt;a href="http://chirpy.codeplex.com/">Chirpy&lt;/a> is great, it combine, minifies and validates our JavaScript, stylesheet  and dotless files. It also auto-updates T4 and T4MVC templates. One problem though is getting to install chirpy didn’t work out smoothly with the Nuget install command.&lt;/p>
&lt;p>The below was the steps taken for a successful installation:&lt;/p>
&lt;ol>
&lt;li>First get Chocolatey by using the following command from your command prompt&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-powershell" data-lang="powershell">&lt;span style="color:#111">@powershell&lt;/span> &lt;span style="color:#111">-NoProfile&lt;/span> &lt;span style="color:#111">-ExecutionPolicy&lt;/span> &lt;span style="color:#111">unrestricted&lt;/span> &lt;span style="color:#111">-Command&lt;/span> &lt;span style="color:#d88200">&amp;#34;iex ((new-object net.webclient).DownloadString(&amp;#39;http://bit.ly/psChocInstall&amp;#39;))&amp;#34;&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>for alternate options to install Chocolatey please refer to their &lt;a href="https://github.com/chocolatey/chocolatey/wiki/Installation">Chocolatey wiki page on installation&lt;/a>.&lt;/p>
&lt;ol start="2">
&lt;li>Install Chirpy through Chocolatey&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">cinst ChirpyVSI
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;ol start="3">
&lt;li>Once Chirpy has completed installation, by default it wouldn’t be available for VS2011. So, we would need to copy the AddIn and the related dll files from&lt;/li>
&lt;/ol>
&lt;p>&lt;code>[My Documents]\Visual Studio 2010\Addins&lt;/code>&lt;/p>
&lt;p>to&lt;/p>
&lt;p>&lt;code>[My Documents]\Visual Studio 11\AddIns&lt;/code>&lt;/p>
&lt;ol start="4">
&lt;li>
&lt;p>Finally, edit Zippy.AddIn in a text editor and change value of the node Version to 11.0&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Finally make sure the AddIn is enabled in your Visual Studio AddIn Manager and you are all set to use Chirpy to the fullest.&lt;/p>
&lt;/li>
&lt;/ol></description></item><item><title>Contact Me</title><link>/contact/</link><pubDate>Mon, 06 Feb 2012 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/contact/</guid><description>&lt;form name="contact" action="https://usebasin.com/f/ea460fa9492a" method="POST">
&lt;p>
&lt;label>Your Name: &lt;input type="text" name="name">&lt;/label>
&lt;/p>
&lt;p>
&lt;label>Your Email: &lt;input type="email" name="email">&lt;/label>
&lt;/p>
&lt;p>
&lt;label>Message: &lt;textarea name="message">&lt;/textarea>&lt;/label>
&lt;/p>
&lt;input type="hidden" name="contact_name" />
&lt;p>
&lt;button type="submit">Send&lt;/button>
&lt;/p>
&lt;/form></description></item><item><title>Dotnet developers reference to Xcode, iOS, iPhone development</title><link>/2012/02/dotnet-developers-reference-to-xcode-ios-iphone-development/</link><pubDate>Sun, 05 Feb 2012 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2012/02/dotnet-developers-reference-to-xcode-ios-iphone-development/</guid><description>&lt;p>Been working on an iPhone app for our organization, and being a full-time DotNet based developer working on Xcode and iOS development had its quirks. I am documenting my experience on the first few runs so that others can benefit on the same.&lt;/p>
&lt;h2 id="adding-existing-project-to-a-local-git-repository">Adding existing project to a local GIT repository&lt;/h2>
&lt;p>Terminal to the folder where the root of the project is and give the following commands&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-shell" data-lang="shell">git init
git add .
git commit -m &lt;span style="color:#d88200">&amp;#34;Initial Commit&amp;#34;&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Tip from &lt;a href="http://ashfurrow.com/2011/03/how-to-create-git-repos-for-existing-xcode-projects/">http://ashfurrow.com/2011/03/how-to-create-git-repos-for-existing-xcode-projects/&lt;/a>&lt;/p>
&lt;h2 id="setting-conditional-breakpoints-in-xcode">Setting conditional breakpoints in Xcode&lt;/h2>
&lt;p>Add a normal breakpoint and then &lt;code>Ctrl+Click&lt;/code> on the breakpoint and select &lt;code>Edit Breakpoint&lt;/code>. Here you can give the condition under which the breakpoint activates.&lt;/p>
&lt;p>Tip from &lt;a href="http://stackoverflow.com/questions/988621/how-to-set-a-conditional-breakpoint-in-xcode-based-on-an-object-string-property/989815#989815">http://stackoverflow.com/a/989815&lt;/a>&lt;/p>
&lt;h2 id="stepping-through-code">Stepping through code&lt;/h2>
&lt;p>Once you have hit the breakpoint, to step through the code find the controllers in the debug area (normally next to the output window). This area would have the buttons for &lt;code>Continue&lt;/code>,&lt;code>Step over&lt;/code>,&lt;code>Step into&lt;/code>, &lt;code>Step out&lt;/code>.&lt;/p>
&lt;h2 id="remove-all-breakpoints-in-xcode">Remove all breakpoints in Xcode&lt;/h2>
&lt;p>Well there&amp;rsquo;s a two-step way:&lt;/p>
&lt;ol>
&lt;li>Press CMD(⌘)+ALT+B to show all breakpoints. UPDATE:In Xcode4 pres CMD(⌘)+6&lt;/li>
&lt;li>Select all breakpoints and delete them, like deleting text, with backspace.&lt;/li>
&lt;/ol>
&lt;p>Tip from &lt;a href="http://stackoverflow.com/questions/1665744/xcode-remove-all-breakpoints/1665772#1665772">http://stackoverflow.com/a/1665772&lt;/a>&lt;/p>
&lt;p>Planning to update this post as I keep discovering new ways of doing old things, do keep checking back.&lt;/p></description></item><item><title>Notable freeware lists</title><link>/2012/01/notable-freeware-lists/</link><pubDate>Tue, 31 Jan 2012 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2012/01/notable-freeware-lists/</guid><description>&lt;p>Some of the best freeware lists for your needs:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="http://www.techsupportalert.com/" title="Gizmos freeware reviews" target="_blank">Gizmos freeware reviews&lt;/a>: Provides useful comparison of various freeware tools sorted by reviewers rating.&lt;/li>
&lt;li>MakeUseOf – &lt;a href="http://www.makeuseof.com/pages/best-windows-software" title="MAKEUSEOF - Best Windows Software" target="_blank">Windows&lt;/a>, &lt;a href="http://www.makeuseof.com/pages/best-linux-software" title="Best Linux Software" target="_blank">Linux&lt;/a>, &lt;a href="http://www.makeuseof.com/pages/best-mac-apps" title="Best Mac Apps" target="_blank">Mac&lt;/a>: Another great collection of useful software (not necessarily freeware). Do check out their site for other categories like Android, iPhone, iPhone and such&lt;/li>
&lt;li>&lt;a href="http://www.addictivetips.com/" title="Addictive tips" target="_blank">Addictivetips&lt;/a>: A great blog with information related to useful software and tweaks.&lt;/li>
&lt;/ul></description></item><item><title>Email validation using regex</title><link>/2012/01/email-validation-using-regex/</link><pubDate>Mon, 30 Jan 2012 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2012/01/email-validation-using-regex/</guid><description>&lt;p>I believe using regular expression is a very bad idea for validating an email address. The main issue seems to stem from the fact that regex is primitive tool to validate the complexity in email grammar, as specified in &lt;a href="http://www.ietf.org/rfc/rfc5322.txt" target="_blank">RFC 5322&lt;/a>.&lt;/p>
&lt;p>Recently I tried registering for an account at the RTA mobile site at &lt;a title="http://www.mpark.rta.ae" href="http://www.mpark.rta.ae" target="_blank">&lt;a href="http://www.mpark.rta.ae">http://www.mpark.rta.ae&lt;/a>&lt;/a>, all went fine except for the fact that my valid email account which I have been using since 2006 is not recognized as a valid one.&lt;/p>
&lt;p>&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="RTA" src="/wp-content/uploads/2012/07/RTA.png" alt="RTA Registration Form" width="544" height="414" border="0" />&lt;/p>
&lt;p>I tried to find out the mechanism they are using to validate the mail, and as expected it was based on a regular expression located &lt;a title="RTA Common JavaScript page" href="http://www.mpark.rta.ae/js/common.js" target="_blank">as part of their script repo.&lt;/a> The script we are interested is located in a JavaScript function called &lt;code>isValidEmail&lt;/code> which goes in the following way:&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">5
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-javascript" data-lang="javascript">&lt;span style="color:#00a8c8">function&lt;/span> &lt;span style="color:#75af00">isValidEmail&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#75af00">str&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#75715e">//var re=/^.+@.+..+$/;
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#00a8c8">var&lt;/span> &lt;span style="color:#75af00">re&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#d88200">/^w+([.-]?w+)*@w+([.-]?w+)*(.w{2,3})+$/&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#00a8c8">return&lt;/span> &lt;span style="color:#75af00">re&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#75af00">test&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#75af00">str&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>As it is visible from the above code the regex used will not validate my 4 letter TLD. This is a bad practice and if you are a client facing website, it will sure put off potential clients.&lt;/p>
&lt;p>For the RTA site, I simply set a break-point on the return statement and reassigned the variable &lt;code>re&lt;/code> to &lt;code>/./&lt;/code>, this allowed me to bypass that validation and proceed with the registration.&lt;/p></description></item><item><title>Life</title><link>/2012/01/life/</link><pubDate>Sun, 29 Jan 2012 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2012/01/life/</guid><description>&lt;p>&lt;em>Life, is to remember and let go…&lt;/em>&lt;/p>
&lt;p>~Lost&lt;/p></description></item><item><title>Exchange OWA Single Sign On</title><link>/2011/11/exchange-owa-single-sign-on/</link><pubDate>Tue, 22 Nov 2011 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2011/11/exchange-owa-single-sign-on/</guid><description>&lt;p>Had my 2 hours locked on this one issue and wanted to note it down for future / others reference. Back at work we are currently planning to roll out Exchange 2010 and part of the migration includes branding of the web login page of the Exchange (OWA).&lt;/p>
&lt;p>Started off with replicating all the form fields set as hidden input types and did a post to &lt;code>/owa/auth/owaauth.dll&lt;/code>. This worked fine for logging users who had mailboxes in Exchange 2010, but when a user whose mailbox were still residing on the legacy (Exchange 2007) system tried logging in it simply redirected the user to legacy OWA’s login screen.  It is worth to note that the original logon screen which came with OWA had no such issues and were seamlessly allowing users of both mailbox types to login without any issue.&lt;/p>
&lt;p>After troubleshooting it for over an hour, fiddler helped me in identifying the issue. The post done by the original logon page had a cookie &lt;code>PBack=0&lt;/code> whereas my custom logon did not. Setting this cookie to be served up by the login page solved the issue and my day was saved.&lt;/p></description></item><item><title>Opening “Computer” or drive list screen by default in Windows 7</title><link>/2011/06/opening-computer-or-drive-list-screen-by-default-in-windows-7/</link><pubDate>Tue, 28 Jun 2011 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2011/06/opening-computer-or-drive-list-screen-by-default-in-windows-7/</guid><description>&lt;p>If you are looking for making Windows 7 open the list of drives screens (“Computer” or “My Computer”) change the shortcut command to&lt;/p>
&lt;p>&lt;code>%windir%\explorer.exe /e,::{20d04fe0-3aea-1069-a2d8-08002b30309d}&lt;/code>&lt;/p></description></item><item><title>Taming the Google Search and IE search provider</title><link>/2010/06/taming-the-google-search-and-ie-search-provider/</link><pubDate>Mon, 14 Jun 2010 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2010/06/taming-the-google-search-and-ie-search-provider/</guid><description>&lt;p>I really hate Google search service on one issue, the main search page by default chooses the language of the country of request origin. If Google had to proactively guess the language of my choice, they would have better used the “Language Preference” that I have set in the browser, but instead they blindly stuff everybody up with the language of the country of the requests origin.&lt;/p>
&lt;p>For this reason I have set my home page to &lt;a href="https://www.google.com/ncr">https://www.google.com/ncr&lt;/a> which opts-out the ultra smart Google logic of throwing you onto the local countries locale search page. I believe NCR stands for No Country Redirect, but that expansion was not from an official channel.&lt;/p>
&lt;p>This is more painful when you are searching the web using browsers inbuilt “Search Providers”. The user is simply thrown into the result page that is based on the foreign language, and clicking on the Google logo takes you to the main page with all your search result discarded into the void.&lt;/p>
&lt;p>For Firefox, Opera and Chrome it was easy for me to customize the “Search Provider” through the built-in interface of the browsers, but on IE 8 there is no option to edit the exiting “Search Providers” (you can add, remove, enable, disable, move up, move down, but no Sir you cannot edit it!).&lt;/p>
&lt;p>Fed-up with this restriction I went around the net to find the location where IE stored its Search Providers list and &lt;a href="http://blog.stevienova.com/2006/11/07/ie7-adding-default-search-provider-through-the-windows-registry/" target="_blank">came across this blog post&lt;/a> which described how to add default search providers by directly making entries in the registry.&lt;/p>
&lt;p>It turns out the repository for all search providers for IE is located at&lt;/p>
&lt;p>&lt;code>[HKEY_CURRENT_USER\Software\MicrosoftInternet Explorer\SearchScopes]&lt;/code>&lt;/p>
&lt;p>so, I edited my existing entry for Google’s provider from&lt;/p>
&lt;p>&lt;code>http://www.google.com/search?q={searchTerms}&amp;amp;sourceid=ie7&amp;amp;rls=com.microsoft:{language}:{referrer:source}&amp;amp;ie={inputEncoding?}&amp;amp;oe={outputEncoding?}&lt;/code>&lt;/p>
&lt;p>to&lt;/p>
&lt;p>&lt;code>http://www.google.com/search?hl=en&amp;amp;num=50&amp;amp;q={searchTerms}&amp;amp;sourceid=ie7&amp;amp;rls=com.microsoft:{language}:{referrer:source}&amp;amp;ie={inputEncoding?}&amp;amp;oe={outputEncoding?}&amp;amp;safeSearch=false&amp;amp;safe=images&amp;amp;newwindow=1&amp;amp;gl=us&lt;/code>&lt;/p>
&lt;p>Now it stills returns me the results from the local data centre, but at least the interface is in English and I get to have 50 results in one go and results are set to open in new window and that&amp;rsquo;s neat!&lt;/p>
&lt;p>&lt;strong>References&lt;/strong>:&lt;/p>
&lt;p>&lt;a href="http://blog.stevienova.com/2006/11/07/ie7-adding-default-search-provider-through-the-windows-registry/">Steve Novoselac&lt;/a> for providing with the registry location details of IE’s search providers&lt;/p>
&lt;p>&lt;a href="https://developers.google.com/search-appliance/documentation/614/xml_reference">Google Search Protocol Reference&lt;/a>&lt;/p>
&lt;p>&lt;a href="http://www.seomoz.org/ugc/the-ultimate-guide-to-the-google-search-parameters">Peter “TCSM” Wailes&lt;/a> for Google search parameter debunking&lt;/p>
&lt;p>Cheers!&lt;/p></description></item><item><title>DVCS it is!</title><link>/2010/04/dvcs-it-is/</link><pubDate>Mon, 26 Apr 2010 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2010/04/dvcs-it-is/</guid><description>&lt;p>After &lt;a href="http://www.codeplex.com/" target="_blank">CodePlex&lt;/a> announced that they are supporting Mercurial, I have been seeing a lot about it on the net. In the following months I am slowly planning to switch over to Mercurial from my existing system. Below are few links that I found useful in understanding and evaluating Mercurial:&lt;/p>
&lt;p>&lt;a href="http://www.fogcreek.com/" target="_blank">Fog Creek&lt;/a> has released a source control system named &lt;a href="http://www.fogcreek.com/Kiln/" target="_blank">Kiln&lt;/a> based on Mercurial, and &lt;a href="http://www.joelonsoftware.com/" target="_blank">Joel Spolsky&lt;/a> has posted a &lt;a href="http://hginit.com/" target="_blank">very nice tutorial / introduction to Mercurial&lt;/a>.&lt;/p>
&lt;p>TekPub has published an &lt;a href="http://tekpub.com/codeplex/" target="_blank">introductory video on using Mercurial&lt;/a> along with CodePlex.&lt;/p>
&lt;p>Get one of the following Visual Studio plug-ins for using Mercurial as your source control system&lt;/p>
&lt;p>&lt;a href="http://visualhg.codeplex.com/" target="_blank">Visual HG&lt;/a>&lt;/p>
&lt;p>&lt;a href="http://www.newsupaplex.pp.ru/hgscc_news_eng.html" target="_blank">Mercurial SCC&lt;/a>&lt;/p>
&lt;p>I am also starting off with an open source project for a remote service administration requirement at the institute I work, for which details will be provided in the short future.&lt;/p>
&lt;p>Happy DVCSing! 👍&lt;/p></description></item><item><title>Digging into old components through MSIL</title><link>/2010/04/digging-into-old-components-through-msil/</link><pubDate>Thu, 22 Apr 2010 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2010/04/digging-into-old-components-through-msil/</guid><description>&lt;p>Yesterday and today I had to deal with an old component who’s source code has already been ported from .net framework v1.1 to v3.5 (most of them rewritten from scratch). This asp.net based component was working fine till sometime last week and then suddenly started throwing up exceptions. Due to some legacy dependencies the web app had to be run in v1.1 and I do not have VS2003 with me.&lt;/p>
&lt;p>The old architecture worked in a manner where a particular variable was passed from web app 1 to web app 2 through query string and the web app 2’s initial page stored that variable as a session variable for the rest of its pages to use them.So, when we were going through the initial steps of debugging the issue we figured out that a session stored variable was not getting passed to a stored procedure, and further investigation showed that for some odd reasons the session was getting expired and taking all the session stored variables into the oblivion along with it.&lt;/p>
&lt;p>In order to get the application up and running in the shortest time, all we needed to do was change the stored procedure value to be taken from query string instead of the session variable. But since I didn’t have the means to recompile the source code into its own framework v1.1 form, I thought the best option would be to find tools which would allow me to just change the IL directly on the assembly.&lt;/p>
&lt;p>After researching a while I found 2 great tools for it (apart from the ildasm / ilasm tools of the visual studio’s tool chest):&lt;/p>
&lt;ol>
&lt;li>&lt;a href="http://sourceforge.net/projects/dile/" target="_blank">Dotnet IL Editor&lt;/a>&lt;/li>
&lt;li>&lt;a href="http://sebastien.lebreton.free.fr/reflexil/" target="_blank">RelexIL Addon for Reflector&lt;/a>&lt;/li>
&lt;/ol>
&lt;p>Since I am not a pro on MSIL editing, I choose to go with the ReflexIL add-on for Reflector. After adding the add-on to the Reflector, I was able to locate the area that needed modification and carry out the changes.&lt;/p>
&lt;p>Cheers to &lt;a href="http://evain.net/blog/" target="_blank">Jb Evain&lt;/a> for the &lt;a href="http://www.mono-project.com/Cecil" target="_blank">Mono.Cecil&lt;/a> and Sebastien Lebreton for the &lt;a href="http://sebastien.lebreton.free.fr/reflexil/" target="_blank">ReflexIL&lt;/a>!&lt;/p></description></item><item><title>Auto-starting MS OneNote in minimized mode</title><link>/2010/03/auto-starting-ms-onenote-in-minimized-mode/</link><pubDate>Wed, 10 Mar 2010 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2010/03/auto-starting-ms-onenote-in-minimized-mode/</guid><description>&lt;p>This Microsoft help page is of no use – &lt;a href="http://office.microsoft.com/en-us/onenote/HA101778331033.aspx" target="_blank">Command-line switches in Microsoft Office OneNote 2007 – OneNote – Microsoft Office Online&lt;/a>&lt;/p>
&lt;p>Instead use:&lt;/p>
&lt;p>&lt;code>&amp;quot;%PROGRAMFILES%\Microsoft Office\Office12\ONENOTEM.EXE&amp;quot; /tsr&lt;/code>&lt;/p>
&lt;p>Have a nice day!&lt;/p></description></item><item><title>Google public DNS servers</title><link>/2009/12/google-public-dns-servers/</link><pubDate>Sun, 13 Dec 2009 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2009/12/google-public-dns-servers/</guid><description>&lt;p>This is nice! When you are trying to increasing every possible way of speeding up your browsing speed, DNS servers are also a vital area to focus. I have so far used &lt;a href="http://www.opendns.com/" target="_blank">OpenDNS&lt;/a>, but there had been few privacy concerns with them. Now with &lt;a href="http://code.google.com/speed/public-dns/docs/intro.html" target="_blank">Google providing public DNS service&lt;/a> I hope its going to be all good.&lt;/p>
&lt;p>Make use of Google’s public DNS by setting primary / secondary DNS server IP’s to:&lt;/p>
&lt;p>8.8.8.8&lt;/p>
&lt;p>and&lt;/p>
&lt;p>8.8.4.4&lt;/p>
&lt;p>Good day! 👍&lt;/p></description></item><item><title>Life…</title><link>/2009/10/life-2/</link><pubDate>Fri, 30 Oct 2009 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2009/10/life-2/</guid><description>&lt;p>Life is an opportunity, benefit from it.&lt;br>
Life is beauty, admire it.&lt;br>
Life is bliss, taste it.&lt;br>
Life is a dream, realize it.&lt;br>
Life is a challenge, meet it.&lt;br>
Life is a duty, complete it.&lt;br>
Life is a game, play it.&lt;br>
Life is a promise, fulfill it.&lt;br>
Life is sorrow, overcome it.&lt;br>
Life is a song, sing it.&lt;br>
Life is a struggle, accept it.&lt;br>
Life is a tragedy, confront it.&lt;br>
Life is an adventure, dare it.&lt;br>
Life is luck, make it.&lt;br>
Life is too precious, do not destroy it.&lt;br>
Life is life, fight for it.&lt;/p>
&lt;p> &lt;/p>
&lt;p>– &lt;strong>Mother Teresa&lt;/strong>&lt;/p></description></item><item><title>f.lux your system and protect your eyes</title><link>/2009/07/f-lux-your-system-and-protect-your-eyes/</link><pubDate>Tue, 28 Jul 2009 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2009/07/f-lux-your-system-and-protect-your-eyes/</guid><description>&lt;p>If you are like me who like to work at the wee hours (just because sometimes you just get those cranky workarounds and logic just about that time 😉 ) you may have noticed that the screen brightness of your laptop is too bright and painful. f.lux is a freeware application which when installed adjusts your monitor brightness and colour warmth according to the current time of the system.&lt;/p>
&lt;p> &lt;/p>
&lt;p>Give it a go at &lt;a href="http://www.stereopsis.com/flux/">http://www.stereopsis.com/flux/&lt;/a>&lt;/p></description></item><item><title>US Zip/City/County/State spatial data all ready for your SQL Server 2008… Just download, SQLCMD/import and go</title><link>/2009/04/us-zipcitycountystate-spatial-data-all-ready-for-your-sql-server-2008-just-download-sqlcmdimport-and-go/</link><pubDate>Tue, 21 Apr 2009 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2009/04/us-zipcitycountystate-spatial-data-all-ready-for-your-sql-server-2008-just-download-sqlcmdimport-and-go/</guid><description>&lt;p>This is so cool, if we could get a similar data made available for GCC my life would be so easier 😀&lt;/p>
&lt;p>[via] &lt;a href="//coolthingoftheday.blogspot.com/2009/04/us-countystate-spatial-data-all-ready.html" target="_blank">Geeks are Sexy&lt;/a>&lt;/p>
&lt;p>&lt;a href="//www.codeplex.com/">CodePlex&lt;/a> – &lt;a href="//uscdsql.codeplex.com/">US Census Data for SQL Server 2008&lt;/a>&lt;/p>
&lt;blockquote>
&lt;blockquote>
&lt;p>“&lt;strong>Project Description&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;/blockquote>
&lt;blockquote>
&lt;blockquote>
&lt;p>This is a repository for US Census Data for SQL Server 2008 with spatial information. Some of the data that is and will be included will be for states, counties, cities, and zip codes. The project will be updated as the data is available in SQL Server 2008 format.&lt;/p>
&lt;p>Please note that this tables contain geometry data types made for the “Flat Earth Model.”&lt;/p>
&lt;p>Data downloaded from &lt;a href="http://www.census.gov">www.census.gov&lt;/a> and imported using the SQL Server 2008 Spatial Tools (&lt;a href="http://www.sharpgis.net/page/SQL-Server-2008-Spatial-Tools.aspx%3E">www.sharpgis.net/page/SQL-Server-2008-Spatial-Tools.aspx&amp;gt;&lt;/a>) by Morten Nielsen&lt;/p>
&lt;p>…&lt;/p>
&lt;p>&lt;a href="//uscdsql.codeplex.com/">&lt;img title="Florida" src="https://i2.wp.com/lh3.ggpht.com/_5YF7KQZuZS0/Set496H8kiI/AAAAAAAABeg/i5u8nStGNKY/Florida%5B3%5D.jpg?resize=520%2C349" alt="Florida" border="0" data-recalc-dims="1" />&lt;/a>&lt;/p>
&lt;p>&lt;a href="//uscdsql.codeplex.com/">&lt;img title="FloridaCounties" src="https://i1.wp.com/lh6.ggpht.com/_5YF7KQZuZS0/Set4-HJSVVI/AAAAAAAABek/KECECbyDf-4/FloridaCounties%5B3%5D.jpg?resize=520%2C359" alt="FloridaCounties" border="0" data-recalc-dims="1" />&lt;/a> ”&lt;/p>
&lt;p>…”&lt;/p>
&lt;/blockquote>
&lt;p>&lt;a href="//uscdsql.codeplex.com/">US Census Data for SQL Server 2008&lt;/a> – &lt;a href="//uscdsql.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=26308">State and County Table&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>“…&lt;/p>
&lt;p>&lt;a href="//uscdsql.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=26308#DownloadId=65892">State Table&lt;/a>&lt;/p>
&lt;/blockquote>
&lt;/blockquote>
&lt;blockquote>
&lt;blockquote>
&lt;p>source code, 1785K, uploaded Today&lt;abbr>&lt;/abbr> …&lt;/p>
&lt;p>&lt;a href="//uscdsql.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=26308#DownloadId=65893">County Table&lt;/a>&lt;/p>
&lt;/blockquote>
&lt;/blockquote>
&lt;blockquote>
&lt;blockquote>
&lt;p>source code, 14132K, uploaded Sat&lt;abbr>&lt;/abbr> …&lt;/p>
&lt;p>Release Notes&lt;/p>
&lt;p>The State and County Table are based on the 2000 Census Data and was normalized to the best of my knowledge. Please note that the the County table requires the State table. Both scripts contain the create and insert of the data.&lt;/p>
&lt;p>The State geometry was derived by grouping all of the counties of each state using the User Defined Function found here: &amp;lt;conceptdev.blogspot.com/2007/12/sql-server-2008-geometry-stunion.html&amp;gt;&lt;/p>
&lt;p>…”&lt;/p>
&lt;/blockquote>
&lt;p>&lt;a href="//uscdsql.codeplex.com/">US Census Data for SQL Server 2008&lt;/a> – &lt;a href="//uscdsql.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=26397">Version 0.0.1.0&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>“…&lt;/p>
&lt;p>&lt;a href="//uscdsql.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=26397#DownloadId=66068">State&lt;/a>&lt;/p>
&lt;/blockquote>
&lt;/blockquote>
&lt;blockquote>
&lt;blockquote>
&lt;p>source code, 1528K, uploaded Today – …&lt;/p>
&lt;p>&lt;a href="//uscdsql.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=26397#DownloadId=66069">County&lt;/a>&lt;/p>
&lt;/blockquote>
&lt;/blockquote>
&lt;blockquote>
&lt;blockquote>
&lt;p>source code, 7148K, uploaded Today -…&lt;/p>
&lt;p>&lt;a href="//uscdsql.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=26397#DownloadId=66070">City&lt;/a>&lt;/p>
&lt;/blockquote>
&lt;/blockquote>
&lt;blockquote>
&lt;blockquote>
&lt;p>source code, 12258K, uploaded Today – …&lt;/p>
&lt;p>&lt;a href="//uscdsql.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=26397#DownloadId=66071">ZipCode&lt;/a>&lt;/p>
&lt;/blockquote>
&lt;/blockquote>
&lt;blockquote>
&lt;blockquote>
&lt;p>source code, 42531K, uploaded Today – …&lt;/p>
&lt;/blockquote>
&lt;/blockquote>
&lt;blockquote>
&lt;blockquote>
&lt;p>**Release&lt;/p>
&lt;/blockquote>
&lt;/blockquote>
&lt;blockquote>
&lt;blockquote>
&lt;p>Notes**&lt;/p>
&lt;/blockquote>
&lt;/blockquote>
&lt;blockquote>
&lt;blockquote>
&lt;p>Changes:&lt;/p>
&lt;/blockquote>
&lt;/blockquote>
&lt;blockquote>
&lt;blockquote>
&lt;p>Added the ZipCode table&lt;/p>
&lt;/blockquote>
&lt;/blockquote>
&lt;blockquote>
&lt;blockquote>
&lt;p>Modified all scripts&lt;/p>
&lt;/blockquote>
&lt;/blockquote>
&lt;blockquote>
&lt;blockquote>
&lt;p>to include the spatial index&lt;/p>
&lt;/blockquote>
&lt;/blockquote>
&lt;blockquote>
&lt;blockquote>
&lt;p>Compressed the files to a rar to make the files&lt;/p>
&lt;/blockquote>
&lt;/blockquote>
&lt;blockquote>
&lt;blockquote>
&lt;p>smaller#&lt;/p>
&lt;p>…”&lt;/p>
&lt;/blockquote>
&lt;p>A number of the &lt;a href="//coolthingoftheday.blogspot.com/2008/02/my-castroll-list-of-webcasts-on-my-zune.html">podcasts I listen&lt;/a> to have been covering SQL Server 2008’s spatial data type, so when I saw this I knew I had capture the data and mention it…&lt;/p>
&lt;p>&lt;strong>Update 4/20/2009 @ 7:15am:&lt;/strong>&lt;/p>
&lt;p>There&amp;rsquo;s now a &lt;a href="//uscdsql.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=26308#DownloadId=66022">City&lt;/a> table/download (21860K) too… 😉&lt;/p>
&lt;p>&lt;strong>Update 4/20/2009 @ 4:20PM:&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;p>Added 0.0.1.0 block, which includes &lt;a href="//uscdsql.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=26397#DownloadId=66071">ZipCode&lt;/a> data!&lt;/p>
&lt;p>&lt;img src="//feeds2.feedburner.com/~r/coolthingoftheday/~4/Lg29r934lH4" alt="" width="1" height="1" />&lt;/p>
&lt;/blockquote>
&lt;p>&lt;a href="//coolthingoftheday.blogspot.com/2009/04/us-countystate-spatial-data-all-ready.html">US Zip/City/County/State spatial data all ready for your SQL Server 2008… Just download, SQLCMD/import and go&lt;/a>&lt;/p></description></item><item><title>If – Rudyard Kipling</title><link>/2009/02/if-rudyard-kipling/</link><pubDate>Fri, 27 Feb 2009 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2009/02/if-rudyard-kipling/</guid><description>&lt;p>Every sentence is a gem…&lt;/p>
&lt;hr>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe src="https://player.vimeo.com/video/1305608" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="vimeo video" webkitallowfullscreen mozallowfullscreen allowfullscreen>&lt;/iframe>
&lt;/div>
&lt;p>If you can keep your head when all about you&lt;br>
Are losing theirs and blaming it on you;&lt;br>
If you can trust yourself when all men doubt you,&lt;br>
But make allowance for their doubting too;&lt;br>
If you can wait and not be tired by waiting,&lt;br>
Or, being lied about, don&amp;rsquo;t deal in lies,&lt;br>
Or, being hated, don&amp;rsquo;t give way to hating,&lt;br>
And yet don&amp;rsquo;t look too good, nor talk too wise;&lt;/p>
&lt;p>If you can dream - and not make dreams your master;&lt;br>
If you can think - and not make thoughts your aim;&lt;br>
If you can meet with triumph and disaster&lt;br>
And treat those two imposters just the same;&lt;br>
If you can bear to hear the truth you&amp;rsquo;ve spoken&lt;br>
Twisted by knaves to make a trap for fools,&lt;br>
Or watch the things you gave your life to broken,&lt;br>
And stoop and build &amp;lsquo;em up with wornout tools;&lt;/p>
&lt;p>If you can make one heap of all your winnings&lt;br>
And risk it on one turn of pitch-and-toss,&lt;br>
And lose, and start again at your beginnings&lt;br>
And never breath a word about your loss;&lt;br>
If you can force your heart and nerve and sinew&lt;br>
To serve your turn long after they are gone,&lt;br>
And so hold on when there is nothing in you&lt;br>
Except the Will which says to them: Hold on;&lt;/p>
&lt;p>If you can talk with crowds and keep your virtue,&lt;br>
Or walk with kings - nor lose the common touch;&lt;br>
If neither foes nor loving friends can hurt you;&lt;br>
If all men count with you, but none too much;&lt;br>
If you can fill the unforgiving minute&lt;br>
With sixty seconds&amp;rsquo; worth of distance run -&lt;br>
Yours is the Earth and everything that&amp;rsquo;s in it,&lt;br>
And - which is more - you&amp;rsquo;ll be a Man my son!&lt;/p></description></item><item><title>Congrats!</title><link>/2009/02/congrats/</link><pubDate>Mon, 23 Feb 2009 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2009/02/congrats/</guid><description>&lt;p>It was long over due recognition 😀&lt;/p>
&lt;p>Best Original Song: A.R.Rahman for Jai…Ho&lt;/p>
&lt;p>Best Original Score: A.R.Rahman&lt;/p>
&lt;p>&lt;img src="/wp-content/uploads/2012/07/ARR.jpg" alt="ARR">&lt;/p>
&lt;p>எல்லா புகழும் இறைவனுக்கே! (All the praises / credits to God)&lt;/p></description></item><item><title>Connecting to Remote IBM WebSphere MQ Server</title><link>/2008/05/connecting-to-remote-ibm-websphere-mq-server/</link><pubDate>Tue, 13 May 2008 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2008/05/connecting-to-remote-ibm-websphere-mq-server/</guid><description>&lt;p>The below post will provide a &lt;code>hello world&lt;/code> kind of introduction to connecting to a remote IBM WebSphere Message Queue server using client application written in C#.&lt;/p>
&lt;p>Points to note:&lt;/p>
&lt;ul>
&lt;li>Server and client should have a common OS login name. The passwords can be different between the server and client, what matters is that the login name should be identical.&lt;/li>
&lt;li>The login name you have selected to use should be part of the MQM group on the MQ server, or it should be explicitly given permission for querying the Queue manager and the queue.&lt;/li>
&lt;li>I have come across code on the web where they have mentioned how to connect to MQ server even with a different OS login name from the client side by explicitly setting the login and password onto the MQEnviroment class static properties, but it has not worked for me till now. So, my example code would be assuming that there is an identical login name between the client and server.&lt;/li>
&lt;li>Make a note of the Server-connection channel name (case sensitive), queue manager name (case sensitive), queue name (case sensitive) from the server side.&lt;/li>
&lt;li>You would need to install at the least the client package of MQ onto the client machine, the client code would be using the library from this installation to connect to the server.&lt;/li>
&lt;li>A reference to amqmdnet.dll would have to be added to the client project, its located in &lt;MQ Installation Path>binamqmdnet.dll&lt;/li>
&lt;/ul>
&lt;p> &lt;/p>
&lt;p>Now for the code&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">17
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">18
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">19
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">20
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">21
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">22
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">23
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">24
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">25
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">26
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">27
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">28
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">29
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">30
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">31
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">32
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">33
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-csharp" data-lang="csharp">&lt;span style="color:#00a8c8">using&lt;/span> &lt;span style="color:#111">System&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#00a8c8">using&lt;/span> &lt;span style="color:#111">System.Collections.Generic&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#00a8c8">using&lt;/span> &lt;span style="color:#111">System.Text&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#00a8c8">using&lt;/span> &lt;span style="color:#111">IBM.WMQ&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#00a8c8">namespace&lt;/span> &lt;span style="color:#111">RemoteMQTest&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#00a8c8">class&lt;/span> &lt;span style="color:#75af00">Test01&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#00a8c8">static&lt;/span> &lt;span style="color:#00a8c8">void&lt;/span> &lt;span style="color:#111">Main&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#00a8c8">string&lt;/span>&lt;span style="color:#111">[]&lt;/span> &lt;span style="color:#111">args&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#111">MQEnvironment&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Hostname&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#d88200">&amp;#34;My_Server&amp;#34;&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#111">MQEnvironment&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Channel&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#d88200">&amp;#34;My_Channel&amp;#34;&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#00a8c8">string&lt;/span> &lt;span style="color:#111">mqQueueManagerName&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#d88200">&amp;#34;My_Q_Manager&amp;#34;&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#00a8c8">string&lt;/span> &lt;span style="color:#111">mqQueueName&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#d88200">&amp;#34;My_Queue&amp;#34;&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#00a8c8">int&lt;/span> &lt;span style="color:#111">openOptions&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#111">MQC&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">MQOO_INPUT_AS_Q_DEF&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#111">MQQueueManager&lt;/span> &lt;span style="color:#111">qMgr&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#00a8c8">new&lt;/span> &lt;span style="color:#111">MQQueueManager&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">mqQueueManagerName&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#111">MQQueue&lt;/span> &lt;span style="color:#111">q&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#111">qMgr&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">AccessQueue&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">mqQueueName&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">openOptions&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#111">MQMessage&lt;/span> &lt;span style="color:#111">message&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#00a8c8">new&lt;/span> &lt;span style="color:#111">MQMessage&lt;/span>&lt;span style="color:#111">();&lt;/span>
&lt;span style="color:#111">message&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Version&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#ae81ff">2&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#111">q&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Get&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">message&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#111">Console&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">WriteLine&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;I got the message : {0}&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">message&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">ReadString&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">message&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">DataLength&lt;/span>&lt;span style="color:#111">));&lt;/span>
&lt;span style="color:#111">message&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Seek&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#111">q&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Close&lt;/span>&lt;span style="color:#111">();&lt;/span>
&lt;span style="color:#111">qMgr&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Close&lt;/span>&lt;span style="color:#111">();&lt;/span>
&lt;span style="color:#111">Console&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">WriteLine&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;done!&amp;#34;&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Note that in line 25, we are explicitly making the message to seek back to 0th byte.&lt;/p>
&lt;p>Happy coding!&lt;/p></description></item><item><title>User Interface Prototyping with Powerpoint</title><link>/2008/04/user-interface-prototyping-with-powerpoint/</link><pubDate>Tue, 29 Apr 2008 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2008/04/user-interface-prototyping-with-powerpoint/</guid><description>&lt;p>In the hunt for improving my development methodologies and techniques I recently came across on the concept of using Powerpoint for prototyping the user interface of the application that&amp;rsquo;s yet to be developed. It is quite an interesting concept, apart from getting a look into the idea &lt;a href="http://www.istartedsomething.com/20071018/powerpoint-prototype-toolkit-01/">Long Zheng has provided a template package in  Powerpoint&lt;/a> which can be used for designing such prototypes.&lt;/p>
&lt;p>I am already loving this idea and planning to use from the current development cycle.&lt;/p></description></item><item><title>Essential Tools – Part 2</title><link>/2008/04/essential-tools-part-2/</link><pubDate>Fri, 11 Apr 2008 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2008/04/essential-tools-part-2/</guid><description>&lt;p>Okies, carrying on with the series we will look into expanding on the &lt;a href="/2008/04/Essential-Tools-Part-1">Essential tools – part 1&lt;/a>:&lt;/p>
&lt;h3 id="a-hrefhttptoolstortoisesvnnetstexbarhtml-target_blankstexbara-freeware--open-source">&lt;a href="http://tools.tortoisesvn.net/StExBar.html" target="_blank">StExBar&lt;/a> (Freeware / Open source)&lt;/h3>
&lt;p>&lt;a href="http://tools.tortoisesvn.net/StExBar.html" target="_blank">&lt;img src="/wp-content/uploads/2012/07/StExBar.png" />&lt;/a>&lt;/p>
&lt;p>StExBar is a plug-in for the Windows Explorer, which adds much needed functionality to the explorer / folder view. It provides many useful commands for your everyday use of Windows explorer. And you can add as many custom commands on your own as you like.&lt;/p>
&lt;table cellspacing="0" cellpadding="2" width="500" bgcolor="#ffff99" border="0">
&lt;tr>
&lt;td valign="top">
&lt;strong>From the product site :&lt;/strong>
&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td valign="top">
&lt;p>
&lt;em>Have you ever needed to open a console window while you were using the explorer? And to have that console already set to the directory you're showing in explorer right now? Well, StExBar provides that with one simple mouseclick. There's also a hotkey defined for this: simply press Ctrl-M to open the console.&lt;br />A &amp;#8216;lightweight' console is also available. Simply enter the command you like to execute into the edit box on the right of the &lt;/em>&lt;em>StExBar and hit enter. The command will be executed in the system console. &lt;/em>
&lt;/p>
&lt;pre>&lt;code> &amp;lt;p&amp;gt;
&amp;lt;em&amp;gt;Have you ever needed to have the name or full path of one or more files in another application? Ctrl-Cdoesn't work here, that won't copy the file path but the file itself. &amp;lt;/em&amp;gt;&amp;lt;em&amp;gt;StExBar comes to the rescue. It provides two commands, one to copy all selected file/&amp;lt;/em&amp;gt;&amp;lt;em&amp;gt;foldernames to the clipboard, the other copies the whole paths of all selected items. To make it even more easier to use this, a hotkey is defined Ctrl-Shift-C which copies the selected paths.&amp;lt;/em&amp;gt;
&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;
&amp;lt;em&amp;gt;&amp;amp;nbsp;&amp;lt;img src=&amp;quot;/wp-content/uploads/2012/07/StEx-newfolder.png&amp;quot; /&amp;gt;&amp;lt;/em&amp;gt;
&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;
&amp;lt;em&amp;gt;Creating new folders is a common task in explorer. But to actually do that, you have to right-click on a folder background, choose &amp;amp;#8220;New&amp;amp;#8221; from the context menu, wait until the submenu finally appears, then choose &amp;amp;#8220;Folder&amp;amp;#8221; from that submenu. Not anymore! &amp;lt;/em&amp;gt;&amp;lt;em&amp;gt;StExBar provides you the same with one easy click. Or even faster with the assigned hotkey: just press Ctrl-Shift-N and you have a new folder created in the current directory.&amp;lt;/em&amp;gt;
&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;
&amp;lt;em&amp;gt;&amp;lt;a href=&amp;quot;http://tools.tortoisesvn.net/StExBar.html&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;more info&amp;amp;#8230;&amp;lt;/a&amp;gt;&amp;lt;/em&amp;gt;
&amp;lt;/p&amp;gt;
&amp;lt;/td&amp;gt;
&lt;/code>&lt;/pre>
&lt;/tr>
&lt;tr>
&lt;td valign="top" width="400">
&amp;nbsp;
&lt;/td>
&lt;/tr>
&lt;/table>
&lt;p> &lt;/p>
&lt;p> &lt;/p>
&lt;h3 id="a-hrefhttptechnetmicrosoftcomen-ussysinternals0e18b180-9b7a-4c49-8120-c47c5a693683aspx-target_blanksysinternals-suitea-freeware">&lt;a href="http://technet.microsoft.com/en-us/sysinternals/0e18b180-9b7a-4c49-8120-c47c5a693683.aspx" target="_blank">Sysinternals Suite&lt;/a> (Freeware)&lt;/h3>
&lt;p>Occasionally Microsoft does make good moves, and one such thing is acquiring Sysinternals. They had wonderful set of tools by Mark Russinovich, and after he joined MS a suit of all Sysinternals tools have been released. It&amp;rsquo;s a windows developer / debuggers and administrators dream toolset. Head over to &lt;a href="http://technet.microsoft.com/en-us/sysinternals/0e18b180-9b7a-4c49-8120-c47c5a693683.aspx" target="_blank">Sysinternals Suite&lt;/a> page to check out all the available tools and download them to your hearts content.&lt;/p></description></item><item><title>Essential tools – Part 1</title><link>/2008/04/essential-tools-part-1/</link><pubDate>Tue, 08 Apr 2008 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2008/04/essential-tools-part-1/</guid><description>&lt;p>Our day to day life becomes a lot easier when we make use of the proper tools to help us complete the task at hand. I am planing to post in about few tools which forms an essential part of my tool chain, most are free tools but sometimes there do come in gems which makes you to take out your credit card.&lt;/p>
&lt;p>Below are the ones for today:&lt;/p>
&lt;h3 id="a-hrefhttpwwwpiriformcomccleaner-target_blankpiriform-ccleaner-crap-cleanera-freeware">&lt;a href="http://www.piriform.com/ccleaner" target="_blank">Piriform CCleaner (Crap Cleaner)&lt;/a> (Freeware)&lt;/h3>
&lt;p> &lt;/p>
&lt;p>CCleaner is a freeware system optimization and privacy tool. It removes unused files from your system – allowing Windows to run faster and freeing up valuable hard disk space. The best function I like in CCleaner is that it provides you with the list of currently installed software list, the same one you get from &lt;strong>Control Panel -&amp;gt; Add Remove Programs&lt;/strong> but a lot faster than the ‘Add Remove Programs' applet. So, if you are a developer who always likes to check out various tools and find that removing some of them from ‘Add Remove Programs' is a pain because it takes a long time to load, then I would strongly recommend this one. Apart from providing the previously mentioned function, it also provides option to clear browser cache and other MRU lists present on the system.&lt;/p>
&lt;p> &lt;/p>
&lt;h3 id="a-hrefhttpwwwesetcom-target_blankeset-nod32-anti-virusa-commercial">&lt;a href="http://www.eset.com/" target="_blank">Eset NOD32 Anti-Virus&lt;/a> (Commercial)&lt;/h3>
&lt;p>One of the few applications that I am ready to pay for, I have tried out various free and commercial options (commercial ones mainly as part of corporate subscriptions) but this one beats all of them by a mile. From my personal experience this is the best anti-virus there is todate, which does a good job of keeping the bad binaries at bay without taking up too much resource on your system.&lt;/p>
&lt;p> &lt;/p>
&lt;h3 id="a-hrefhttpwwwmirekwcomwinfreewaremwsnaphtml-target_blankmwsnapa-freeware">&lt;a href="http://www.mirekw.com/winfreeware/mwsnap.html" target="_blank">MWSnap&lt;/a> (Freeware)&lt;/h3>
&lt;p>Another gem of a software, a very light-weight application that provides screen capturing / on-screen measurement (ruler) / color picking / zoom tool. It also supports global hotkey&amp;rsquo;s which makes your life a lot easier when you want to create an online documentation.&lt;/p>
&lt;p> &lt;/p>
&lt;h3 id="a-hrefhttpsourceforgenetprojectshowfilesphpgroup_id9328-target_blankunix-and-linux-tools-for-windowsa-freeware--open-source">&lt;a href="http://sourceforge.net/project/showfiles.php?group_id=9328" target="_blank">Unix and Linux tools for Windows&lt;/a> (Freeware / Open source)&lt;/h3>
&lt;p>Are you a platform independent developer who work on both unix / linux and windows? Do you miss the powerful command line tools present in linux on windows? worry no more, you can get the following tools already ported to win32:&lt;/p>
&lt;p>bc-1.05&lt;br>
bison-1.28&lt;br>
bzip2-1.0.2&lt;br>
diffutils-2.7&lt;br>
fileutils-3.16&lt;br>
findutils-4.1&lt;br>
flex-2.5.4&lt;br>
gawk-3.1.0&lt;br>
grep-2.4.2&lt;br>
gsar110&lt;br>
gzip-1.2.4&lt;br>
indent-2.2.9&lt;br>
jwhois-2.4.1&lt;br>
less-340&lt;br>
m4-1.4&lt;br>
make-3.78.1&lt;br>
patch-2.5&lt;br>
recode-3.6&lt;br>
rman-3.0.7&lt;br>
sed-3.02&lt;br>
shellutils-1.9.4&lt;br>
tar-1.12&lt;br>
textutils-2.1&lt;br>
unrar-3.00&lt;br>
wget-1.8.2&lt;br>
which-2.4&lt;/p>
&lt;p>These are native windows binaries. so you do not need *nix simulation environment like cygwin or uwin.&lt;/p>
&lt;p>Get it from (with source) : &lt;a href="http://sourceforge.net/project/showfiles.php?group_id=9328" title="http://sourceforge.net/project/showfiles.php?group_id=9328">http://sourceforge.net/project/showfiles.php?group_id=9328&lt;/a>&lt;/p>
&lt;p> &lt;/p>
&lt;p>We will cover more in the future parts, till then bye and have a nice day!&lt;/p></description></item><item><title>Dell Optiplex 755 – The Boot CD problem</title><link>/2008/04/dell-optiplex-755-the-boot-cd-problem/</link><pubDate>Tue, 01 Apr 2008 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2008/04/dell-optiplex-755-the-boot-cd-problem/</guid><description>&lt;p>It was quite hard to get the system to get into installation mode through the windows install CD or when trying to boot from one of the PE based boot CD&amp;rsquo;s (BartPE, Ultimate Boot CD) on Dell Optiplex 755. The main culprit was the SATA harddisk and DVD drive, since the drivers for these models are not available (even after making a BartPE from the already existing Windows Installation).&lt;/p>
&lt;p>The best method to overcome the problem was change the Drive Operation settings in the BIOS to “legacy” mode, so that they show up as normal IDE drives. I guess I am feeling the drives have become bit slower now, but that&amp;rsquo;s the compromise needed to be taken in order for installing/reinstalling another version of Windows.&lt;/p></description></item><item><title>Digging Bookmarks : Understand why your computer restarted unexpectedly</title><link>/2008/01/digging-bookmarks-understand-why-your-computer-restarted-unexpectedly/</link><pubDate>Wed, 30 Jan 2008 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2008/01/digging-bookmarks-understand-why-your-computer-restarted-unexpectedly/</guid><description>&lt;blockquote>
&lt;p>&lt;strong>Update on &lt;time datetime="2020-02-25" >25 Feb 2020&lt;/time>&lt;/strong>&lt;/p>
&lt;p>The original link &lt;code>http://blogs.msdn.com/junfeng/archive/2007/03/23/understand-why-your-computer-restarted-unexpected.aspx&lt;/code> was broken (thanks &lt;a href="https://microsoft.com/">Microsoft&lt;/a>), you can read the archived content at &lt;a href="https://web.archive.org/web/20100123142227/http://blogs.msdn.com/junfeng/archive/2007/03/23/understand-why-your-computer-restarted-unexpected.aspx">archive.org&lt;/a>.&lt;/p>
&lt;p>A lot of information would have lost to the void if it were not for &lt;a href="https://archive.org/">archive.org&lt;/a>, please consider a &lt;a href="https://archive.org/donate">donation&lt;/a>.&lt;/p>
&lt;/blockquote>
&lt;p>Well, its the time of the year that I decide to actually look into all the bookmarks I make on the go when I cannot read a page in detail due to time constraints. When going through the Geek Stuff section (one of the umpteen such categories, man! this is gonna take some time to go through completely) I came across&lt;/p>
&lt;p>&lt;a href="https://web.archive.org/web/20100123142227/http://blogs.msdn.com/junfeng/archive/2007/03/23/understand-why-your-computer-restarted-unexpected.aspx" target="_blank">Junfeng Zhang&amp;rsquo;s Windows Programming Notes : Understand why your computer restarted unexpectedly&lt;/a>. It is quite a quick start article into debugging and getting dirty with the memory dump of your crashed system. Quite interesting.&lt;/p></description></item><item><title>More than the company, it’s the person</title><link>/2007/11/more-than-the-company-its-the-person/</link><pubDate>Mon, 05 Nov 2007 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2007/11/more-than-the-company-its-the-person/</guid><description>&lt;p>It&amp;rsquo;s been more than 5 years since I got my first pay check, I just took the time to think though the experience I have gone through, the people I have met and the totally unexpected twists that have popped in my life over this past years. To the most part it has been very useful and interesting journey, if not anything just for the amount of knowledge that has been acquired is still worth it. I guess I am contempt and thankful in the way I had chosen and what the life has offered.&lt;/p>
&lt;p>But, walking through the old memory lane and revisiting all the question that I had before 5 years, I think I have a very definitive answer for one question:&lt;/p>
&lt;p>What will make me continue in a company of my work? Is it the company name / package / location or job title?&lt;/p>
&lt;p>I thought I would get an answer for that within maybe 1 or 2 years, but I guess as usual my schedule estimate was bit off :). Well, about the question; in my personal opinion it is neither the company name or package or location or even the job title, but it the one person who represent the company to you. It maybe your immediate supervisor / manager, your department head, or technical advisor or the CEO. The only difference it makes to me if I continue in a company is determined by if I have a person who represents my company to me in a admirable way.&lt;/p>
&lt;p>Tell me about your criteria to continue in a company?&lt;/p></description></item><item><title>There Is No Indispensable Man</title><link>/2007/07/there-is-no-indispensable-man/</link><pubDate>Thu, 12 Jul 2007 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2007/07/there-is-no-indispensable-man/</guid><description>&lt;p>I came across this poem somewhere online and it was quite clean and simple in its message. I liked it and so posting it for future reference:&lt;/p>
&lt;p>“&lt;em>There Is No Indispensable Man&lt;/em>“&lt;br>
by Saxon N. White Kessinger, Copyright 1959&lt;/p>
&lt;p>Sometime when you&amp;rsquo;re feeling important;&lt;br>
Sometime when your ego&amp;rsquo;s in bloom&lt;br>
Sometime when you take it for granted&lt;br>
You&amp;rsquo;re the best qualified in the room,&lt;/p>
&lt;p>Sometime when you feel that your going&lt;br>
Would leave an unfillable hole,&lt;br>
Just follow these simple instructions&lt;br>
And see how they humble your soul;&lt;/p>
&lt;p>Take a bucket and fill it with water,&lt;br>
Put your hand in it up to the wrist,&lt;br>
Pull it out and the hole that&amp;rsquo;s remaining&lt;br>
Is a measure of how you will be missed.&lt;/p>
&lt;p>You can splash all you wish when you enter,&lt;br>
You may stir up the water galore,&lt;br>
But stop and you&amp;rsquo;ll find that in no time&lt;br>
It looks quite the same as before.&lt;/p>
&lt;p>The moral of this quaint example&lt;br>
Is do just the best that you can,&lt;br>
Be proud of yourself but remember,&lt;br>
There&amp;rsquo;s no indispensable man.&lt;/p></description></item><item><title>Halloween Scare : Read your own code written 5 years back</title><link>/2006/11/halloween-scare-read-your-own-code-written-5-years-back/</link><pubDate>Tue, 31 Oct 2006 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2006/11/halloween-scare-read-your-own-code-written-5-years-back/</guid><description>&lt;p>&lt;em>Here’s an excellent bit of halloween advice from&lt;/em> &lt;a href="http://www.larkware.com/dg7/TheDailyGrind1003.aspx">&lt;em>Mike Gunderloy&lt;/em>&lt;/a>&lt;em>: &lt;strong>go read some source code you wrote five years ago for a real scare.&lt;/strong>&lt;/em>&lt;/p>
&lt;p> &lt;/p>
&lt;p>Couldn’t agree more &lt;img src="https://blog.vijay.name/wp-includes/images/smilies/simple-smile.png" alt=":)" class="wp-smiley" style="height: 1em; max-height: 1em;" />&lt;/p></description></item><item><title>Outlook – Unknown Error 0×80040201 when sending emails</title><link>/2006/10/outlook-unknown-error-0x80040201-when-sending-emails/</link><pubDate>Mon, 30 Oct 2006 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2006/10/outlook-unknown-error-0x80040201-when-sending-emails/</guid><description>&lt;p>With sync with the long tradition of Microsoft, Outlook has a very annoying bug which is not fixed as of Outlook 2007 (Technical Refresh). The bug produces the error mentioned in the title of this post whenever you try sending a email with the address which was retrieved from exchange address book.&lt;/p>
&lt;p>To re-produce the error:&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Create an exchange based email account&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Try sending to few people on the exchange address list&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Eventually you will be overwhelmed by the disadvantages of Exchange over its advantages, now you remove off the exchange account and recreate the same account using the POP and SMTP option&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Now try sending to any email that you had sent before using the Exchange (which will be automatically retrieved from the Address Cache).&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Tada! you will get the above mentioned error&lt;/p>
&lt;/li>
&lt;/ol>
&lt;p>From my observation what seems to be happening is that when you sent the message initially using the ‘Exchange’ account, the message’s target emails are formatted by Outlook with some kind of format that the Exchange server is comfortable and happy. But the problem comes up when you change the email type from Exchange to POP and when you try sending email to the cached email address (Exchange type), when that happens the outlook gets an error from the SMTP server saying that the given email format is not proper and so the ‘Send’ fails.&lt;/p>
&lt;p>To solve this issue we will have to remove off the existing outlook address cache by renaming / removing the file present at &lt;strong>&lt;code>C:\Documents and Settings\%username%\Application Data\Microsoft\Outlook&lt;/code>&lt;/strong> the name of the file will be &lt;strong>&lt;code>&amp;lt;Your outlook profile&amp;gt;.nk2&lt;/code>&lt;/strong>. Once this file is renamed / removed you will have restart the outlook in order for it to take effect. And after this sending emails shouldn’t fail for the given reason.&lt;/p></description></item><item><title>Tiny Tips 4 : Adding Users in Bulk for Windows XP</title><link>/2006/10/tiny-tips-4-adding-users-in-bulk-for-windows-xp/</link><pubDate>Tue, 10 Oct 2006 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2006/10/tiny-tips-4-adding-users-in-bulk-for-windows-xp/</guid><description>&lt;p>Recently I came across a requirement where it was needed to create user accounts in bulk from a CSV file. Initially I thought there should be a ready made option present for doing this from command line and was happy to locate a KB article about &lt;code>AddUsers.exe&lt;/code>, but it seems that the &lt;code>AddUsers.exe&lt;/code> file is only available for Windows NT server and Windows 2000 Server operating systems.&lt;/p>
&lt;p>A bit more digging into the available commands in Windows XP brought up &lt;code>net user&lt;/code>, though this is not a utility for creating user accounts in bulk it provides an option to create user accounts quickly. So I hacked in a command line application which will accept a CSV file and execute the &lt;code>net user&lt;/code> command internally.&lt;/p>
&lt;p>Source follows:&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">17
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">18
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">19
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">20
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">21
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">22
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">23
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">24
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">25
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">26
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">27
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">28
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">29
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">30
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">31
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">32
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">33
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">34
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">35
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">36
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">37
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">38
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">39
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">40
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">41
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">42
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">43
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">44
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">45
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">46
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">47
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">48
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">49
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">50
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">51
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">52
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">53
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">54
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">55
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">56
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-csharp" data-lang="csharp">&lt;span style="color:#00a8c8">using&lt;/span> &lt;span style="color:#111">System&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#00a8c8">using&lt;/span> &lt;span style="color:#111">System.Collections.Generic&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#00a8c8">using&lt;/span> &lt;span style="color:#111">System.Text&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#00a8c8">using&lt;/span> &lt;span style="color:#111">System.IO&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#00a8c8">using&lt;/span> &lt;span style="color:#111">System.Diagnostics&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#00a8c8">namespace&lt;/span> &lt;span style="color:#111">BulkAddUsers&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#00a8c8">class&lt;/span> &lt;span style="color:#75af00">Program&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#00a8c8">static&lt;/span> &lt;span style="color:#00a8c8">int&lt;/span> &lt;span style="color:#111">Main&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#00a8c8">string&lt;/span>&lt;span style="color:#111">[]&lt;/span> &lt;span style="color:#111">args&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">args&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Length&lt;/span> &lt;span style="color:#111">&amp;amp;&lt;/span>&lt;span style="color:#111">lt&lt;/span>&lt;span style="color:#111">;&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#111">Console&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">WriteLine&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;[Usage]&amp;#34;&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#111">Console&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">WriteLine&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;BulkAddUsers &amp;amp;lt;filename&amp;amp;gt; [&amp;amp;lt;character&amp;amp;gt;]&amp;#34;&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#111">Console&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">WriteLine&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;&amp;amp;lt;filename&amp;amp;gt; is the name of the file which contains the user name and password of the users in CSV format&amp;#34;&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#111">Console&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">WriteLine&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;&amp;amp;lt;character&amp;amp;gt; is the separatation character used in the CSV file (comma (,) , semicolon (;) , space ( ))&amp;#34;&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#00a8c8">return&lt;/span> &lt;span style="color:#111">-&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#00a8c8">string&lt;/span> &lt;span style="color:#111">csvFile&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#111">args&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">];&lt;/span>
&lt;span style="color:#00a8c8">char&lt;/span> &lt;span style="color:#111">sepChar&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#d88200">&amp;#39;,&amp;#39;&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">args&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Length&lt;/span>&lt;span style="color:#111">&amp;amp;&lt;/span>&lt;span style="color:#111">gt&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#111">sepChar&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#111">args&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">][&lt;/span>&lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">];&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#00a8c8">string&lt;/span> &lt;span style="color:#111">csvContents&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#00a8c8">string&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Empty&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#00a8c8">using&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">StreamReader&lt;/span> &lt;span style="color:#111">sr&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#00a8c8">new&lt;/span> &lt;span style="color:#111">StreamReader&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">csvFile&lt;/span>&lt;span style="color:#111">))&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#00a8c8">while&lt;/span> &lt;span style="color:#111">((&lt;/span>&lt;span style="color:#111">csvContents&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#111">sr&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">ReadLine&lt;/span>&lt;span style="color:#111">())&lt;/span> &lt;span style="color:#111">!=&lt;/span> &lt;span style="color:#00a8c8">null&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#75715e">//Split on sepChar
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#00a8c8">string&lt;/span>&lt;span style="color:#111">[]&lt;/span> &lt;span style="color:#111">tokens&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#111">csvContents&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Split&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">sepChar&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#00a8c8">string&lt;/span> &lt;span style="color:#111">command&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#d88200">&amp;#34;net&amp;#34;&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#00a8c8">string&lt;/span> &lt;span style="color:#111">arguments&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#d88200">&amp;#34;user &amp;#34;&lt;/span> &lt;span style="color:#111">+&lt;/span> &lt;span style="color:#111">tokens&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#111">+&lt;/span> &lt;span style="color:#d88200">&amp;#34; &amp;#34;&lt;/span>&lt;span style="color:#111">+&lt;/span> &lt;span style="color:#111">tokens&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#111">+&lt;/span>&lt;span style="color:#d88200">&amp;#34; /add&amp;#34;&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#111">Process&lt;/span> &lt;span style="color:#111">p&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#00a8c8">new&lt;/span> &lt;span style="color:#111">Process&lt;/span>&lt;span style="color:#111">();&lt;/span>
&lt;span style="color:#111">p&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">StartInfo&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">FileName&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#111">command&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#111">p&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">StartInfo&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Arguments&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#111">arguments&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#111">p&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">StartInfo&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">CreateNoWindow&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#00a8c8">true&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#111">p&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">StartInfo&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">WindowStyle&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#111">ProcessWindowStyle&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Hidden&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#111">p&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Start&lt;/span>&lt;span style="color:#111">();&lt;/span>
&lt;span style="color:#111">p&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">WaitForExit&lt;/span>&lt;span style="color:#111">();&lt;/span>
&lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">p&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">ExitCode&lt;/span> &lt;span style="color:#111">!=&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#111">Console&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">WriteLine&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;Error creating user {0}, return code {1}&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">tokens&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">],&lt;/span> &lt;span style="color:#111">p&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">ExitCode&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#00a8c8">return&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div></description></item><item><title>Tiny Tips 3 – Email Mungling</title><link>/2006/10/tiny-tips-3-email-mungling/</link><pubDate>Wed, 04 Oct 2006 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2006/10/tiny-tips-3-email-mungling/</guid><description>&lt;p>Protecting your email from SPAM sources is on the “important things that needs to be taken care of” list when we come up with websites. Normally, when we make our email available through website in plain text the email harvesting bots from SPAM source are able to retrieve them for spamming purposes. But taking of the plain email links will lead to other complications like deploying a flash based movie with emails which will cause troubles for users without flash plug-in and so on.&lt;/p>
&lt;p>The best way to deal with this problem is to use a email munger. Email munger is an application which will take in a plain looking email address (eg. &lt;a href="mailto:whosthere@nowhere.mymy">whosthere@nowhere.mymy&lt;/a>) and change the characters to ASCII codes so that the spam bots wont recognize them as emails example:&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-html" data-lang="html">&lt;span style="color:#111">&amp;amp;amp;&lt;/span>#119;&lt;span style="color:#111">&amp;amp;amp;&lt;/span>#104;&lt;span style="color:#111">&amp;amp;amp;&lt;/span>#111;&lt;span style="color:#111">&amp;amp;amp;&lt;/span>#115;&lt;span style="color:#111">&amp;amp;amp;&lt;/span>#116;&lt;span style="color:#111">&amp;amp;amp;&lt;/span>#104;&lt;span style="color:#111">&amp;amp;amp;&lt;/span>#101;&lt;span style="color:#111">&amp;amp;amp;&lt;/span>#114;&lt;span style="color:#111">&amp;amp;amp;&lt;/span>#101;&lt;span style="color:#111">&amp;amp;amp;&lt;/span>#64;&lt;span style="color:#111">&amp;amp;amp;&lt;/span>#110;&lt;span style="color:#111">&amp;amp;amp;&lt;/span>#111;&lt;span style="color:#111">&amp;amp;amp;&lt;/span>#119;&lt;span style="color:#111">&amp;amp;amp;&lt;/span>#104;&lt;span style="color:#111">&amp;amp;amp;&lt;/span>#101;&lt;span style="color:#111">&amp;amp;amp;&lt;/span>#114;&lt;span style="color:#111">&amp;amp;amp;&lt;/span>#101;&lt;span style="color:#111">&amp;amp;amp;&lt;/span>#46;&lt;span style="color:#111">&amp;amp;amp;&lt;/span>#109;&lt;span style="color:#111">&amp;amp;amp;&lt;/span>#121;&lt;span style="color:#111">&amp;amp;amp;&lt;/span>#109;&lt;span style="color:#111">&amp;amp;amp;&lt;/span>#121;
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>In the above case the email &lt;a href="mailto:whosthere@nowhere.mymy">whosthere@nowhere.mymy&lt;/a> was converted into HTML escaped ASCII encoded string by email munger. Even though spam bots wont be able to recognize the text browsers will not have any problem reading / parsing them.&lt;/p>
&lt;p>Below is the sample code in C# for converting a plain email to its munged form:&lt;/p>
&lt;div class="highlight">&lt;div style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-csharp" data-lang="csharp">&lt;span style="color:#00a8c8">public&lt;/span> &lt;span style="color:#00a8c8">static&lt;/span> &lt;span style="color:#00a8c8">string&lt;/span> &lt;span style="color:#111">GetMungedEmail&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#00a8c8">string&lt;/span> &lt;span style="color:#111">plainEmail&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#111">StringBuilder&lt;/span> &lt;span style="color:#111">finalEmail&lt;/span> &lt;span style="color:#111">=&lt;/span> &lt;span style="color:#00a8c8">new&lt;/span> &lt;span style="color:#111">StringBuilder&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">plainEmail&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Length&lt;/span> &lt;span style="color:#111">*&lt;/span> &lt;span style="color:#ae81ff">6&lt;/span>&lt;span style="color:#111">);&lt;/span> &lt;span style="color:#75715e">// Approximately each character of the plain email takes 6 charater in encoded form
&lt;/span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#00a8c8">foreach&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#00a8c8">char&lt;/span> &lt;span style="color:#111">c&lt;/span> &lt;span style="color:#00a8c8">in&lt;/span> &lt;span style="color:#111">plainEmail&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">ToCharArray&lt;/span>&lt;span style="color:#111">())&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;span style="color:#111">finalEmail&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Append&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;&amp;amp;#&amp;#34;&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#111">finalEmail&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Append&lt;/span>&lt;span style="color:#111">(((&lt;/span>&lt;span style="color:#00a8c8">int&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#111">c&lt;/span>&lt;span style="color:#111">).&lt;/span>&lt;span style="color:#111">ToString&lt;/span>&lt;span style="color:#111">());&lt;/span>
&lt;span style="color:#111">finalEmail&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">Append&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;;&amp;#34;&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;span style="color:#00a8c8">return&lt;/span> &lt;span style="color:#111">finalEmail&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">ToString&lt;/span>&lt;span style="color:#111">();&lt;/span>
&lt;span style="color:#111">}&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>As you can see all the fun happens at line 5 where we convert the character to its ASCII equivalent.&lt;/p>
&lt;p>&lt;strong>Related Links:&lt;/strong>&lt;/p>
&lt;p>&lt;a href="http://perso.crans.org/~raffo/aem/index.php" target="_blank">Automatic Email Munger&lt;/a>, An antispam tool for hiding your email address in a web page from spamrobots by Daniele Raffo&lt;/p>
&lt;p>&lt;a href="http://www.unimelb.edu.au/webcentre/tools/developertools/emailmunger.html" target="_blank">Email munger (to help you minimise email spam)&lt;/a>&lt;/p></description></item><item><title>Checking out Ruby on Visual Studio .NET</title><link>/2006/09/checking-out-ruby-on-visual-studio-net/</link><pubDate>Tue, 26 Sep 2006 00:00:00 +0000</pubDate><author>vijay@vijay.name (விஜய் கணேஷ் - Vijay Ganesh)</author><guid isPermaLink="true">/2006/09/checking-out-ruby-on-visual-studio-net/</guid><description>&lt;p>&lt;strong>Warning: When installing Ruby using “One-Click Ruby Installer”, it replaces your path with “c:rubybin”, if you don&amp;rsquo;t take a back up of your path variable before install then you will be in for a nasty surprise (Yea, I had that)&lt;/strong>&lt;/p>
&lt;p>Since Ruby was making a lot of sound on the blogosphere (both &lt;a href="http://www.hanselman.com/blog/WhyWouldANETProgrammerLearnRubyOnRails.aspx" title="Ruby">favourable&lt;/a> and &lt;a href="http://www.joelonsoftware.com/items/2006/09/12.html" title="Ruby">unfavourable&lt;/a>), I thought of checking it out. Till now my concentration was mainly on C++ and Dot-Net along with getting started on MPI-CH framework, so I was looking into the availability of development tools along with a good IDE and learning materials for  and was pleasantly surprised at the high quantity. For starters, you can get Ruby at &lt;a href="http://rubyforge.org/projects/rubyinstaller/">http://rubyforge.org/projects/rubyinstaller/&lt;/a> which comes with the standard parser, two free IDE&amp;rsquo;s, RubyGems (packaging utility) and documentation. Even though there is a free IDE present in the package, I find the idea of integrating the Ruby development in Visual Studio would be a better idea and &lt;a href="http://www.sapphiresteel.com/">Ruby in Steel&lt;/a> does just that. Since I already have &lt;a href="http://vertrigo.sourceforge.net/" title="VertigoServ">VertigoServ&lt;/a> installed (a windows AMP package), I did not consider using the &lt;a href="http://rubyforge.org/projects/instantrails/" title="Instant Rails">Instant Rails&lt;/a>.&lt;/p>
&lt;p>After playing with ruby, check out &lt;a title="Erik Veenstra" href="http://www.erikveen.dds.nl/" target="_blank">Erik Veenstra&lt;/a>‘s &lt;a title="Distributing Rails Applications, A Tutorial" href="http://www.erikveen.dds.nl/distributingrubyapplications/rails.html" target="_blank">Distributing Rails Applications, A Tutorial&lt;/a> to know about a way to distribute your ruby applications as an single EXE file (exe on windows, it can also create single execute files for other platforms as well).&lt;/p></description></item></channel></rss>