<!DOCTYPE html>
<html class='v2' dir='ltr'>
<head>
<meta content='width=1100' name='viewport'/>
<meta content='text/html; charset=UTF-8' http-equiv='Content-Type'/>
<script type="text/javascript">(function() { var b=window,f="jstiming",g="tick";(function(){function d(a){this.t={};this.tick=function(a,d,c){var e=void 0!=c?c:(new Date).getTime();this.t[a]=[e,d];if(void 0==c)try{b.console.timeStamp("CSI/"+a)}catch(h){}};this[g]("start",null,a)}var a;b.performance&&(a=b.performance.timing);var m=a?new d(a.responseStart):new d;b.jstiming={Timer:d,load:m};if(a){var c=a.navigationStart,h=a.responseStart;0<c&&h>=c&&(b[f].srt=h-c)}if(a){var e=b[f].load;0<c&&h>=c&&(e[g]("_wtsrt",void 0,c),e[g]("wtsrt_","_wtsrt",h),e[g]("tbsd_","wtsrt_"))}try{a=null,
b.chrome&&b.chrome.csi&&(a=Math.floor(b.chrome.csi().pageT),e&&0<c&&(e[g]("_tbnd",void 0,b.chrome.csi().startE),e[g]("tbnd_","_tbnd",c))),null==a&&b.gtbExternal&&(a=b.gtbExternal.pageT()),null==a&&b.external&&(a=b.external.pageT,e&&0<c&&(e[g]("_tbnd",void 0,b.external.startE),e[g]("tbnd_","_tbnd",c))),a&&(b[f].pt=a)}catch(n){}})();b.tickAboveFold=function(d){var a=0;if(d.offsetParent){do a+=d.offsetTop;while(d=d.offsetParent)}d=a;750>=d&&b[f].load[g]("aft")};var k=!1;function l(){k||(k=!0,b[f].load[g]("firstScrollTime"))}b.addEventListener?b.addEventListener("scroll",l,!1):b.attachEvent("onscroll",l);
 })();</script>
<meta content='blogger' name='generator'/>
<link href='http://www.sanjayuttam.com/favicon.ico' rel='icon' type='image/x-icon'/>
<link href='http://www.sanjayuttam.com/' rel='canonical'/>
<link rel="alternate" type="application/atom+xml" title="Sanjay Uttam - Atom" href="http://www.sanjayuttam.com/feeds/posts/default" />
<link rel="alternate" type="application/rss+xml" title="Sanjay Uttam - RSS" href="http://www.sanjayuttam.com/feeds/posts/default?alt=rss" />
<link rel="service.post" type="application/atom+xml" title="Sanjay Uttam - Atom" href="http://www.blogger.com/feeds/5221594185948010636/posts/default" />
<link rel="me" href="http://www.blogger.com/profile/05855979220002560513" />
<link rel="openid.server" href="http://www.blogger.com/openid-server.g" />
<link rel="openid.delegate" href="http://www.sanjayuttam.com/" />
<!--[if IE]><script type="text/javascript" src="https://www.blogger.com/static/v1/jsbin/4163410827-ieretrofit.js"></script>
<![endif]-->
<!--[if IE]> <script> (function() { var html5 = ("abbr,article,aside,audio,canvas,datalist,details," + "figure,footer,header,hgroup,mark,menu,meter,nav,output," + "progress,section,time,video").split(','); for (var i = 0; i < html5.length; i++) { document.createElement(html5[i]); } try { document.execCommand('BackgroundImageCache', false, true); } catch(e) {} })(); </script> <![endif]-->
<title>Sanjay Uttam</title>
<link type='text/css' rel='stylesheet' href='https://www.blogger.com/static/v1/widgets/2356033831-widget_css_2_bundle.css' />
<link type='text/css' rel='stylesheet' href='//www.blogger.com/dyn-css/authorization.css?targetBlogID=5221594185948010636&zx=859a87c9-45be-4516-ab25-0ab4302b4897' />
<style id='page-skin-1' type='text/css'><!--
/*
-----------------------------------------------
Blogger Template Style
Name:     Simple
Designer: Josh Peterson
URL:      www.noaesthetic.com
----------------------------------------------- */
/* Variable definitions
====================
<Variable name="keycolor" description="Main Color" type="color" default="#66bbdd"/>
<Group description="Page Text" selector="body">
<Variable name="body.font" description="Font" type="font"
default="normal normal 12px Arial, Tahoma, Helvetica, FreeSans, sans-serif"/>
<Variable name="body.text.color" description="Text Color" type="color" default="#222222"/>
</Group>
<Group description="Backgrounds" selector=".body-fauxcolumns-outer">
<Variable name="body.background.color" description="Outer Background" type="color" default="#66bbdd"/>
<Variable name="content.background.color" description="Main Background" type="color" default="#ffffff"/>
<Variable name="header.background.color" description="Header Background" type="color" default="transparent"/>
</Group>
<Group description="Links" selector=".main-outer">
<Variable name="link.color" description="Link Color" type="color" default="#2288bb"/>
<Variable name="link.visited.color" description="Visited Color" type="color" default="#888888"/>
<Variable name="link.hover.color" description="Hover Color" type="color" default="#33aaff"/>
</Group>
<Group description="Blog Title" selector=".header h1">
<Variable name="header.font" description="Font" type="font"
default="normal normal 60px Arial, Tahoma, Helvetica, FreeSans, sans-serif"/>
<Variable name="header.text.color" description="Title Color" type="color" default="#3399bb" />
</Group>
<Group description="Blog Description" selector=".header .description">
<Variable name="description.text.color" description="Description Color" type="color"
default="#777777" />
</Group>
<Group description="Tabs Text" selector=".tabs-inner .widget li a">
<Variable name="tabs.font" description="Font" type="font"
default="normal normal 14px Arial, Tahoma, Helvetica, FreeSans, sans-serif"/>
<Variable name="tabs.text.color" description="Text Color" type="color" default="#999999"/>
<Variable name="tabs.selected.text.color" description="Selected Color" type="color" default="#000000"/>
</Group>
<Group description="Tabs Background" selector=".tabs-outer .PageList">
<Variable name="tabs.background.color" description="Background Color" type="color" default="#f5f5f5"/>
<Variable name="tabs.selected.background.color" description="Selected Color" type="color" default="#eeeeee"/>
</Group>
<Group description="Post Title" selector="h3.post-title, .comments h4">
<Variable name="post.title.font" description="Font" type="font"
default="normal normal 22px Arial, Tahoma, Helvetica, FreeSans, sans-serif"/>
</Group>
<Group description="Date Header" selector=".date-header">
<Variable name="date.header.color" description="Text Color" type="color"
default="#cccccc"/>
<Variable name="date.header.background.color" description="Background Color" type="color"
default="transparent"/>
</Group>
<Group description="Post Footer" selector=".post-footer">
<Variable name="post.footer.text.color" description="Text Color" type="color" default="#666666"/>
<Variable name="post.footer.background.color" description="Background Color" type="color"
default="#f9f9f9"/>
<Variable name="post.footer.border.color" description="Shadow Color" type="color" default="#eeeeee"/>
</Group>
<Group description="Gadgets" selector="h2">
<Variable name="widget.title.font" description="Title Font" type="font"
default="normal bold 11px Arial, Tahoma, Helvetica, FreeSans, sans-serif"/>
<Variable name="widget.title.text.color" description="Title Color" type="color" default="#000000"/>
<Variable name="widget.alternate.text.color" description="Alternate Color" type="color" default="#999999"/>
</Group>
<Group description="Images" selector=".main-inner">
<Variable name="image.background.color" description="Background Color" type="color" default="#ffffff"/>
<Variable name="image.border.color" description="Border Color" type="color" default="#eeeeee"/>
<Variable name="image.text.color" description="Caption Text Color" type="color" default="#cccccc"/>
</Group>
<Group description="Accents" selector=".content-inner">
<Variable name="body.rule.color" description="Separator Line Color" type="color" default="#eeeeee"/>
<Variable name="tabs.border.color" description="Tabs Border Color" type="color" default="#404040"/>
</Group>
<Variable name="body.background" description="Body Background" type="background"
color="#292929" default="$(color) none repeat scroll top left"/>
<Variable name="body.background.override" description="Body Background Override" type="string" default=""/>
<Variable name="body.background.gradient.cap" description="Body Gradient Cap" type="url"
default="url(//www.blogblog.com/1kt/simple/gradients_light.png)"/>
<Variable name="body.background.gradient.tile" description="Body Gradient Tile" type="url"
default="url(//www.blogblog.com/1kt/simple/body_gradient_tile_light.png)"/>
<Variable name="content.background.color.selector" description="Content Background Color Selector" type="string" default=".content-inner"/>
<Variable name="content.padding" description="Content Padding" type="length" default="10px"/>
<Variable name="content.padding.horizontal" description="Content Horizontal Padding" type="length" default="10px"/>
<Variable name="content.shadow.spread" description="Content Shadow Spread" type="length" default="40px"/>
<Variable name="content.shadow.spread.webkit" description="Content Shadow Spread (WebKit)" type="length" default="5px"/>
<Variable name="content.shadow.spread.ie" description="Content Shadow Spread (IE)" type="length" default="10px"/>
<Variable name="main.border.width" description="Main Border Width" type="length" default="0"/>
<Variable name="header.background.gradient" description="Header Gradient" type="url" default="none"/>
<Variable name="header.shadow.offset.left" description="Header Shadow Offset Left" type="length" default="-1px"/>
<Variable name="header.shadow.offset.top" description="Header Shadow Offset Top" type="length" default="-1px"/>
<Variable name="header.shadow.spread" description="Header Shadow Spread" type="length" default="1px"/>
<Variable name="header.padding" description="Header Padding" type="length" default="30px"/>
<Variable name="header.border.size" description="Header Border Size" type="length" default="1px"/>
<Variable name="header.bottom.border.size" description="Header Bottom Border Size" type="length" default="1px"/>
<Variable name="header.border.horizontalsize" description="Header Horizontal Border Size" type="length" default="0"/>
<Variable name="description.text.size" description="Description Text Size" type="string" default="140%"/>
<Variable name="tabs.margin.top" description="Tabs Margin Top" type="length" default="0" />
<Variable name="tabs.margin.side" description="Tabs Side Margin" type="length" default="30px" />
<Variable name="tabs.background.gradient" description="Tabs Background Gradient" type="url"
default="url(//www.blogblog.com/1kt/simple/gradients_light.png)"/>
<Variable name="tabs.border.width" description="Tabs Border Width" type="length" default="1px"/>
<Variable name="tabs.bevel.border.width" description="Tabs Bevel Border Width" type="length" default="1px"/>
<Variable name="date.header.padding" description="Date Header Padding" type="string" default="inherit"/>
<Variable name="date.header.letterspacing" description="Date Header Letter Spacing" type="string" default="inherit"/>
<Variable name="date.header.margin" description="Date Header Margin" type="string" default="inherit"/>
<Variable name="post.margin.bottom" description="Post Bottom Margin" type="length" default="25px"/>
<Variable name="image.border.small.size" description="Image Border Small Size" type="length" default="2px"/>
<Variable name="image.border.large.size" description="Image Border Large Size" type="length" default="5px"/>
<Variable name="page.width.selector" description="Page Width Selector" type="string" default=".region-inner"/>
<Variable name="page.width" description="Page Width" type="string" default="auto"/>
<Variable name="main.section.margin" description="Main Section Margin" type="length" default="15px"/>
<Variable name="main.padding" description="Main Padding" type="length" default="15px"/>
<Variable name="main.padding.top" description="Main Padding Top" type="length" default="30px"/>
<Variable name="main.padding.bottom" description="Main Padding Bottom" type="length" default="30px"/>
<Variable name="paging.background"
color="#333333"
description="Background of blog paging area" type="background"
default="transparent none no-repeat scroll top center"/>
<Variable name="footer.bevel" description="Bevel border length of footer" type="length" default="0"/>
<Variable name="mobile.background.overlay" description="Mobile Background Overlay" type="string"
default="transparent none repeat scroll top left"/>
<Variable name="mobile.background.size" description="Mobile Background Size" type="string" default="auto"/>
<Variable name="mobile.button.color" description="Mobile Button Color" type="color" default="#ffffff" />
<Variable name="startSide" description="Side where text starts in blog language" type="automatic" default="left"/>
<Variable name="endSide" description="Side where text ends in blog language" type="automatic" default="right"/>
*/
/* Content
----------------------------------------------- */
body {
font: normal normal 12px Arial, Tahoma, Helvetica, FreeSans, sans-serif;
color: #cccccc;
background: #292929 none repeat scroll top left;
padding: 0 40px 40px 40px;
}
html body .region-inner {
min-width: 0;
max-width: 100%;
width: auto;
}
a:link {
text-decoration:none;
color: #dd7700;
}
a:visited {
text-decoration:none;
color: #cc6600;
}
a:hover {
text-decoration:underline;
color: #cc6600;
}
.body-fauxcolumn-outer .fauxcolumn-inner {
background: transparent none repeat scroll top left;
_background-image: none;
}
.body-fauxcolumn-outer .cap-top {
position: absolute;
z-index: 1;
height: 400px;
width: 100%;
background: #292929 none repeat scroll top left;
}
.body-fauxcolumn-outer .cap-top .cap-left {
width: 100%;
background: transparent none repeat-x scroll top left;
_background-image: none;
}
.content-outer {
-moz-box-shadow: 0 0 40px rgba(0, 0, 0, .15);
-webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .15);
-goog-ms-box-shadow: 0 0 10px #333333;
box-shadow: 0 0 40px rgba(0, 0, 0, .15);
margin-bottom: 1px;
}
.content-inner {
padding: 10px 10px;
}
.content-inner {
background-color: #333333;
}
/* Header
----------------------------------------------- */
.header-outer {
background: transparent none repeat-x scroll 0 -400px;
_background-image: none;
}
.Header h1 {
font: normal normal 60px Arial, Tahoma, Helvetica, FreeSans, sans-serif;
color: #ffffff;
text-shadow: -1px -1px 1px rgba(0, 0, 0, .2);
}
.Header h1 a {
color: #ffffff;
}
.Header .description {
font-size: 140%;
color: #aaaaaa;
}
.header-inner .Header .titlewrapper {
padding: 22px 30px;
}
.header-inner .Header .descriptionwrapper {
padding: 0 30px;
}
/* Tabs
----------------------------------------------- */
.tabs-inner .section:first-child {
border-top: 1px solid #404040;
}
.tabs-inner .section:first-child ul {
margin-top: -1px;
border-top: 1px solid #404040;
border-left: 0 solid #404040;
border-right: 0 solid #404040;
}
.tabs-inner .widget ul {
background: #222222 none repeat-x scroll 0 -800px;
_background-image: none;
border-bottom: 1px solid #404040;
margin-top: 0;
margin-left: -30px;
margin-right: -30px;
}
.tabs-inner .widget li a {
display: inline-block;
padding: .6em 1em;
font: normal normal 14px Arial, Tahoma, Helvetica, FreeSans, sans-serif;
color: #999999;
border-left: 1px solid #333333;
border-right: 0 solid #404040;
}
.tabs-inner .widget li:first-child a {
border-left: none;
}
.tabs-inner .widget li.selected a, .tabs-inner .widget li a:hover {
color: #ffffff;
background-color: #000000;
text-decoration: none;
}
/* Columns
----------------------------------------------- */
.main-outer {
border-top: 0 solid #404040;
}
.fauxcolumn-left-outer .fauxcolumn-inner {
border-right: 1px solid #404040;
}
.fauxcolumn-right-outer .fauxcolumn-inner {
border-left: 1px solid #404040;
}
/* Headings
----------------------------------------------- */
h2 {
margin: 0 0 1em 0;
font: normal bold 11px Arial, Tahoma, Helvetica, FreeSans, sans-serif;
color: #ffffff;
}
/* Widgets
----------------------------------------------- */
.widget .zippy {
color: #999999;
text-shadow: 2px 2px 1px rgba(0, 0, 0, .1);
}
.widget .popular-posts ul {
list-style: none;
}
/* Posts
----------------------------------------------- */
.date-header span {
background-color: transparent;
color: #cccccc;
padding: inherit;
letter-spacing: inherit;
margin: inherit;
}
.main-inner {
padding-top: 30px;
padding-bottom: 30px;
}
.main-inner .column-center-inner {
padding: 0 15px;
}
.main-inner .column-center-inner .section {
margin: 0 15px;
}
.post {
margin: 0 0 25px 0;
}
h3.post-title, .comments h4 {
font: normal normal 22px Arial, Tahoma, Helvetica, FreeSans, sans-serif;
margin: .75em 0 0;
}
.post-body {
font-size: 110%;
line-height: 1.4;
position: relative;
}
.post-body img, .post-body .tr-caption-container, .Profile img, .Image img,
.BlogList .item-thumbnail img {
padding: 0;
background: #111111;
border: 1px solid #111111;
-moz-box-shadow: 1px 1px 5px rgba(0, 0, 0, .1);
-webkit-box-shadow: 1px 1px 5px rgba(0, 0, 0, .1);
box-shadow: 1px 1px 5px rgba(0, 0, 0, .1);
}
.post-body img, .post-body .tr-caption-container {
padding: 1px;
}
.post-body .tr-caption-container {
color: #cccccc;
}
.post-body .tr-caption-container img {
padding: 0;
background: transparent;
border: none;
-moz-box-shadow: 0 0 0 rgba(0, 0, 0, .1);
-webkit-box-shadow: 0 0 0 rgba(0, 0, 0, .1);
box-shadow: 0 0 0 rgba(0, 0, 0, .1);
}
.post-header {
margin: 0 0 1.5em;
line-height: 1.6;
font-size: 90%;
}
.post-footer {
margin: 20px -2px 0;
padding: 5px 10px;
color: #888888;
background-color: #303030;
border-bottom: 1px solid #444444;
line-height: 1.6;
font-size: 90%;
}
#comments .comment-author {
padding-top: 1.5em;
border-top: 1px solid #404040;
background-position: 0 1.5em;
}
#comments .comment-author:first-child {
padding-top: 0;
border-top: none;
}
.avatar-image-container {
margin: .2em 0 0;
}
#comments .avatar-image-container img {
border: 1px solid #111111;
}
/* Comments
----------------------------------------------- */
.comments .comments-content .icon.blog-author {
background-repeat: no-repeat;
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEgAACxIB0t1+/AAAAAd0SU1FB9sLFwMeCjjhcOMAAAD+SURBVDjLtZSvTgNBEIe/WRRnm3U8RC1neQdsm1zSBIU9VVF1FkUguQQsD9ITmD7ECZIJSE4OZo9stoVjC/zc7ky+zH9hXwVwDpTAWWLrgS3QAe8AZgaAJI5zYAmc8r0G4AHYHQKVwII8PZrZFsBFkeRCABYiMh9BRUhnSkPTNCtVXYXURi1FpBDgArj8QU1eVXUzfnjv7yP7kwu1mYrkWlU33vs1QNu2qU8pwN0UpKoqokjWwCztrMuBhEhmh8bD5UDqur75asbcX0BGUB9/HAMB+r32hznJgXy2v0sGLBcyAJ1EK3LFcbo1s91JeLwAbwGYu7TP/3ZGfnXYPgAVNngtqatUNgAAAABJRU5ErkJggg==);
}
.comments .comments-content .loadmore a {
border-top: 1px solid #999999;
border-bottom: 1px solid #999999;
}
.comments .comment-thread.inline-thread {
background-color: #303030;
}
.comments .continue {
border-top: 2px solid #999999;
}
/* Accents
---------------------------------------------- */
.section-columns td.columns-cell {
border-left: 1px solid #404040;
}
.blog-pager {
background: transparent none no-repeat scroll top center;
}
.blog-pager-older-link, .home-link,
.blog-pager-newer-link {
background-color: #333333;
padding: 5px;
}
.footer-outer {
border-top: 0 dashed #bbbbbb;
}
/* Mobile
----------------------------------------------- */
body.mobile  {
background-size: auto;
}
.mobile .body-fauxcolumn-outer {
background: transparent none repeat scroll top left;
}
.mobile .body-fauxcolumn-outer .cap-top {
background-size: 100% auto;
}
.mobile .content-outer {
-webkit-box-shadow: 0 0 3px rgba(0, 0, 0, .15);
box-shadow: 0 0 3px rgba(0, 0, 0, .15);
}
body.mobile .AdSense {
margin: 0 -40px;
}
.mobile .tabs-inner .widget ul {
margin-left: 0;
margin-right: 0;
}
.mobile .post {
margin: 0;
}
.mobile .main-inner .column-center-inner .section {
margin: 0;
}
.mobile .date-header span {
padding: 0.1em 10px;
margin: 0 -10px;
}
.mobile h3.post-title {
margin: 0;
}
.mobile .blog-pager {
background: transparent none no-repeat scroll top center;
}
.mobile .footer-outer {
border-top: none;
}
.mobile .main-inner, .mobile .footer-inner {
background-color: #333333;
}
.mobile-index-contents {
color: #cccccc;
}
.mobile-link-button {
background-color: #dd7700;
}
.mobile-link-button a:link, .mobile-link-button a:visited {
color: #ffffff;
}
.mobile .tabs-inner .section:first-child {
border-top: none;
}
.mobile .tabs-inner .PageList .widget-content {
background-color: #000000;
color: #ffffff;
border-top: 1px solid #404040;
border-bottom: 1px solid #404040;
}
.mobile .tabs-inner .PageList .widget-content .pagelist-arrow {
border-left: 1px solid #404040;
}

--></style>
<style id='template-skin-1' type='text/css'><!--
body {
min-width: 860px;
}
.content-outer, .content-fauxcolumn-outer, .region-inner {
min-width: 860px;
max-width: 860px;
_width: 860px;
}
.main-inner .columns {
padding-left: 0px;
padding-right: 260px;
}
.main-inner .fauxcolumn-center-outer {
left: 0px;
right: 260px;
/* IE6 does not respect left and right together */
_width: expression(this.parentNode.offsetWidth -
parseInt("0px") -
parseInt("260px") + 'px');
}
.main-inner .fauxcolumn-left-outer {
width: 0px;
}
.main-inner .fauxcolumn-right-outer {
width: 260px;
}
.main-inner .column-left-outer {
width: 0px;
right: 100%;
margin-left: -0px;
}
.main-inner .column-right-outer {
width: 260px;
margin-right: -260px;
}
#layout {
min-width: 0;
}
#layout .content-outer {
min-width: 0;
width: 800px;
}
#layout .region-inner {
min-width: 0;
width: auto;
}
--></style>
<script type='text/javascript'>
      var _gaq = _gaq || [];
      _gaq.push(['_setAccount', 'UA-17100031-1']);
      _gaq.push(['_trackPageview']);
      (function() {
        var ga = document.createElement('script');
        ga.type = 'text/javascript';
        ga.async = true;
        ga.src = (document.location.protocol == 'https:' ?
                  'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
        var s = document.getElementsByTagName('script')[0];
        s.parentNode.insertBefore(ga, s);
      })();
    </script>
<script type="text/javascript">var a=navigator,b="userAgent",c="indexOf",f="&m=1",g="(^|&)m=",h="?",k="?m=1";function l(){var d=window.location.href,e=d.split(h);switch(e.length){case 1:return d+k;case 2:return 0<=e[1].search(g)?null:d+f;default:return null}}if(-1!=a[b][c]("Mobile")&&-1!=a[b][c]("WebKit")&&-1==a[b][c]("iPad")||-1!=a[b][c]("Opera Mini")||-1!=a[b][c]("IEMobile")){var m=l();m&&window.location.replace(m)};
</script><script type="text/javascript">
if (window.jstiming) window.jstiming.load.tick('headEnd');
</script></head>
<body class='loading'>
<div class='navbar section' id='navbar'><div class='widget Navbar' id='Navbar1'><script type="text/javascript">
    function setAttributeOnload(object, attribute, val) {
      if(window.addEventListener) {
        window.addEventListener('load',
          function(){ object[attribute] = val; }, false);
      } else {
        window.attachEvent('onload', function(){ object[attribute] = val; });
      }
    }
  </script>
<div id="navbar-iframe-container"></div>
<script type="text/javascript" src="https://apis.google.com/js/plusone.js"></script>
<script type="text/javascript">
        gapi.load("gapi.iframes:gapi.iframes.style.bubble", function() {
          if (gapi.iframes && gapi.iframes.getContext) {
            gapi.iframes.getContext().openChild({
                url: '//www.blogger.com/navbar.g?targetBlogID\0755221594185948010636\46blogName\75Sanjay+Uttam\46publishMode\75PUBLISH_MODE_HOSTED\46navbarType\75LIGHT\46layoutType\75LAYOUTS\46searchRoot\75http://www.sanjayuttam.com/search\46blogLocale\75en\46v\0752\46homepageUrl\75http://www.sanjayuttam.com/\46vt\75-3218994504743215608',
                where: document.getElementById("navbar-iframe-container"),
                id: "navbar-iframe"
            });
          }
        });
      </script><script type="text/javascript">
(function() {
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = '//pagead2.googlesyndication.com/pagead/js/google_top_exp.js';
var head = document.getElementsByTagName('head')[0];
if (head) {
head.appendChild(script);
}})();
</script>
</div></div>
<div itemscope='itemscope' itemtype='http://schema.org/Blog' style='display: none;'>
<meta content='Sanjay Uttam' itemprop='name'/>
</div>
<div class='body-fauxcolumns'>
<div class='fauxcolumn-outer body-fauxcolumn-outer'>
<div class='cap-top'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
<div class='fauxborder-left'>
<div class='fauxborder-right'></div>
<div class='fauxcolumn-inner'>
</div>
</div>
<div class='cap-bottom'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
</div>
</div>
<div class='content'>
<div class='content-fauxcolumns'>
<div class='fauxcolumn-outer content-fauxcolumn-outer'>
<div class='cap-top'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
<div class='fauxborder-left'>
<div class='fauxborder-right'></div>
<div class='fauxcolumn-inner'>
</div>
</div>
<div class='cap-bottom'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
</div>
</div>
<div class='content-outer'>
<div class='content-cap-top cap-top'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
<div class='fauxborder-left content-fauxborder-left'>
<div class='fauxborder-right content-fauxborder-right'></div>
<div class='content-inner'>
<header>
<div class='header-outer'>
<div class='header-cap-top cap-top'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
<div class='fauxborder-left header-fauxborder-left'>
<div class='fauxborder-right header-fauxborder-right'></div>
<div class='region-inner header-inner'>
<div class='header section' id='header'><div class='widget Header' id='Header1'>
<div id='header-inner'>
<div class='titlewrapper'>
<h1 class='title'>
Sanjay Uttam
</h1>
</div>
<div class='descriptionwrapper'>
<p class='description'><span>Thoughts on software, architecture, agile, and other overused-terms.</span></p>
</div>
</div>
</div></div>
</div>
</div>
<div class='header-cap-bottom cap-bottom'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
</div>
</header>
<div class='tabs-outer'>
<div class='tabs-cap-top cap-top'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
<div class='fauxborder-left tabs-fauxborder-left'>
<div class='fauxborder-right tabs-fauxborder-right'></div>
<div class='region-inner tabs-inner'>
<div class='tabs section' id='crosscol'></div>
<div class='tabs section' id='crosscol-overflow'></div>
</div>
</div>
<div class='tabs-cap-bottom cap-bottom'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
</div>
<div class='main-outer'>
<div class='main-cap-top cap-top'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
<div class='fauxborder-left main-fauxborder-left'>
<div class='fauxborder-right main-fauxborder-right'></div>
<div class='region-inner main-inner'>
<div class='columns fauxcolumns'>
<div class='fauxcolumn-outer fauxcolumn-center-outer'>
<div class='cap-top'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
<div class='fauxborder-left'>
<div class='fauxborder-right'></div>
<div class='fauxcolumn-inner'>
</div>
</div>
<div class='cap-bottom'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
</div>
<div class='fauxcolumn-outer fauxcolumn-left-outer'>
<div class='cap-top'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
<div class='fauxborder-left'>
<div class='fauxborder-right'></div>
<div class='fauxcolumn-inner'>
</div>
</div>
<div class='cap-bottom'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
</div>
<div class='fauxcolumn-outer fauxcolumn-right-outer'>
<div class='cap-top'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
<div class='fauxborder-left'>
<div class='fauxborder-right'></div>
<div class='fauxcolumn-inner'>
</div>
</div>
<div class='cap-bottom'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
</div>
<!-- corrects IE6 width calculation -->
<div class='columns-inner'>
<div class='column-center-outer'>
<div class='column-center-inner'>
<div class='main section' id='main'><div class='widget Blog' id='Blog1'>
<div class='blog-posts hfeed'>
<!-- google_ad_section_start(name=default) -->

          <div class="date-outer">
        
<h2 class='date-header'><span>Tuesday, April 23, 2013</span></h2>

          <div class="date-posts">
        
<div class='post-outer'>
<div class='post hentry' itemprop='blogPost' itemscope='itemscope' itemtype='http://schema.org/BlogPosting'>
<meta content='5221594185948010636' itemprop='blogId'/>
<meta content='9155110090740963772' itemprop='postId'/>
<a name='9155110090740963772'></a>
<div class='post-header'>
<div class='post-header-line-1'></div>
</div>
<div class='post-body entry-content' id='post-body-9155110090740963772' itemprop='description articleBody'>
<div dir="ltr" style="text-align: left;" trbidi="on">
<h2 style="text-align: left;">
<span style="font-family: Arial, Helvetica, sans-serif;"><b>TFS: The download file is corrupt. Please get the file again</b></span></h2>
<div>
<span style="font-family: Arial, Helvetica, sans-serif;">Came across this while working on a whole bunch of CI stuff....easy solution is to clear cache on the client and server. &nbsp;FWIW, I cleared cache on the client and it didn't do anything...you may not need to do both ends, but it won't hurt, either...</span></div>
<div>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div>
<span style="font-family: Arial, Helvetica, sans-serif;">Delete the contents of these directories:</span></div>
<div>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div>
<span style="font-family: Arial, Helvetica, sans-serif;">Client:&nbsp;</span></div>
<div>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div>
<span style="font-family: Arial, Helvetica, sans-serif;">C:\Users\<span style="color: red;">[UserName]</span>\AppData\Local\Microsoft\Team Foundation\4.0\Cache</span></div>
<div>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div>
<span style="font-family: Arial, Helvetica, sans-serif;">Server:&nbsp;</span></div>
<div>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div>
<span style="font-family: Arial, Helvetica, sans-serif;">C:\Program Files\Microsoft Team Foundation Server 11.0\Application Tier\Web Services\_tfs_data</span></div>
</div>
<div style='clear: both;'></div>
</div>
<div class='post-footer'>
<div class='post-footer-line post-footer-line-1'><span class='post-author vcard'>
Posted by
<span class='fn' itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'>
<meta content='http://www.blogger.com/profile/05855979220002560513' itemprop='url'/>
<a class='g-profile' href='http://www.blogger.com/profile/05855979220002560513' rel='author' title='author profile'>
<span itemprop='name'>Sanjay Uttam</span>
</a>
</span>
</span>
<span class='post-timestamp'>
at
<meta content='http://www.sanjayuttam.com/2013/04/tfs-download-file-is-corrupt.html' itemprop='url'/>
<a class='timestamp-link' href='http://www.sanjayuttam.com/2013/04/tfs-download-file-is-corrupt.html' rel='bookmark' title='permanent link'><abbr class='published' itemprop='datePublished' title='2013-04-23T12:54:00-04:00'>12:54 PM</abbr></a>
</span>
<span class='post-comment-link'>
<a class='comment-link' href='http://www.sanjayuttam.com/2013/04/tfs-download-file-is-corrupt.html#comment-form' onclick=''>
No comments:
    </a>
</span>
<span class='post-icons'>
<span class='item-control blog-admin pid-858847996'>
<a href='http://www.blogger.com/post-edit.g?blogID=5221594185948010636&postID=9155110090740963772&from=pencil' title='Edit Post'>
<img alt='' class='icon-action' height='18' src='http://img2.blogblog.com/img/icon18_edit_allbkg.gif' width='18'/>
</a>
</span>
</span>
<div class='post-share-buttons goog-inline-block'>
<a class='goog-inline-block share-button sb-email' href='http://www.blogger.com/share-post.g?blogID=5221594185948010636&postID=9155110090740963772&target=email' target='_blank' title='Email This'><span class='share-button-link-text'>Email This</span></a><a class='goog-inline-block share-button sb-blog' href='http://www.blogger.com/share-post.g?blogID=5221594185948010636&postID=9155110090740963772&target=blog' onclick='window.open(this.href, "_blank", "height=270,width=475"); return false;' target='_blank' title='BlogThis!'><span class='share-button-link-text'>BlogThis!</span></a><a class='goog-inline-block share-button sb-twitter' href='http://www.blogger.com/share-post.g?blogID=5221594185948010636&postID=9155110090740963772&target=twitter' target='_blank' title='Share to Twitter'><span class='share-button-link-text'>Share to Twitter</span></a><a class='goog-inline-block share-button sb-facebook' href='http://www.blogger.com/share-post.g?blogID=5221594185948010636&postID=9155110090740963772&target=facebook' onclick='window.open(this.href, "_blank", "height=430,width=640"); return false;' target='_blank' title='Share to Facebook'><span class='share-button-link-text'>Share to Facebook</span></a><div class='goog-inline-block dummy-container'><g:plusone source='blogger:blog:plusone' href='http://www.sanjayuttam.com/2013/04/tfs-download-file-is-corrupt.html' size='medium' width='300' annotation='inline'/></div>
</div>
</div>
<div class='post-footer-line post-footer-line-2'><span class='post-labels'>
Labels:
<a href='http://www.sanjayuttam.com/search/label/Continuous%20Integration' rel='tag'>Continuous Integration</a>,
<a href='http://www.sanjayuttam.com/search/label/TFS' rel='tag'>TFS</a>
</span>
</div>
<div class='post-footer-line post-footer-line-3'><span class='post-location'>
</span>
</div>
</div>
</div>
</div>

            </div></div>
          

          <div class="date-outer">
        
<h2 class='date-header'><span>Thursday, January 6, 2011</span></h2>

          <div class="date-posts">
        
<div class='post-outer'>
<div class='post hentry' itemprop='blogPost' itemscope='itemscope' itemtype='http://schema.org/BlogPosting'>
<meta content='5221594185948010636' itemprop='blogId'/>
<meta content='4752980730882996884' itemprop='postId'/>
<a name='4752980730882996884'></a>
<h3 class='post-title entry-title' itemprop='name'>
<a href='http://www.sanjayuttam.com/2011/01/wcf-40-iis7-75-http-404.html'>WCF 4.0, IIS7 / 7.5, HTTP 404</a>
</h3>
<div class='post-header'>
<div class='post-header-line-1'></div>
</div>
<div class='post-body entry-content' id='post-body-4752980730882996884' itemprop='description articleBody'>
<div dir="ltr" style="text-align: left;" trbidi="on">
Wow, that was fun.  I just spent a solid two hours trying to get my pretty new WCF 4.0 service running, using the online REST template on IIS7.5.  It worked without any isssue in the debugger, and, let's just say the error messages were less than helpful.  Failed Request Logging, well, didn't log any failed requests.  The solution?  Run the following:<br />
 
<br />C:\Windows\Microsoft.NET\Framework\v4.0.30319&gt;aspnet_regiis.exe -i &#8211;enable<br /><br />C:\Windows\Microsoft.NET\Framework\v4.0.30319&gt;ServiceModelReg.exe &#8211;r<br /><br />

Important Note....This may modify your existing app pools to use .NET 4.0.  Check them immediately after running the above commands!!<br />
<br />
Enjoy.</div>
<div style='clear: both;'></div>
</div>
<div class='post-footer'>
<div class='post-footer-line post-footer-line-1'><span class='post-author vcard'>
Posted by
<span class='fn' itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'>
<meta content='http://www.blogger.com/profile/05855979220002560513' itemprop='url'/>
<a class='g-profile' href='http://www.blogger.com/profile/05855979220002560513' rel='author' title='author profile'>
<span itemprop='name'>Sanjay Uttam</span>
</a>
</span>
</span>
<span class='post-timestamp'>
at
<meta content='http://www.sanjayuttam.com/2011/01/wcf-40-iis7-75-http-404.html' itemprop='url'/>
<a class='timestamp-link' href='http://www.sanjayuttam.com/2011/01/wcf-40-iis7-75-http-404.html' rel='bookmark' title='permanent link'><abbr class='published' itemprop='datePublished' title='2011-01-06T21:15:00-05:00'>9:15 PM</abbr></a>
</span>
<span class='post-comment-link'>
<a class='comment-link' href='http://www.sanjayuttam.com/2011/01/wcf-40-iis7-75-http-404.html#comment-form' onclick=''>
No comments:
    </a>
</span>
<span class='post-icons'>
<span class='item-control blog-admin pid-858847996'>
<a href='http://www.blogger.com/post-edit.g?blogID=5221594185948010636&postID=4752980730882996884&from=pencil' title='Edit Post'>
<img alt='' class='icon-action' height='18' src='http://img2.blogblog.com/img/icon18_edit_allbkg.gif' width='18'/>
</a>
</span>
</span>
<div class='post-share-buttons goog-inline-block'>
<a class='goog-inline-block share-button sb-email' href='http://www.blogger.com/share-post.g?blogID=5221594185948010636&postID=4752980730882996884&target=email' target='_blank' title='Email This'><span class='share-button-link-text'>Email This</span></a><a class='goog-inline-block share-button sb-blog' href='http://www.blogger.com/share-post.g?blogID=5221594185948010636&postID=4752980730882996884&target=blog' onclick='window.open(this.href, "_blank", "height=270,width=475"); return false;' target='_blank' title='BlogThis!'><span class='share-button-link-text'>BlogThis!</span></a><a class='goog-inline-block share-button sb-twitter' href='http://www.blogger.com/share-post.g?blogID=5221594185948010636&postID=4752980730882996884&target=twitter' target='_blank' title='Share to Twitter'><span class='share-button-link-text'>Share to Twitter</span></a><a class='goog-inline-block share-button sb-facebook' href='http://www.blogger.com/share-post.g?blogID=5221594185948010636&postID=4752980730882996884&target=facebook' onclick='window.open(this.href, "_blank", "height=430,width=640"); return false;' target='_blank' title='Share to Facebook'><span class='share-button-link-text'>Share to Facebook</span></a><div class='goog-inline-block dummy-container'><g:plusone source='blogger:blog:plusone' href='http://www.sanjayuttam.com/2011/01/wcf-40-iis7-75-http-404.html' size='medium' width='300' annotation='inline'/></div>
</div>
</div>
<div class='post-footer-line post-footer-line-2'><span class='post-labels'>
Labels:
<a href='http://www.sanjayuttam.com/search/label/WCF%204.0' rel='tag'>WCF 4.0</a>
</span>
</div>
<div class='post-footer-line post-footer-line-3'><span class='post-location'>
</span>
</div>
</div>
</div>
</div>

            </div></div>
          

          <div class="date-outer">
        
<h2 class='date-header'><span>Wednesday, June 23, 2010</span></h2>

          <div class="date-posts">
        
<div class='post-outer'>
<div class='post hentry' itemprop='blogPost' itemscope='itemscope' itemtype='http://schema.org/BlogPosting'>
<meta content='5221594185948010636' itemprop='blogId'/>
<meta content='1966429547654801147' itemprop='postId'/>
<a name='1966429547654801147'></a>
<div class='post-header'>
<div class='post-header-line-1'></div>
</div>
<div class='post-body entry-content' id='post-body-1966429547654801147' itemprop='description articleBody'>
<div dir="ltr" style="text-align: left;" trbidi="on">
Ah, there was a time early on during the days of classic ASP when I absolutely despised JavaScript.&nbsp; I'm not sure if it was because my untrained eyes invariably missed the periods, or my clumsy fingers were not used to the case-sensitivity, or...I just didn't quite "get it".&nbsp; Actually, it was all of those things.<br />
<br />
More time passed, I became slightly less naive when it came to programming.&nbsp; More importantly, all the AJAX hype came to the forefront.&nbsp; I found myself using JavaScript for more than just elementary client-side validation functions.&nbsp; I suddenly realized I had to actually learn the language that I fostered such hatred for.&nbsp; LEARN?!<br />
<br />
Fast forward a few years...I can't really believe I hated JavaScript as much as I did.&nbsp; JavaScript is a language that is sort of like single-malt scotch.&nbsp; Totally disgusting if you aren't sure what you want.&nbsp; Exquisite in every way if you do.&nbsp; I do a good amount of work in JavaScript these days...both using pure JS and jQuery-magic when appropriate.&nbsp; More often than not I'm writing some AJAX functionality to manipulate the DOM based on some response I get from a service/DB/dolphin/etc.<br />
<br />
I've come to realize that it's easy to write a function, especially in JS, that is cumbersome and not-at-all conducive to being re-used.&nbsp; A while back, I wrote a function that looked like this:<br />
<br />
<br />
<script src="https://gist.github.com/4542580.js"></script><br />
<br />
<br />
<br />
So, what is wrong with this picture?&nbsp; It could be worse, right?&nbsp; I'm passing in the ID of the DOM element that contains, in theory, the e-mail that should get subscribed to updates.&nbsp; I run that through my ValidateEmail() function.&nbsp; If the e-mail isn't valid, I go ahead and hide the success DIV, and show the error DIV..and vice versa.&nbsp; What? It's clever, isn't it?<br />
<br />
Sure. It's great...until a month later you need to use my function and come to the startling realization that the way I wrote my function forces you to have specific elements in your DOM.&nbsp; A damn shame, really.&nbsp; Let's count how many things I see wrong with this method:<br />
<br />
1. It forces the caller to pass in an the IDs of DOM elements.&nbsp; What happens if I want to pass by class?&nbsp; The hard-coded "#" screws everything up.&nbsp; This applies to all the parameters.&nbsp; If I was going to do this at all, I should have passed selectors.<br />
<br />
2. The function leaves me no choice but to have a DOM element for a valid e-mail address, as well as a DOM element for an invalid e-mail address. It's also not at all obvious what those DOM elements accomplish.&nbsp; I happen to know the DOM elements contain validation success/error messages, but someone else wouldn't immediately know that.<br />
<br />
3. Even if I have DOM elements for "success" and "error", I'm modifying the display attribute of my CSS.&nbsp; What if I'd like to toggle a class instead using addClass()?<br />
<br />
In summary, then, I am stupid.&nbsp; But more specifically, I was entirely too short-sighted when I created this function.&nbsp; Sure, it's just one lousy JS function.&nbsp; It serves its purpose.&nbsp; The issue is, it really only serves its purpose given very specific constraints.&nbsp; This is far less than ideal.<br />
<br />
Let's take another crack at this function and see what'd it look like if we incorporate the corrections I allude to above.<br />
<br />
<br />
<script src="https://gist.github.com/4542586.js"></script> <br />
<br />
Okay.&nbsp; That's a little better. <br />
<br />
Now I can pass selectors instead of be bound to passing only DOM IDs.&nbsp; I have also used the jQuery CSS(cssObj) method.&nbsp; This let's you pass a JSON object that is essentially a list of your CSS Attributes and their values.&nbsp; For example, the value of the successCssObj might be this:<br />
<br />
<script src="https://gist.github.com/4542613.js"></script><br />
<br />
At this point, you're probably wondering why I ignored problem number 2, above.&nbsp; The caller is still bound to having a "success" and an "error" DOM element.&nbsp; I could get around this downright silly requirement in a few ways.&nbsp; I could easily check if I've passed a selector in for the "successSelector" and the "errorSelector", and proceed to modify their CSS if they exist.&nbsp; But why bother?&nbsp; That's ugly, it's more code, and it's just going to confuse the crap out of me when I come back to this in another month.<br />
<br />
There is an easier way<br />
<br />
And that way is by using callbacks.&nbsp; If you've used jQuery, or any of the other popular JS frameworks floating around, you've been using them already without even thinking about it.&nbsp; When you call $ajax in jQuery, you're providing both success and error callbacks.&nbsp; Basically, you're optionally passing in a function you'd like to execute if an error occurs, and a function you'd like to execute if no error occurs.&nbsp; The key here is you're passing in the function to execute, and the function contains the logic you to run given a certain condition (An invalid e-mail, in this case).&nbsp; This means that my function is only responsible for doing what it is named....Subscribing an email address for updates.&nbsp; It doesn't care about the caller's DOM, and it sure as hell doesn't care about CSS.&nbsp; My function doesn't even like CSS.&nbsp; Let's take a look at this glorious function after a makeover.<br />
<br />
<script src="https://gist.github.com/4542614.js"></script><br />
<br />
There we go, and we've even made the successCallback and errorCallback parameters optional if we'd prefer not to pass either or both of them.&nbsp; As promised, we've totally separated the caller's context from the objective of the function.&nbsp; Let's take a look at an example of calling this function.&nbsp; Again, this will look very familiar to you if you're used jQuery.&nbsp; That's a good thing.<br />
<br />
<br />
<script src="https://gist.github.com/4542616.js"></script><br />
<br />
There's a reason jQuery and other libraries are created in this manner.&nbsp; It makes it much easier to reuse your code.&nbsp; The combination of using callbacks and optional parameters really inspires a shift in the way I analyze requirements and code methods in general...especially in JavaScript.&nbsp; Furthermore, it doesn't increase complexity.&nbsp; If anything, it is easier to read methods when they truly have one purpose.&nbsp; You don't want to force any method caller/client to have additional requirements, be it DOM elements or anything else.</div>
<div style='clear: both;'></div>
</div>
<div class='post-footer'>
<div class='post-footer-line post-footer-line-1'><span class='post-author vcard'>
Posted by
<span class='fn' itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'>
<meta content='http://www.blogger.com/profile/05855979220002560513' itemprop='url'/>
<a class='g-profile' href='http://www.blogger.com/profile/05855979220002560513' rel='author' title='author profile'>
<span itemprop='name'>Sanjay Uttam</span>
</a>
</span>
</span>
<span class='post-timestamp'>
at
<meta content='http://www.sanjayuttam.com/2010/06/ah-there-was-time-early-on-during-days_23.html' itemprop='url'/>
<a class='timestamp-link' href='http://www.sanjayuttam.com/2010/06/ah-there-was-time-early-on-during-days_23.html' rel='bookmark' title='permanent link'><abbr class='published' itemprop='datePublished' title='2010-06-23T17:07:00-04:00'>5:07 PM</abbr></a>
</span>
<span class='post-comment-link'>
<a class='comment-link' href='http://www.sanjayuttam.com/2010/06/ah-there-was-time-early-on-during-days_23.html#comment-form' onclick=''>
No comments:
    </a>
</span>
<span class='post-icons'>
<span class='item-control blog-admin pid-858847996'>
<a href='http://www.blogger.com/post-edit.g?blogID=5221594185948010636&postID=1966429547654801147&from=pencil' title='Edit Post'>
<img alt='' class='icon-action' height='18' src='http://img2.blogblog.com/img/icon18_edit_allbkg.gif' width='18'/>
</a>
</span>
</span>
<div class='post-share-buttons goog-inline-block'>
<a class='goog-inline-block share-button sb-email' href='http://www.blogger.com/share-post.g?blogID=5221594185948010636&postID=1966429547654801147&target=email' target='_blank' title='Email This'><span class='share-button-link-text'>Email This</span></a><a class='goog-inline-block share-button sb-blog' href='http://www.blogger.com/share-post.g?blogID=5221594185948010636&postID=1966429547654801147&target=blog' onclick='window.open(this.href, "_blank", "height=270,width=475"); return false;' target='_blank' title='BlogThis!'><span class='share-button-link-text'>BlogThis!</span></a><a class='goog-inline-block share-button sb-twitter' href='http://www.blogger.com/share-post.g?blogID=5221594185948010636&postID=1966429547654801147&target=twitter' target='_blank' title='Share to Twitter'><span class='share-button-link-text'>Share to Twitter</span></a><a class='goog-inline-block share-button sb-facebook' href='http://www.blogger.com/share-post.g?blogID=5221594185948010636&postID=1966429547654801147&target=facebook' onclick='window.open(this.href, "_blank", "height=430,width=640"); return false;' target='_blank' title='Share to Facebook'><span class='share-button-link-text'>Share to Facebook</span></a><div class='goog-inline-block dummy-container'><g:plusone source='blogger:blog:plusone' href='http://www.sanjayuttam.com/2010/06/ah-there-was-time-early-on-during-days_23.html' size='medium' width='300' annotation='inline'/></div>
</div>
</div>
<div class='post-footer-line post-footer-line-2'><span class='post-labels'>
</span>
</div>
<div class='post-footer-line post-footer-line-3'><span class='post-location'>
</span>
</div>
</div>
</div>
</div>

            </div></div>
          

          <div class="date-outer">
        
<h2 class='date-header'><span>Monday, November 9, 2009</span></h2>

          <div class="date-posts">
        
<div class='post-outer'>
<div class='post hentry' itemprop='blogPost' itemscope='itemscope' itemtype='http://schema.org/BlogPosting'>
<meta content='5221594185948010636' itemprop='blogId'/>
<meta content='8511548068588762388' itemprop='postId'/>
<a name='8511548068588762388'></a>
<h3 class='post-title entry-title' itemprop='name'>
<a href='http://www.sanjayuttam.com/2009/11/error-handling-in-aspnet-mvc-1-part-2_9.html'>Error Handling in ASP.NET MVC 1 [Part 2 of 2]</a>
</h3>
<div class='post-header'>
<div class='post-header-line-1'></div>
</div>
<div class='post-body entry-content' id='post-body-8511548068588762388' itemprop='description articleBody'>
<div dir="ltr" style="text-align: left;" trbidi="on">
In the <a href="http://sanjayuttam.com/wordpress/index.php/c-sharp/error-handling-in-asp-net-mvc-1-part-1-of-2/">first post</a> in this series, I provided a little info on the HandleError attribute in MVC 1.&nbsp; In case you don&#8217;t want to flip back, the HandleError attribute can decorate a method or a class and will push your users to a generic errors view provided customErrors is &#8220;On&#8221; or &#8220;RemoteOnly&#8221;.&nbsp; There&#8217;s a little more to it, but that&#8217;s all the background we need for this post.<br />
The out-of-the-box HandleError attribute works well, until you&#8217;re in a scenario where you need to do more than hide your errors.&nbsp; Typically, you may want to do some logging or fire-off some alerts.&nbsp; Now, as luck should have it, I did some searching before writing this up and Danny Tuppeny already has a <a href="http://blog.dantup.me.uk/2009/04/aspnet-mvc-handleerror-attribute-custom.html">great post</a> on this very subject&#8230;I encourage you to take a peak at his post, as I&#8217;ve provided a very high-level, yet functional summary below.<br />
<b>The facts are these&#8230;</b><br />
- System.Web.Mvc.Controller contains an OnException method that gets fired when an exception occurs [provided custom errors are On/RemoteOnly in the web.config]<br />
- The OnException method can easily be overridden, allowing you to either completely change behavior or add behavior (by calling base.OnException)<br />
- This method will fire <i><b>regardless</b> of whether your class or method is decorated with HandleError</i><br />
This means that your could will look like this:<br />
<br />
<script src="https://gist.github.com/4542783.js"></script><br />
 
<br />
To get the above code to work you&#8217;d simply make your controller inherit from ControllerBase.&nbsp; Of course, you&#8217;d likely have additional utility-methods in this class that you&#8217;d need in multiple controllers. <br />
<br />
Lines 17 and 18 can be used to push the user to your error view after you execute the DoSomeOtherStuff() method &#8211; this <i>would not require </i>the HandleError attribute.&nbsp; Alternatively, you can execute System.Web.Mvc.Controller&#8217;s OnException by calling it explicitly as it&#8217;s done on line 21.&nbsp; In this case, the HandleError would be required to push your use down the custom-error path you&#8217;ve got configured. <br />
<br />
And that&#8217;s pretty much all there is to centralizing &amp; customizing your error-handling in MVC 1.&nbsp; <br />
<br />
If you came from somewhere else, you may want to take a <a href="http://sanjayuttam.com/wordpress/index.php/c-sharp/error-handling-in-asp-net-mvc-1-part-1-of-2/">look at part 1</a>...</div>
<div style='clear: both;'></div>
</div>
<div class='post-footer'>
<div class='post-footer-line post-footer-line-1'><span class='post-author vcard'>
Posted by
<span class='fn' itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'>
<meta content='http://www.blogger.com/profile/05855979220002560513' itemprop='url'/>
<a class='g-profile' href='http://www.blogger.com/profile/05855979220002560513' rel='author' title='author profile'>
<span itemprop='name'>Sanjay Uttam</span>
</a>
</span>
</span>
<span class='post-timestamp'>
at
<meta content='http://www.sanjayuttam.com/2009/11/error-handling-in-aspnet-mvc-1-part-2_9.html' itemprop='url'/>
<a class='timestamp-link' href='http://www.sanjayuttam.com/2009/11/error-handling-in-aspnet-mvc-1-part-2_9.html' rel='bookmark' title='permanent link'><abbr class='published' itemprop='datePublished' title='2009-11-09T18:06:00-05:00'>6:06 PM</abbr></a>
</span>
<span class='post-comment-link'>
<a class='comment-link' href='http://www.sanjayuttam.com/2009/11/error-handling-in-aspnet-mvc-1-part-2_9.html#comment-form' onclick=''>
No comments:
    </a>
</span>
<span class='post-icons'>
<span class='item-control blog-admin pid-858847996'>
<a href='http://www.blogger.com/post-edit.g?blogID=5221594185948010636&postID=8511548068588762388&from=pencil' title='Edit Post'>
<img alt='' class='icon-action' height='18' src='http://img2.blogblog.com/img/icon18_edit_allbkg.gif' width='18'/>
</a>
</span>
</span>
<div class='post-share-buttons goog-inline-block'>
<a class='goog-inline-block share-button sb-email' href='http://www.blogger.com/share-post.g?blogID=5221594185948010636&postID=8511548068588762388&target=email' target='_blank' title='Email This'><span class='share-button-link-text'>Email This</span></a><a class='goog-inline-block share-button sb-blog' href='http://www.blogger.com/share-post.g?blogID=5221594185948010636&postID=8511548068588762388&target=blog' onclick='window.open(this.href, "_blank", "height=270,width=475"); return false;' target='_blank' title='BlogThis!'><span class='share-button-link-text'>BlogThis!</span></a><a class='goog-inline-block share-button sb-twitter' href='http://www.blogger.com/share-post.g?blogID=5221594185948010636&postID=8511548068588762388&target=twitter' target='_blank' title='Share to Twitter'><span class='share-button-link-text'>Share to Twitter</span></a><a class='goog-inline-block share-button sb-facebook' href='http://www.blogger.com/share-post.g?blogID=5221594185948010636&postID=8511548068588762388&target=facebook' onclick='window.open(this.href, "_blank", "height=430,width=640"); return false;' target='_blank' title='Share to Facebook'><span class='share-button-link-text'>Share to Facebook</span></a><div class='goog-inline-block dummy-container'><g:plusone source='blogger:blog:plusone' href='http://www.sanjayuttam.com/2009/11/error-handling-in-aspnet-mvc-1-part-2_9.html' size='medium' width='300' annotation='inline'/></div>
</div>
</div>
<div class='post-footer-line post-footer-line-2'><span class='post-labels'>
Labels:
<a href='http://www.sanjayuttam.com/search/label/ASP.NET' rel='tag'>ASP.NET</a>,
<a href='http://www.sanjayuttam.com/search/label/C%23%20Code-examples' rel='tag'>C# Code-examples</a>,
<a href='http://www.sanjayuttam.com/search/label/linkedin' rel='tag'>linkedin</a>,
<a href='http://www.sanjayuttam.com/search/label/MVC' rel='tag'>MVC</a>
</span>
</div>
<div class='post-footer-line post-footer-line-3'><span class='post-location'>
</span>
</div>
</div>
</div>
</div>

            </div></div>
          

          <div class="date-outer">
        
<h2 class='date-header'><span>Friday, November 6, 2009</span></h2>

          <div class="date-posts">
        
<div class='post-outer'>
<div class='post hentry' itemprop='blogPost' itemscope='itemscope' itemtype='http://schema.org/BlogPosting'>
<meta content='5221594185948010636' itemprop='blogId'/>
<meta content='4139635244238824548' itemprop='postId'/>
<a name='4139635244238824548'></a>
<h3 class='post-title entry-title' itemprop='name'>
<a href='http://www.sanjayuttam.com/2009/11/error-handling-in-aspnet-mvc-1-part-1_6.html'>Error Handling in ASP.NET MVC 1 [Part 1 of 2]</a>
</h3>
<div class='post-header'>
<div class='post-header-line-1'></div>
</div>
<div class='post-body entry-content' id='post-body-4139635244238824548' itemprop='description articleBody'>
<div dir="ltr" style="text-align: left;" trbidi="on">
I&#8217;ve been using ASP.NET MVC Release 1 for a bit now, and while it&#8217;s definitely not for every application, I happen to like it quite a bit.&nbsp; There has been a lot of activity on MS-centric blogs regarding MVC, but there are still some really mundane tasks that there could be more information on.&nbsp; So, this series of posts isn&#8217;t going to be anything crazy; it will, however, illustrate what options you have to do centralized error-handling using MVC<br />
<b>We&#8217;ll start at the beginning&#8230;</b><br />
The System.Web.Mvc.dll comes with the HandleErrorAttribute class, which contains..wait for it&#8230;the HandleError attribute.&nbsp;&nbsp; This information won&#8217;t be important until later in this series, but the HandleErrorAttribute class inherits from the FilterAttribute class, and implements the IExceptionFilter interface &#8211; the interface requires a method with the following signature. <br /><br />

public virtual void OnException(ExceptionContext filterContext); 
<br /><br />
 
This method is really where the brunt of the work is done when you use the provided [HandleError] attribute.&nbsp; In case you&#8217;ve never taken a look using Reflector, this HandleErrorAttribute&#8217;s implementation of OnException looks like this<br />
<br />
<script src="https://gist.github.com/4542761.js"></script><br />
 
 
<br />
Essentially, you&#8217;re grabbing some information from the ExceptionContext, and you&#8217;re using the HandleErrorInfo class to pass this information back to your view.<br />
<br />
Using [HandleError] is really as easy as using any other attribute.&nbsp; You simply decorate your method or class with the attribute and your errors will be pushed to the default view for errors (Views/Shared/Error.aspx)<br />
&nbsp;Alternatively, you can provide the HandleError attribute with some arguments to specify a view other than the default error-view, or specify a specific view based on the exception type.&nbsp; <br />
<br />The only other thing you&#8217;ll want to make sure you do is ensure your web.config &lt;customErrors&gt; section is configured appropriately.&nbsp; That is, you&#8217;ll want to make sure customErrors mode=&#8221;On&#8221; to test this out.<br />
<br />
Hope this helps somebody; the next part in this series will demonstrate how to add functionality to the existing OnException method that the HandleErrorAttribute class implements, such as logging.<br />
<br />
Don't forget to take a <a href="http://sanjayuttam.com/wordpress/index.php/c-sharp/c-sharp-code-examples/error-handling-in-asp-net-mvc-1-part-2-of-2/">look at part 2</a>!</div>
<div style='clear: both;'></div>
</div>
<div class='post-footer'>
<div class='post-footer-line post-footer-line-1'><span class='post-author vcard'>
Posted by
<span class='fn' itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'>
<meta content='http://www.blogger.com/profile/05855979220002560513' itemprop='url'/>
<a class='g-profile' href='http://www.blogger.com/profile/05855979220002560513' rel='author' title='author profile'>
<span itemprop='name'>Sanjay Uttam</span>
</a>
</span>
</span>
<span class='post-timestamp'>
at
<meta content='http://www.sanjayuttam.com/2009/11/error-handling-in-aspnet-mvc-1-part-1_6.html' itemprop='url'/>
<a class='timestamp-link' href='http://www.sanjayuttam.com/2009/11/error-handling-in-aspnet-mvc-1-part-1_6.html' rel='bookmark' title='permanent link'><abbr class='published' itemprop='datePublished' title='2009-11-06T17:59:00-05:00'>5:59 PM</abbr></a>
</span>
<span class='post-comment-link'>
<a class='comment-link' href='http://www.sanjayuttam.com/2009/11/error-handling-in-aspnet-mvc-1-part-1_6.html#comment-form' onclick=''>
No comments:
    </a>
</span>
<span class='post-icons'>
<span class='item-control blog-admin pid-858847996'>
<a href='http://www.blogger.com/post-edit.g?blogID=5221594185948010636&postID=4139635244238824548&from=pencil' title='Edit Post'>
<img alt='' class='icon-action' height='18' src='http://img2.blogblog.com/img/icon18_edit_allbkg.gif' width='18'/>
</a>
</span>
</span>
<div class='post-share-buttons goog-inline-block'>
<a class='goog-inline-block share-button sb-email' href='http://www.blogger.com/share-post.g?blogID=5221594185948010636&postID=4139635244238824548&target=email' target='_blank' title='Email This'><span class='share-button-link-text'>Email This</span></a><a class='goog-inline-block share-button sb-blog' href='http://www.blogger.com/share-post.g?blogID=5221594185948010636&postID=4139635244238824548&target=blog' onclick='window.open(this.href, "_blank", "height=270,width=475"); return false;' target='_blank' title='BlogThis!'><span class='share-button-link-text'>BlogThis!</span></a><a class='goog-inline-block share-button sb-twitter' href='http://www.blogger.com/share-post.g?blogID=5221594185948010636&postID=4139635244238824548&target=twitter' target='_blank' title='Share to Twitter'><span class='share-button-link-text'>Share to Twitter</span></a><a class='goog-inline-block share-button sb-facebook' href='http://www.blogger.com/share-post.g?blogID=5221594185948010636&postID=4139635244238824548&target=facebook' onclick='window.open(this.href, "_blank", "height=430,width=640"); return false;' target='_blank' title='Share to Facebook'><span class='share-button-link-text'>Share to Facebook</span></a><div class='goog-inline-block dummy-container'><g:plusone source='blogger:blog:plusone' href='http://www.sanjayuttam.com/2009/11/error-handling-in-aspnet-mvc-1-part-1_6.html' size='medium' width='300' annotation='inline'/></div>
</div>
</div>
<div class='post-footer-line post-footer-line-2'><span class='post-labels'>
Labels:
<a href='http://www.sanjayuttam.com/search/label/ASP.NET' rel='tag'>ASP.NET</a>,
<a href='http://www.sanjayuttam.com/search/label/C%23' rel='tag'>C#</a>,
<a href='http://www.sanjayuttam.com/search/label/linkedin' rel='tag'>linkedin</a>,
<a href='http://www.sanjayuttam.com/search/label/MVC' rel='tag'>MVC</a>
</span>
</div>
<div class='post-footer-line post-footer-line-3'><span class='post-location'>
</span>
</div>
</div>
</div>
</div>

            </div></div>
          

          <div class="date-outer">
        
<h2 class='date-header'><span>Tuesday, January 15, 2008</span></h2>

          <div class="date-posts">
        
<div class='post-outer'>
<div class='post hentry' itemprop='blogPost' itemscope='itemscope' itemtype='http://schema.org/BlogPosting'>
<meta content='5221594185948010636' itemprop='blogId'/>
<meta content='7874338828767378919' itemprop='postId'/>
<a name='7874338828767378919'></a>
<h3 class='post-title entry-title' itemprop='name'>
<a href='http://www.sanjayuttam.com/2008/01/aspnet-image-photo-cropper-in-c.html'>ASP.NET Image / Photo Cropper in C#</a>
</h3>
<div class='post-header'>
<div class='post-header-line-1'></div>
</div>
<div class='post-body entry-content' id='post-body-7874338828767378919' itemprop='description articleBody'>
<div dir="ltr" style="text-align: left;" trbidi="on">
For my current project I needed to create some logic for users to upload an image...only problem was the image had to be of a fixed size, and therefore aspect ratio.&nbsp; Enter the need for an image cropper.&nbsp; You've seen them before on a number of sites, like linkedIn, facebook, and everywhere else.&nbsp; I began my journey of trying to find one.&nbsp; There are a fair amount of tutorials/code snippets on the web that illustrate how to do this from the client-side using JavaScript.&nbsp; I also came across some articles on codeProject and such as that explained how to crop images on the server-side.&nbsp; What I couldn't find was an article that tied the client-side JavaScript and the server-side cropping together.&nbsp; And that's exactly what this article is.<br />
Before I get into the fun stuff...the process is really as follows<br />
<br />
&nbsp;&nbsp;&nbsp; User crops image on the client-side<br />
&nbsp;&nbsp;&nbsp; Track the X &amp; Y coordinates, as well as the height and width of the box the user drags over the image<br />
&nbsp;&nbsp;&nbsp; Use the server-side code to actually crop the image [providing the coordinates and dimensions from step 2]<br />
<br />
That's really about it.&nbsp; I should also say that all the JavaScript I used was obtained from http://www.defusion.org.uk/code/javascript-image-cropper-ui-using-prototype-scriptaculous/<br />
<br />
It's a slick piece of code - please check out the site for updates (I believe version 2 is a work in progress) and to donate.<br />
As for the .NET code (C#) - you can obtain it from here:<br />
<br />
You'll need to make sure that you provide write permissions to the directory where you want to save the new, cropped image.&nbsp; Check out line 19, where I set the value for the CROPPED_SAMPLE_PHOTO_URL constant string.<br />
<br />
Note: The demo and the download work slightly differently.&nbsp; This is mainly because I'm saving the image to a session variable for the demo, but using the file system in the download.<br />
<br />
As for the code, the heart of it is really the CropImageFile method, where you re-draw the image taking into account our coordinates and dimensions. <br />
<br />
<script src="https://gist.github.com/4542733.js"></script>
<br />
Enjoy!</div>
<div style='clear: both;'></div>
</div>
<div class='post-footer'>
<div class='post-footer-line post-footer-line-1'><span class='post-author vcard'>
Posted by
<span class='fn' itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'>
<meta content='http://www.blogger.com/profile/05855979220002560513' itemprop='url'/>
<a class='g-profile' href='http://www.blogger.com/profile/05855979220002560513' rel='author' title='author profile'>
<span itemprop='name'>Sanjay Uttam</span>
</a>
</span>
</span>
<span class='post-timestamp'>
at
<meta content='http://www.sanjayuttam.com/2008/01/aspnet-image-photo-cropper-in-c.html' itemprop='url'/>
<a class='timestamp-link' href='http://www.sanjayuttam.com/2008/01/aspnet-image-photo-cropper-in-c.html' rel='bookmark' title='permanent link'><abbr class='published' itemprop='datePublished' title='2008-01-15T16:59:00-05:00'>4:59 PM</abbr></a>
</span>
<span class='post-comment-link'>
<a class='comment-link' href='http://www.sanjayuttam.com/2008/01/aspnet-image-photo-cropper-in-c.html#comment-form' onclick=''>
No comments:
    </a>
</span>
<span class='post-icons'>
<span class='item-control blog-admin pid-858847996'>
<a href='http://www.blogger.com/post-edit.g?blogID=5221594185948010636&postID=7874338828767378919&from=pencil' title='Edit Post'>
<img alt='' class='icon-action' height='18' src='http://img2.blogblog.com/img/icon18_edit_allbkg.gif' width='18'/>
</a>
</span>
</span>
<div class='post-share-buttons goog-inline-block'>
<a class='goog-inline-block share-button sb-email' href='http://www.blogger.com/share-post.g?blogID=5221594185948010636&postID=7874338828767378919&target=email' target='_blank' title='Email This'><span class='share-button-link-text'>Email This</span></a><a class='goog-inline-block share-button sb-blog' href='http://www.blogger.com/share-post.g?blogID=5221594185948010636&postID=7874338828767378919&target=blog' onclick='window.open(this.href, "_blank", "height=270,width=475"); return false;' target='_blank' title='BlogThis!'><span class='share-button-link-text'>BlogThis!</span></a><a class='goog-inline-block share-button sb-twitter' href='http://www.blogger.com/share-post.g?blogID=5221594185948010636&postID=7874338828767378919&target=twitter' target='_blank' title='Share to Twitter'><span class='share-button-link-text'>Share to Twitter</span></a><a class='goog-inline-block share-button sb-facebook' href='http://www.blogger.com/share-post.g?blogID=5221594185948010636&postID=7874338828767378919&target=facebook' onclick='window.open(this.href, "_blank", "height=430,width=640"); return false;' target='_blank' title='Share to Facebook'><span class='share-button-link-text'>Share to Facebook</span></a><div class='goog-inline-block dummy-container'><g:plusone source='blogger:blog:plusone' href='http://www.sanjayuttam.com/2008/01/aspnet-image-photo-cropper-in-c.html' size='medium' width='300' annotation='inline'/></div>
</div>
</div>
<div class='post-footer-line post-footer-line-2'><span class='post-labels'>
</span>
</div>
<div class='post-footer-line post-footer-line-3'><span class='post-location'>
</span>
</div>
</div>
</div>
</div>

        </div></div>
      
<!-- google_ad_section_end -->
</div>
<div class='blog-pager' id='blog-pager'>
<a class='home-link' href='http://www.sanjayuttam.com/'>Home</a>
</div>
<div class='clear'></div>
<div class='blog-feeds'>
<div class='feed-links'>
Subscribe to:
<a class='feed-link' href='http://www.sanjayuttam.com/feeds/posts/default' target='_blank' type='application/atom+xml'>Posts (Atom)</a>
</div>
</div>
<script type="text/javascript">window.___gcfg = {'lang': 'en'};</script>
</div></div>
</div>
</div>
<div class='column-left-outer'>
<div class='column-left-inner'>
<aside>
</aside>
</div>
</div>
<div class='column-right-outer'>
<div class='column-right-inner'>
<aside>
<div class='sidebar section' id='sidebar-right-1'><div class='widget Profile' id='Profile1'>
<h2>About Me</h2>
<div class='widget-content'>
<a href='http://www.blogger.com/profile/05855979220002560513'><img alt='My Photo' class='profile-img' height='67' src='http://1.bp.blogspot.com/-FOsktpdD2vw/UOH7unt7-6I/AAAAAAAAAIk/tK9xSFXUh38/s220/BeFunky_012.jpg' width='80'/></a>
<dl class='profile-datablock'>
<dt class='profile-data'>
<a class='profile-name-link g-profile' href='http://www.blogger.com/profile/05855979220002560513' rel='author' style='background-image: url(//www.blogger.com/img/logo-16.png);'>
Sanjay Uttam
</a>
</dt>
<dd class='profile-textblock'>Software Consultant. Focused on high-traffic SaaS &amp; consumer-facing platforms.</dd>
</dl>
<a class='profile-link' href='http://www.blogger.com/profile/05855979220002560513' rel='author'>View my complete profile</a>
<div class='clear'></div>
<span class='widget-item-control'>
<span class='item-control blog-admin'>
<a class='quickedit' href='//www.blogger.com/rearrange?blogID=5221594185948010636&widgetType=Profile&widgetId=Profile1&action=editWidget&sectionId=sidebar-right-1' onclick='return _WidgetManager._PopupConfig(document.getElementById("Profile1"));' target='configProfile1' title='Edit'>
<img alt='' height='18' src='http://img1.blogblog.com/img/icon18_wrench_allbkg.png' width='18'/>
</a>
</span>
</span>
<div class='clear'></div>
</div>
</div><div class='widget HTML' id='HTML1'>
<h2 class='title'>Elsewhere</h2>
<div class='widget-content'>
<a href="http://www.linkedin.com/in/sanjayuttam">LinkedIn</a>
<br />
<a href="https://twitter.com/sanjayuttam">Twitter</a>
</div>
<div class='clear'></div>
<span class='widget-item-control'>
<span class='item-control blog-admin'>
<a class='quickedit' href='//www.blogger.com/rearrange?blogID=5221594185948010636&widgetType=HTML&widgetId=HTML1&action=editWidget&sectionId=sidebar-right-1' onclick='return _WidgetManager._PopupConfig(document.getElementById("HTML1"));' target='configHTML1' title='Edit'>
<img alt='' height='18' src='http://img1.blogblog.com/img/icon18_wrench_allbkg.png' width='18'/>
</a>
</span>
</span>
<div class='clear'></div>
</div><div class='widget BlogArchive' id='BlogArchive1'>
<h2>Blog Archive</h2>
<div class='widget-content'>
<div class='ltr' id='ArchiveList'>
<div id='BlogArchive1_ArchiveList'>
<ul class='hierarchy'>
<li class='archivedate expanded'>
<a class='toggle'>
<span class='zippy'></span>
</a>
<a class='post-count-link' href='http://www.sanjayuttam.com/search?updated-min=2013-01-01T00:00:00-05:00&amp;updated-max=2014-01-01T00:00:00-05:00&amp;max-results=1'>2013</a>
<span class='post-count' dir='ltr'>(1)</span>
<ul class='hierarchy'>
<li class='archivedate expanded'>
<a class='toggle'>
<span class='zippy'></span>
</a>
<a class='post-count-link' href='http://www.sanjayuttam.com/2013_04_01_archive.html'>April</a>
<span class='post-count' dir='ltr'>(1)</span>
<ul class='posts'>
<li><a href='http://www.sanjayuttam.com/2013/04/tfs-download-file-is-corrupt.html'>TFS: The download file is corrupt. Please get the ...</a></li>
</ul>
</li>
</ul>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle'>
<span class='zippy'></span>
</a>
<a class='post-count-link' href='http://www.sanjayuttam.com/search?updated-min=2011-01-01T00:00:00-05:00&amp;updated-max=2012-01-01T00:00:00-05:00&amp;max-results=1'>2011</a>
<span class='post-count' dir='ltr'>(1)</span>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle'>
<span class='zippy'></span>
</a>
<a class='post-count-link' href='http://www.sanjayuttam.com/2011_01_01_archive.html'>January</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle'>
<span class='zippy'></span>
</a>
<a class='post-count-link' href='http://www.sanjayuttam.com/search?updated-min=2010-01-01T00:00:00-05:00&amp;updated-max=2011-01-01T00:00:00-05:00&amp;max-results=1'>2010</a>
<span class='post-count' dir='ltr'>(1)</span>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle'>
<span class='zippy'></span>
</a>
<a class='post-count-link' href='http://www.sanjayuttam.com/2010_06_01_archive.html'>June</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle'>
<span class='zippy'></span>
</a>
<a class='post-count-link' href='http://www.sanjayuttam.com/search?updated-min=2009-01-01T00:00:00-05:00&amp;updated-max=2010-01-01T00:00:00-05:00&amp;max-results=2'>2009</a>
<span class='post-count' dir='ltr'>(2)</span>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle'>
<span class='zippy'></span>
</a>
<a class='post-count-link' href='http://www.sanjayuttam.com/2009_11_01_archive.html'>November</a>
<span class='post-count' dir='ltr'>(2)</span>
</li>
</ul>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle'>
<span class='zippy'></span>
</a>
<a class='post-count-link' href='http://www.sanjayuttam.com/search?updated-min=2008-01-01T00:00:00-05:00&amp;updated-max=2009-01-01T00:00:00-05:00&amp;max-results=1'>2008</a>
<span class='post-count' dir='ltr'>(1)</span>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle'>
<span class='zippy'></span>
</a>
<a class='post-count-link' href='http://www.sanjayuttam.com/2008_01_01_archive.html'>January</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
</li>
</ul>
</div>
</div>
<div class='clear'></div>
<span class='widget-item-control'>
<span class='item-control blog-admin'>
<a class='quickedit' href='//www.blogger.com/rearrange?blogID=5221594185948010636&widgetType=BlogArchive&widgetId=BlogArchive1&action=editWidget&sectionId=sidebar-right-1' onclick='return _WidgetManager._PopupConfig(document.getElementById("BlogArchive1"));' target='configBlogArchive1' title='Edit'>
<img alt='' height='18' src='http://img1.blogblog.com/img/icon18_wrench_allbkg.png' width='18'/>
</a>
</span>
</span>
<div class='clear'></div>
</div>
</div></div>
</aside>
</div>
</div>
</div>
<div style='clear: both'></div>
<!-- columns -->
</div>
<!-- main -->
</div>
</div>
<div class='main-cap-bottom cap-bottom'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
</div>
<footer>
<div class='footer-outer'>
<div class='footer-cap-top cap-top'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
<div class='fauxborder-left footer-fauxborder-left'>
<div class='fauxborder-right footer-fauxborder-right'></div>
<div class='region-inner footer-inner'>
<div class='foot section' id='footer-1'></div>
<table border='0' cellpadding='0' cellspacing='0' class='section-columns columns-2'>
<tbody>
<tr>
<td class='first columns-cell'>
<div class='foot section' id='footer-2-1'></div>
</td>
<td class='columns-cell'>
<div class='foot section' id='footer-2-2'></div>
</td>
</tr>
</tbody>
</table>
<!-- outside of the include in order to lock Attribution widget -->
<div class='foot section' id='footer-3'><div class='widget Attribution' id='Attribution1'>
<div class='widget-content' style='text-align: center;'>
Simple template. Powered by <a href='http://www.blogger.com' target='_blank'>Blogger</a>.
</div>
<div class='clear'></div>
<span class='widget-item-control'>
<span class='item-control blog-admin'>
<a class='quickedit' href='//www.blogger.com/rearrange?blogID=5221594185948010636&widgetType=Attribution&widgetId=Attribution1&action=editWidget&sectionId=footer-3' onclick='return _WidgetManager._PopupConfig(document.getElementById("Attribution1"));' target='configAttribution1' title='Edit'>
<img alt='' height='18' src='http://img1.blogblog.com/img/icon18_wrench_allbkg.png' width='18'/>
</a>
</span>
</span>
<div class='clear'></div>
</div></div>
</div>
</div>
<div class='footer-cap-bottom cap-bottom'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
</div>
</footer>
<!-- content -->
</div>
</div>
<div class='content-cap-bottom cap-bottom'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
</div>
</div>
<script type='text/javascript'>
    window.setTimeout(function() {
        document.body.className = document.body.className.replace('loading', '');
      }, 10);
  </script>
<script type="text/javascript">
if (window.jstiming) window.jstiming.load.tick('widgetJsBefore');
</script><script type="text/javascript" src="https://www.blogger.com/static/v1/widgets/2996807229-widgets.js"></script>
<script type="text/javascript" src="https://apis.google.com/js/plusone.js"></script>
<script type='text/javascript'>
if (typeof(BLOG_attachCsiOnload) != 'undefined' && BLOG_attachCsiOnload != null) { window['blogger_templates_experiment_id'] = "templatesV2";window['blogger_blog_id'] = '5221594185948010636';BLOG_attachCsiOnload(''); }_WidgetManager._Init('//www.blogger.com/rearrange?blogID\x3d5221594185948010636','//www.sanjayuttam.com/','5221594185948010636');
_WidgetManager._SetDataContext([{'name': 'blog', 'data': {'blogId': '5221594185948010636', 'bloggerUrl': 'http://www.blogger.com', 'title': 'Sanjay Uttam', 'pageType': 'index', 'url': 'http://www.sanjayuttam.com/', 'canonicalUrl': 'http://www.sanjayuttam.com/', 'canonicalHomepageUrl': 'http://www.sanjayuttam.com/', 'homepageUrl': 'http://www.sanjayuttam.com/', 'blogspotFaviconUrl': 'http://www.sanjayuttam.com/favicon.ico', 'enabledCommentProfileImages': true, 'adultContent': false, 'disableAdSenseWidget': false, 'analyticsAccountNumber': 'UA-17100031-1', 'searchLabel': '', 'searchQuery': '', 'pageName': '', 'pageTitle': 'Sanjay Uttam', 'encoding': 'UTF-8', 'locale': 'en', 'localeUnderscoreDelimited': 'en', 'isPrivate': false, 'isMobile': false, 'isMobileRequest': false, 'mobileClass': '', 'isPrivateBlog': false, 'languageDirection': 'ltr', 'feedLinks': '\74link rel\75\42alternate\42 type\75\42application/atom+xml\42 title\75\42Sanjay Uttam - Atom\42 href\75\42http://www.sanjayuttam.com/feeds/posts/default\42 /\76\n\74link rel\75\42alternate\42 type\75\42application/rss+xml\42 title\75\42Sanjay Uttam - RSS\42 href\75\42http://www.sanjayuttam.com/feeds/posts/default?alt\75rss\42 /\76\n\74link rel\75\42service.post\42 type\75\42application/atom+xml\42 title\75\42Sanjay Uttam - Atom\42 href\75\42http://www.blogger.com/feeds/5221594185948010636/posts/default\42 /\76\n', 'meTag': '\74link rel\75\42me\42 href\75\42http://www.blogger.com/profile/05855979220002560513\42 /\76\n', 'openIdOpTag': '\74link rel\75\42openid.server\42 href\75\42http://www.blogger.com/openid-server.g\42 /\76\n\74link rel\75\42openid.delegate\42 href\75\42http://www.sanjayuttam.com/\42 /\76\n', 'imageSrcTag': '', 'latencyHeadScript': '\74script type\75\42text/javascript\42\76(function() { var b\75window,f\75\42jstiming\42,g\75\42tick\42;(function(){function d(a){this.t\75{};this.tick\75function(a,d,c){var e\75void 0!\75c?c:(new Date).getTime();this.t[a]\75[e,d];if(void 0\75\75c)try{b.console.timeStamp(\42CSI/\42+a)}catch(h){}};this[g](\42start\42,null,a)}var a;b.performance\46\46(a\75b.performance.timing);var m\75a?new d(a.responseStart):new d;b.jstiming\75{Timer:d,load:m};if(a){var c\75a.navigationStart,h\75a.responseStart;0\74c\46\46h\76\75c\46\46(b[f].srt\75h-c)}if(a){var e\75b[f].load;0\74c\46\46h\76\75c\46\46(e[g](\42_wtsrt\42,void 0,c),e[g](\42wtsrt_\42,\42_wtsrt\42,h),e[g](\42tbsd_\42,\42wtsrt_\42))}try{a\75null,\nb.chrome\46\46b.chrome.csi\46\46(a\75Math.floor(b.chrome.csi().pageT),e\46\0460\74c\46\46(e[g](\42_tbnd\42,void 0,b.chrome.csi().startE),e[g](\42tbnd_\42,\42_tbnd\42,c))),null\75\75a\46\46b.gtbExternal\46\46(a\75b.gtbExternal.pageT()),null\75\75a\46\46b.external\46\46(a\75b.external.pageT,e\46\0460\74c\46\46(e[g](\42_tbnd\42,void 0,b.external.startE),e[g](\42tbnd_\42,\42_tbnd\42,c))),a\46\46(b[f].pt\75a)}catch(n){}})();b.tickAboveFold\75function(d){var a\0750;if(d.offsetParent){do a+\75d.offsetTop;while(d\75d.offsetParent)}d\75a;750\76\75d\46\46b[f].load[g](\42aft\42)};var k\75!1;function l(){k||(k\75!0,b[f].load[g](\42firstScrollTime\42))}b.addEventListener?b.addEventListener(\42scroll\42,l,!1):b.attachEvent(\42onscroll\42,l);\n })();\74/script\076', 'mobileHeadScript': '', 'ieCssRetrofitLinks': '\74!--[if IE]\76\74script type\75\42text/javascript\42 src\75\42https://www.blogger.com/static/v1/jsbin/4163410827-ieretrofit.js\42\76\74/script\76\n\74![endif]--\076', 'view': '', 'dynamicViewsCommentsSrc': '//www.blogblog.com/dynamicviews/4224c15c4e7c9321/js/comments.js', 'dynamicViewsScriptSrc': '//www.blogblog.com/dynamicviews/d6f37bb30c327165', 'plusOneApiSrc': 'https://apis.google.com/js/plusone.js', 'testHtml5CssSrc': 'https://www.blogger.com/static/v1/widgets/2412321170-css_bundle_html5.css', 'sf': 'n'}}, {'name': 'skin', 'data': {'vars': {'content_padding': '10px', 'paging_background': 'transparent none no-repeat scroll top center', 'image_border_small_size': '0', 'body_background_gradient_cap': 'none', 'tabs_selected_background_color': '#000000', 'body_rule_color': '#404040', 'header_shadow_spread': '1px', 'header_shadow_offset_left': '-1px', 'header_padding': '30px', 'link_visited_color': '#cc6600', 'mobile_background_size': 'auto', 'post_title_font': 'normal normal 22px Arial, Tahoma, Helvetica, FreeSans, sans-serif', 'tabs_text_color': '#999999', 'date_header_margin': 'inherit', 'header_background_gradient': 'none', 'content_shadow_spread_webkit': '5px', 'header_bottom_border_size': '1px', 'header_shadow_offset_top': '-1px', 'mobile_button_color': '#ffffff', 'widget_title_font': 'normal bold 11px Arial, Tahoma, Helvetica, FreeSans, sans-serif', 'main_section_margin': '15px', 'keycolor': '#dd7700', 'content_shadow_spread': '40px', 'image_background_color': '#111111', 'header_font': 'normal normal 60px Arial, Tahoma, Helvetica, FreeSans, sans-serif', 'header_background_color': 'transparent', 'main_border_width': '0', 'main_padding': '15px', 'tabs_border_color': '#404040', 'image_text_color': '#cccccc', 'description_text_size': '140%', 'post_footer_background_color': '#303030', 'body_background_gradient_tile': 'none', 'page_width': 'auto', 'tabs_background_gradient': 'none', 'mobile_background_overlay': 'transparent none repeat scroll top left', 'main_padding_bottom': '30px', 'tabs_background_color': '#222222', 'image_border_large_size': '1px', 'post_margin_bottom': '25px', 'body_background_override': '', 'tabs_margin_side': '30px', 'link_hover_color': '#cc6600', 'description_text_color': '#aaaaaa', 'body_text_color': '#cccccc', 'content_padding_horizontal': '10px', 'endSide': 'right', 'page_width_selector': '.region-inner', 'date_header_padding': 'inherit', 'post_footer_text_color': '#888888', 'startSide': 'left', 'date_header_color': '#cccccc', 'tabs_font': 'normal normal 14px Arial, Tahoma, Helvetica, FreeSans, sans-serif', 'post_footer_border_color': '#444444', 'body_font': 'normal normal 12px Arial, Tahoma, Helvetica, FreeSans, sans-serif', 'footer_bevel': '0', 'tabs_bevel_border_width': '0', 'date_header_background_color': 'transparent', 'content_shadow_spread_ie': '10px', 'widget_title_text_color': '#ffffff', 'header_border_horizontalsize': '0', 'image_border_color': '#111111', 'tabs_border_width': '1px', 'content_background_color': '#333333', 'link_color': '#dd7700', 'header_text_color': '#ffffff', 'date_header_letterspacing': 'inherit', 'tabs_margin_top': '0', 'main_padding_top': '30px', 'header_border_size': '1px', 'tabs_selected_text_color': '#ffffff', 'content_background_color_selector': '.content-inner', 'body_background_color': '#292929', 'widget_alternate_text_color': '#999999'}, 'override': ''}}, {'name': 'view', 'data': {'classic': {'name': 'classic', 'url': '/?view\75classic'}, 'flipcard': {'name': 'flipcard', 'url': '/?view\75flipcard'}, 'magazine': {'name': 'magazine', 'url': '/?view\75magazine'}, 'mosaic': {'name': 'mosaic', 'url': '/?view\75mosaic'}, 'sidebar': {'name': 'sidebar', 'url': '/?view\75sidebar'}, 'snapshot': {'name': 'snapshot', 'url': '/?view\75snapshot'}, 'timeslide': {'name': 'timeslide', 'url': '/?view\75timeslide'}}}]);
_WidgetManager._RegisterWidget('_ProfileView', new _WidgetInfo('Profile1', 'sidebar-right-1', null, document.getElementById('Profile1'), {}, 'displayModeFull'));
_WidgetManager._RegisterWidget('_HTMLView', new _WidgetInfo('HTML1', 'sidebar-right-1', null, document.getElementById('HTML1'), {}, 'displayModeFull'));
_WidgetManager._RegisterWidget('_BlogArchiveView', new _WidgetInfo('BlogArchive1', 'sidebar-right-1', null, document.getElementById('BlogArchive1'), {'languageDirection': 'ltr'}, 'displayModeFull'));
_WidgetManager._RegisterWidget('_AttributionView', new _WidgetInfo('Attribution1', 'footer-3', null, document.getElementById('Attribution1'), {'attribution': 'Simple template. Powered by \74a href\75\47http://www.blogger.com\47 target\75\47_blank\47\76Blogger\74/a\76.'}, 'displayModeFull'));
_WidgetManager._RegisterWidget('_HeaderView', new _WidgetInfo('Header1', 'header', null, document.getElementById('Header1'), {}, 'displayModeFull'));
_WidgetManager._RegisterWidget('_NavbarView', new _WidgetInfo('Navbar1', 'navbar', null, document.getElementById('Navbar1'), {}, 'displayModeFull'));
_WidgetManager._RegisterWidget('_BlogView', new _WidgetInfo('Blog1', 'main', null, document.getElementById('Blog1'), {'cmtInteractionsEnabled': false, 'lightboxEnabled': true, 'lightboxModuleUrl': 'https://www.blogger.com/static/v1/jsbin/1153839444-lbx.js', 'lightboxCssUrl': 'https://www.blogger.com/static/v1/v-css/4138445517-lightbox_bundle.css'}, 'displayModeFull'));
_WidgetManager._RegisterWidget('_PageListView', new _WidgetInfo('PageList1', 'null', null, document.getElementById('PageList1'), {'title': 'Pages', 'links': [{'href': 'http://www.sanjayuttam.com/', 'title': 'Home', 'isCurrentPage': true}], 'mobile': false}, 'displayModeFull'));
</script>
</body>
</html>