<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6424150166237404359</id><updated>2011-11-28T08:49:40.656+08:00</updated><category term='Xobni'/><category term='Team Foundation Server'/><category term='SQL'/><category term='Regionerate'/><category term='Microsoft Office Live Workspace (Beta)'/><category term='SgDotNet'/><category term='Magazines'/><category term='Microsoft Search Engine Optimization Toolkit'/><category term='Microsoft SharedView'/><category term='FarPoint'/><category term='Visual Studio 2005'/><category term='GhostDoc'/><category term='Objectives'/><category term='Remote Desktop'/><category term='Graphic'/><category term='Web browsers'/><category term='ASP.NET MVC'/><category term='Microsoft Search Server 2008'/><category term='Microsoft SharePoint'/><category term='Web design'/><category term='CSLA'/><category term='Visual Studio 2008'/><category term='Robocopy'/><category term='Microsoft Software Licensing and Protection Services'/><category term='.Net 3.5'/><category term='JavaSun'/><category term='SMTP'/><category term='Solutions Architect'/><category term='Parallel FX Library'/><category term='Windows Azure'/><category term='Events'/><category term='IsolatedStorage'/><category term='A Slice of Life'/><category term='ADO.Net'/><category term='LINQ'/><category term='Composite UI Application Block'/><category term='PDF Compressor'/><category term='SDLC'/><category term='At Work'/><category term='OpenXML'/><category term='PMP'/><category term='Jobs'/><category term='CSS (Cascading Style Sheet)'/><category term='Web Service'/><category term='Regular expression'/><category term='TechEd2008'/><category term='C# Remoting'/><category term='EduSeek'/><category term='Scrum'/><category term='Astoria'/><category term='ASP.NET MVC 2'/><category term='Tips and Tricks'/><category term='Serialization'/><category term='Silverlight'/><title type='text'>han cheng's tech blog</title><subtitle type='html'>responsibility, respect, fairness, and honesty</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>87</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-8314381098769502312</id><published>2011-10-02T23:26:00.000+08:00</published><updated>2011-10-02T23:26:59.887+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><title type='text'>File has invalid value "&gt;&gt;&gt;&gt;&gt;&gt;&gt; .mine". Illegal characters in path.</title><content type='html'>Problem: When you try to build a solution in Visual Studio, there is an error "File has invalid value "&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; .mine". Illegal characters in path."&lt;br /&gt;&lt;br /&gt;Solution: Delete the obj folder in each project that is giving this error and re-compile. In simple terms, Choose Rebuild solution will clean the obj and build the solution again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-8314381098769502312?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/8314381098769502312/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=8314381098769502312' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/8314381098769502312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/8314381098769502312'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2011/10/file-has-invalid-value-mine-illegal.html' title='File has invalid value &quot;&gt;&gt;&gt;&gt;&gt;&gt;&gt; .mine&quot;. Illegal characters in path.'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-8276854556904584767</id><published>2011-01-19T13:38:00.000+08:00</published><updated>2011-01-19T13:38:59.946+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Remote Desktop'/><title type='text'>Ctrl + Alt + Del in Remote Desktop</title><content type='html'>To send Ctrl + Alt + Del keystrokes to the client machine connected via remote desktop, use &lt;b&gt;Ctrl + Alt + End&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-8276854556904584767?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/8276854556904584767/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=8276854556904584767' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/8276854556904584767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/8276854556904584767'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2011/01/ctrl-alt-del-in-remote-desktop.html' title='Ctrl + Alt + Del in Remote Desktop'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-110246638795260372</id><published>2010-11-08T11:01:00.000+08:00</published><updated>2010-11-08T11:01:29.819+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='LINQ'/><title type='text'>Caching the results of LINQ queries</title><content type='html'>The overall idea is to generate a hash key using the linq query statement and cache the results of this linq query with the generated hash key.&lt;br /&gt;&lt;br /&gt;&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre{ font-size: small; color: black; font-family: Consolas, "Courier New", Courier, Monospace; background-color: #ffffff; /*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em;}.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; QueryResultCache&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="rem"&gt;/// Returns the result of the query; if possible from the cache, otherwise&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    &lt;span class="rem"&gt;/// the query is materialized and the result cached before being returned.&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    &lt;span class="rem"&gt;/// The cache entry has a one minute sliding expiration with normal priority.&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; IEnumerable&amp;lt;T&amp;gt; FromCache&amp;lt;T&amp;gt;(&lt;span class="kwrd"&gt;this&lt;/span&gt; IQueryable&amp;lt;T&amp;gt; query)&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; query.FromCache(CacheItemPriority.Normal, TimeSpan.FromMinutes(1));&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;    &lt;span class="rem"&gt;/// Returns the result of the query; if possible from the cache, otherwise&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;    &lt;span class="rem"&gt;/// the query is materialized and the result cached before being returned.&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; IEnumerable&amp;lt;T&amp;gt; FromCache&amp;lt;T&amp;gt;(&lt;span class="kwrd"&gt;this&lt;/span&gt; IQueryable&amp;lt;T&amp;gt; query,&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;        CacheItemPriority priority,&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;        TimeSpan slidingExpiration)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;    {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;        &lt;span class="rem"&gt;// locally evaluate as much of the query as possible&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;        var expression = Evaluator.PartialEval(&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;            query.Expression,&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;            QueryResultCache.CanBeEvaluatedLocally);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;        &lt;span class="rem"&gt;// use the string representation of the query for the cache key&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;        &lt;span class="kwrd"&gt;string&lt;/span&gt; key = expression.ToString();&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;        &lt;span class="rem"&gt;// the key is potentially very long, so use an md5 fingerprint&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;        &lt;span class="rem"&gt;// (fine if the query result data isn't critically sensitive)&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;        key = key.ToMd5Fingerprint();&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;        &lt;span class="rem"&gt;// try to get the query result from the cache&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;        var result = HttpRuntime.Cache.Get(key) &lt;span class="kwrd"&gt;as&lt;/span&gt; List&amp;lt;T&amp;gt;;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (result == &lt;span class="kwrd"&gt;null&lt;/span&gt;)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;            &lt;span class="rem"&gt;// todo: ... ensure that the query results do not&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;            &lt;span class="rem"&gt;// hold on to resources for your particular data source&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  41:  &lt;/span&gt;            &lt;span class="rem"&gt;//&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  42:  &lt;/span&gt;            &lt;span class="rem"&gt;// for entity framework queries, set to NoTracking&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  43:  &lt;/span&gt;            var entityQuery = query &lt;span class="kwrd"&gt;as&lt;/span&gt; ObjectQuery&amp;lt;T&amp;gt;;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  44:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (entityQuery != &lt;span class="kwrd"&gt;null&lt;/span&gt;)&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  45:  &lt;/span&gt;            {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  46:  &lt;/span&gt;                entityQuery.MergeOption = MergeOption.NoTracking;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  47:  &lt;/span&gt;            }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  48:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  49:  &lt;/span&gt;            &lt;span class="rem"&gt;// materialize the query&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  50:  &lt;/span&gt;            result = query.ToList();&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  51:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  52:  &lt;/span&gt;            HttpRuntime.Cache.Insert(&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  53:  &lt;/span&gt;                key,&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  54:  &lt;/span&gt;                result,&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  55:  &lt;/span&gt;                &lt;span class="kwrd"&gt;null&lt;/span&gt;, &lt;span class="rem"&gt;// no cache dependency&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  56:  &lt;/span&gt;                Cache.NoAbsoluteExpiration,&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  57:  &lt;/span&gt;                slidingExpiration,&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  58:  &lt;/span&gt;                priority,&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  59:  &lt;/span&gt;                &lt;span class="kwrd"&gt;null&lt;/span&gt;); &lt;span class="rem"&gt;// no removal notification&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  60:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  61:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  62:  &lt;/span&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; result;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  63:  &lt;/span&gt;    }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  64:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  65:  &lt;/span&gt;    &lt;span class="kwrd"&gt;static&lt;/span&gt; Func&amp;lt;Expression, &lt;span class="kwrd"&gt;bool&lt;/span&gt;&amp;gt; CanBeEvaluatedLocally&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  66:  &lt;/span&gt;    {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  67:  &lt;/span&gt;        get&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  68:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  69:  &lt;/span&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; expression =&amp;gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  70:  &lt;/span&gt;                {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  71:  &lt;/span&gt;                    &lt;span class="rem"&gt;// don't evaluate parameters&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  72:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;if&lt;/span&gt; (expression.NodeType == ExpressionType.Parameter)&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  73:  &lt;/span&gt;                        &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  74:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  75:  &lt;/span&gt;                    &lt;span class="rem"&gt;// can't evaluate queries&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  76:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(IQueryable).IsAssignableFrom(expression.Type))&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  77:  &lt;/span&gt;                        &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  78:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  79:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  80:  &lt;/span&gt;                };&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  81:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  82:  &lt;/span&gt;    }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  83:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  84:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  85:  &lt;/span&gt;    &lt;span class="rem"&gt;/// Creates an MD5 fingerprint of the string.&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  86:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  87:  &lt;/span&gt;    &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; ToMd5Fingerprint(&lt;span class="kwrd"&gt;this&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; s)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  88:  &lt;/span&gt;    {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  89:  &lt;/span&gt;        var bytes = Encoding.Unicode.GetBytes(s.ToCharArray());&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  90:  &lt;/span&gt;        var hash = &lt;span class="kwrd"&gt;new&lt;/span&gt; MD5CryptoServiceProvider().ComputeHash(bytes);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  91:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  92:  &lt;/span&gt;        &lt;span class="rem"&gt;// concat the hash bytes into one long string&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  93:  &lt;/span&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; hash.Aggregate(&lt;span class="kwrd"&gt;new&lt;/span&gt; StringBuilder(32),&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  94:  &lt;/span&gt;            (sb, b) =&amp;gt; sb.Append(b.ToString(&lt;span class="str"&gt;"X2"&lt;/span&gt;)))&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  95:  &lt;/span&gt;            .ToString();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  96:  &lt;/span&gt;    }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  97:  &lt;/span&gt;}&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  98:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  99:  &lt;/span&gt;&lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 100:  &lt;/span&gt;&lt;span class="rem"&gt;/// Enables the partial evalutation of queries.&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 101:  &lt;/span&gt;&lt;span class="rem"&gt;/// From http://msdn.microsoft.com/en-us/library/bb546158.aspx&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 102:  &lt;/span&gt;&lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 103:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Evaluator&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 104:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 105:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 106:  &lt;/span&gt;    &lt;span class="rem"&gt;/// Performs evaluation &amp;amp; replacement of independent sub-trees&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 107:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 108:  &lt;/span&gt;    &lt;span class="rem"&gt;///&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 109:  &lt;/span&gt;&amp;lt;param name=&lt;span class="str"&gt;"expression"&lt;/span&gt;&amp;gt;The root of the expression tree.&amp;lt;/param&amp;gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 110:  &lt;/span&gt;    &lt;span class="rem"&gt;///&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 111:  &lt;/span&gt;&amp;lt;param name=&lt;span class="str"&gt;"fnCanBeEvaluated"&lt;/span&gt;&amp;gt;A function that decides whether a given expression node can be part of the local function.&amp;lt;/param&amp;gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 112:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;A new tree with sub-trees evaluated and replaced.&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 113:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; Expression PartialEval(Expression expression, Func&amp;lt;Expression, &lt;span class="kwrd"&gt;bool&lt;/span&gt;&amp;gt; fnCanBeEvaluated)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 114:  &lt;/span&gt;    {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 115:  &lt;/span&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; SubtreeEvaluator(&lt;span class="kwrd"&gt;new&lt;/span&gt; Nominator(fnCanBeEvaluated).Nominate(expression)).Eval(expression);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 116:  &lt;/span&gt;    }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 117:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 118:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 119:  &lt;/span&gt;    &lt;span class="rem"&gt;/// Performs evaluation &amp;amp; replacement of independent sub-trees&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 120:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 121:  &lt;/span&gt;    &lt;span class="rem"&gt;///&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 122:  &lt;/span&gt;&amp;lt;param name=&lt;span class="str"&gt;"expression"&lt;/span&gt;&amp;gt;The root of the expression tree.&amp;lt;/param&amp;gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 123:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;A new tree with sub-trees evaluated and replaced.&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 124:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; Expression PartialEval(Expression expression)&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 125:  &lt;/span&gt;    {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 126:  &lt;/span&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; PartialEval(expression, Evaluator.CanBeEvaluatedLocally);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 127:  &lt;/span&gt;    }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 128:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 129:  &lt;/span&gt;    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; CanBeEvaluatedLocally(Expression expression)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 130:  &lt;/span&gt;    {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 131:  &lt;/span&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; expression.NodeType != ExpressionType.Parameter;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 132:  &lt;/span&gt;    }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 133:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 134:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 135:  &lt;/span&gt;    &lt;span class="rem"&gt;/// Evaluates &amp;amp; replaces sub-trees when first candidate is reached (top-down)&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 136:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 137:  &lt;/span&gt;    &lt;span class="kwrd"&gt;class&lt;/span&gt; SubtreeEvaluator : ExpressionVisitor&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 138:  &lt;/span&gt;    {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 139:  &lt;/span&gt;        HashSet&amp;lt;Expression&amp;gt; candidates;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 140:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 141:  &lt;/span&gt;        &lt;span class="kwrd"&gt;internal&lt;/span&gt; SubtreeEvaluator(HashSet&amp;lt;Expression&amp;gt; candidates)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 142:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 143:  &lt;/span&gt;            &lt;span class="kwrd"&gt;this&lt;/span&gt;.candidates = candidates;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 144:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 145:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 146:  &lt;/span&gt;        &lt;span class="kwrd"&gt;internal&lt;/span&gt; Expression Eval(Expression exp)&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 147:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 148:  &lt;/span&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.Visit(exp);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 149:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 150:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 151:  &lt;/span&gt;        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; Expression Visit(Expression exp)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 152:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 153:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (exp == &lt;span class="kwrd"&gt;null&lt;/span&gt;)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 154:  &lt;/span&gt;            {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 155:  &lt;/span&gt;                &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;null&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 156:  &lt;/span&gt;            }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 157:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;this&lt;/span&gt;.candidates.Contains(exp))&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 158:  &lt;/span&gt;            {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 159:  &lt;/span&gt;                &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.Evaluate(exp);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 160:  &lt;/span&gt;            }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 161:  &lt;/span&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;base&lt;/span&gt;.Visit(exp);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 162:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 163:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 164:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; Expression Evaluate(Expression e)&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 165:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 166:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (e.NodeType == ExpressionType.Constant)&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 167:  &lt;/span&gt;            {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 168:  &lt;/span&gt;                &lt;span class="kwrd"&gt;return&lt;/span&gt; e;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 169:  &lt;/span&gt;            }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 170:  &lt;/span&gt;            LambdaExpression lambda = Expression.Lambda(e);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 171:  &lt;/span&gt;            Delegate fn = lambda.Compile();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 172:  &lt;/span&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; Expression.Constant(fn.DynamicInvoke(&lt;span class="kwrd"&gt;null&lt;/span&gt;), e.Type);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 173:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 174:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 175:  &lt;/span&gt;    }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 176:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 177:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 178:  &lt;/span&gt;    &lt;span class="rem"&gt;/// Performs bottom-up analysis to determine which nodes can possibly&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 179:  &lt;/span&gt;    &lt;span class="rem"&gt;/// be part of an evaluated sub-tree.&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 180:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 181:  &lt;/span&gt;    &lt;span class="kwrd"&gt;class&lt;/span&gt; Nominator : ExpressionVisitor&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 182:  &lt;/span&gt;    {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 183:  &lt;/span&gt;        Func&amp;lt;Expression, &lt;span class="kwrd"&gt;bool&lt;/span&gt;&amp;gt; fnCanBeEvaluated;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 184:  &lt;/span&gt;        HashSet&amp;lt;Expression&amp;gt; candidates;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 185:  &lt;/span&gt;        &lt;span class="kwrd"&gt;bool&lt;/span&gt; cannotBeEvaluated;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 186:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 187:  &lt;/span&gt;        &lt;span class="kwrd"&gt;internal&lt;/span&gt; Nominator(Func&amp;lt;Expression, &lt;span class="kwrd"&gt;bool&lt;/span&gt;&amp;gt; fnCanBeEvaluated)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 188:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 189:  &lt;/span&gt;            &lt;span class="kwrd"&gt;this&lt;/span&gt;.fnCanBeEvaluated = fnCanBeEvaluated;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 190:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 191:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 192:  &lt;/span&gt;        &lt;span class="kwrd"&gt;internal&lt;/span&gt; HashSet&amp;lt;Expression&amp;gt; Nominate(Expression expression)&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 193:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 194:  &lt;/span&gt;            &lt;span class="kwrd"&gt;this&lt;/span&gt;.candidates = &lt;span class="kwrd"&gt;new&lt;/span&gt; HashSet&amp;lt;Expression&amp;gt;();&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 195:  &lt;/span&gt;            &lt;span class="kwrd"&gt;this&lt;/span&gt;.Visit(expression);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 196:  &lt;/span&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.candidates;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 197:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 198:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 199:  &lt;/span&gt;        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; Expression Visit(Expression expression)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 200:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 201:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (expression != &lt;span class="kwrd"&gt;null&lt;/span&gt;)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 202:  &lt;/span&gt;            {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 203:  &lt;/span&gt;                &lt;span class="kwrd"&gt;bool&lt;/span&gt; saveCannotBeEvaluated = &lt;span class="kwrd"&gt;this&lt;/span&gt;.cannotBeEvaluated;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 204:  &lt;/span&gt;                &lt;span class="kwrd"&gt;this&lt;/span&gt;.cannotBeEvaluated = &lt;span class="kwrd"&gt;false&lt;/span&gt;;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 205:  &lt;/span&gt;                &lt;span class="kwrd"&gt;base&lt;/span&gt;.Visit(expression);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 206:  &lt;/span&gt;                &lt;span class="kwrd"&gt;if&lt;/span&gt; (!&lt;span class="kwrd"&gt;this&lt;/span&gt;.cannotBeEvaluated)&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 207:  &lt;/span&gt;                {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 208:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;this&lt;/span&gt;.fnCanBeEvaluated(expression))&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 209:  &lt;/span&gt;                    {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 210:  &lt;/span&gt;                        &lt;span class="kwrd"&gt;this&lt;/span&gt;.candidates.Add(expression);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 211:  &lt;/span&gt;                    }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 212:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 213:  &lt;/span&gt;                    {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 214:  &lt;/span&gt;                        &lt;span class="kwrd"&gt;this&lt;/span&gt;.cannotBeEvaluated = &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 215:  &lt;/span&gt;                    }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 216:  &lt;/span&gt;                }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 217:  &lt;/span&gt;                &lt;span class="kwrd"&gt;this&lt;/span&gt;.cannotBeEvaluated |= saveCannotBeEvaluated;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 218:  &lt;/span&gt;            }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 219:  &lt;/span&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; expression;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 220:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 221:  &lt;/span&gt;    }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 222:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp;The source code can be found from the author's website below.&lt;br /&gt;&lt;br /&gt;Source:&lt;br /&gt;Monty’s Gush&lt;br /&gt;Caching the results of LINQ queries&lt;br /&gt;http://petemontgomery.wordpress.com/2008/08/07/caching-the-results-of-linq-queries/&lt;br /&gt;08 Nov 2010&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-110246638795260372?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/110246638795260372/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=110246638795260372' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/110246638795260372'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/110246638795260372'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2010/11/caching-results-of-linq-queries.html' title='Caching the results of LINQ queries'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-1865823533601243961</id><published>2010-03-31T17:14:00.000+08:00</published><updated>2010-03-31T17:14:06.335+08:00</updated><title type='text'>Clearing System.Web.Cache</title><content type='html'>&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre{ font-size: small; color: black; font-family: Consolas, "Courier New", Courier, Monospace; background-color: #ffffff; /*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em;}.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;System.Collections.IDictionaryEnumerator enumerator = context.Cache.GetEnumerator();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;while&lt;/span&gt; (enumerator.MoveNext())&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    context.Cache.Remove(enumerator.Key.ToString());&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-1865823533601243961?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/1865823533601243961/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=1865823533601243961' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/1865823533601243961'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/1865823533601243961'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2010/03/clearing-systemwebcache.html' title='Clearing System.Web.Cache'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-324003017003373155</id><published>2009-10-19T08:24:00.002+08:00</published><updated>2009-10-19T08:27:46.157+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET MVC'/><title type='text'>ASP.NET MVC - The Controller</title><content type='html'>There are 4 methods in the controller.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Index&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Default method for an ASP.NET MVC application.&lt;/li&gt;&lt;li&gt;When you run an ASP.NET MVC application, the Index() method is the first controller method that is called.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Details&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Action method for displaying the details for a selected record.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Create&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Action method for creating a new record.&lt;/li&gt;&lt;/ul&gt;&lt;%= Html.ActionLink("Create New", "Create") %&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Action method for editing an existing record.&lt;%= Html.ActionLink("Edit", "Edit", new { id=item.Id }) %&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-324003017003373155?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/324003017003373155/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=324003017003373155' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/324003017003373155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/324003017003373155'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2009/10/aspnet-mvc-controller.html' title='ASP.NET MVC - The Controller'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-7717094238536916183</id><published>2009-09-24T13:39:00.001+08:00</published><updated>2009-09-24T13:41:04.282+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET MVC'/><title type='text'>ASP.NET MVC - ActionResult</title><content type='html'>The ASP.NET MVC framework supports  several types of action results including:&lt;ol&gt;&lt;li&gt;View – Returns a ViewResult    action result.&lt;/li&gt;&lt;li&gt;Redirect – Returns a RedirectResult    action result.&lt;/li&gt;&lt;li&gt;RedirectToAction – Returns    a RedirectToRouteResult action result.&lt;/li&gt;&lt;li&gt;RedirectToRoute – Returns    a RedirectToRouteResult action result.&lt;/li&gt;&lt;li&gt;Json – Returns a JsonResult    action result.&lt;/li&gt;&lt;li&gt;JavaScriptResult – Returns    a JavaScriptResult.&lt;/li&gt;&lt;li&gt;Content – Returns a ContentResult    action result.&lt;/li&gt;&lt;li&gt;File – Returns a FileContentResult,    FilePathResult, or FileStreamResult depending on the parameters passed    to the method.&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-7717094238536916183?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/7717094238536916183/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=7717094238536916183' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/7717094238536916183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/7717094238536916183'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2009/09/aspnet-mvc-actionresult.html' title='ASP.NET MVC - ActionResult'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-3227700879345859454</id><published>2009-08-29T22:37:00.001+08:00</published><updated>2009-08-29T22:39:23.516+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PMP'/><title type='text'>Project Management - Where is the value?</title><content type='html'>Availability is not a job skill but how many times have you been pulled into a project just because you are available? :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-3227700879345859454?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/3227700879345859454/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=3227700879345859454' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/3227700879345859454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/3227700879345859454'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2009/08/project-management-where-is-value.html' title='Project Management - Where is the value?'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-7065742258801749748</id><published>2009-08-06T10:10:00.003+08:00</published><updated>2009-08-06T10:15:18.338+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>OPENROWSET FORMAT FILE</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_m-Hwz-TGvms/Sno73xuSAwI/AAAAAAAAGG8/zvY4AG3ACpg/s1600-h/ms191479.2c4c1949-2e4f-4383-9095-81fdcbbd1f50%28en-us,SQL.100%29.gif"&gt;&lt;img style="cursor: pointer; width: 400px; height: 142px;" src="http://2.bp.blogspot.com/_m-Hwz-TGvms/Sno73xuSAwI/AAAAAAAAGG8/zvY4AG3ACpg/s400/ms191479.2c4c1949-2e4f-4383-9095-81fdcbbd1f50%28en-us,SQL.100%29.gif" alt="" id="BLOGGER_PHOTO_ID_5366667735391666946" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;SELECT i.* FROM OPENROWSET(BULK  '[filename]',  FORMATFILE='[filename]') AS  i&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-7065742258801749748?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/7065742258801749748/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=7065742258801749748' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/7065742258801749748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/7065742258801749748'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2009/08/openrowset-format-file.html' title='OPENROWSET FORMAT FILE'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_m-Hwz-TGvms/Sno73xuSAwI/AAAAAAAAGG8/zvY4AG3ACpg/s72-c/ms191479.2c4c1949-2e4f-4383-9095-81fdcbbd1f50%28en-us,SQL.100%29.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-7264238553707633762</id><published>2009-08-04T15:14:00.001+08:00</published><updated>2009-08-04T16:05:09.541+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET MVC 2'/><title type='text'>ASP.NET MVC V2 Preview 1 Released</title><content type='html'>ASP.NET MVC 2 Preview 1 provides a new Model-View-Controller (MVC) framework on top of the existing ASP.NET 3.5 SP1 runtime.&lt;br /&gt;&lt;br /&gt;You can download &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=d34f9eaa-fcbe-4e20-b2fd-a9a03de7d6dd#tm"&gt;here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-7264238553707633762?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/7264238553707633762/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=7264238553707633762' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/7264238553707633762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/7264238553707633762'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2009/08/aspnet-mvc-v2-preview-1-released.html' title='ASP.NET MVC V2 Preview 1 Released'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-2261335681122334317</id><published>2009-07-24T13:20:00.002+08:00</published><updated>2009-07-24T13:23:14.355+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2008'/><title type='text'>Visual Studio Windows Form Designer taking too long to load</title><content type='html'>In your project, if you have many customized user controls, they will be compiled and added to the Toolbox every time you open a form in Windows Form Designer.&lt;br /&gt;&lt;br /&gt;In Visual Studio 2008, Tools &gt; Options, navigate to Windows Forms Designer and set the value of AutoToolboxPopulate to False. You should be able to open form in Windows Forms Designer faster.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_m-Hwz-TGvms/SmlFFPJ6_6I/AAAAAAAAGG0/SygJG-wdx7Q/s1600-h/VisualStudio2008Options.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 237px;" src="http://2.bp.blogspot.com/_m-Hwz-TGvms/SmlFFPJ6_6I/AAAAAAAAGG0/SygJG-wdx7Q/s400/VisualStudio2008Options.jpg" alt="" id="BLOGGER_PHOTO_ID_5361892787631095714" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-2261335681122334317?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/2261335681122334317/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=2261335681122334317' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/2261335681122334317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/2261335681122334317'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2009/07/visual-studio-windows-form-designer.html' title='Visual Studio Windows Form Designer taking too long to load'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_m-Hwz-TGvms/SmlFFPJ6_6I/AAAAAAAAGG0/SygJG-wdx7Q/s72-c/VisualStudio2008Options.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-8042518403277037862</id><published>2009-07-14T16:32:00.003+08:00</published><updated>2009-07-15T20:56:11.013+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET MVC'/><title type='text'>Getting Started Programming with ASP.NET MVC</title><content type='html'>ASP.NET MVC 1.0 provides a new Model-View-Controller (MVC) framework on top of the existing ASP.NET 3.5 runtime. &lt;p&gt;The ASP.NET 3.5 runtime does not include the ASP.NET MVC framework. It is not known at this point whether ASP.NET 4.0 or future releases will include the ASP.NET MVC as part of the distributable runtime.&lt;/p&gt;&lt;p&gt;There are two ways to install ASP.NET MVC on your machine.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Use the Web Platform Installer.&lt;/li&gt;&lt;li&gt;Download the distributable and install on your machine.&lt;/li&gt;&lt;/ol&gt;Step 1. Run AspNetMVC1.msi and click Next.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_m-Hwz-TGvms/SlxC8KlHLzI/AAAAAAAAGGc/EXMGaZq8kHQ/s1600-h/01_MVCSetup.jpg"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 314px; CURSOR: pointer" id="BLOGGER_PHOTO_ID_5358231258063646514" border="0" alt="" src="http://2.bp.blogspot.com/_m-Hwz-TGvms/SlxC8KlHLzI/AAAAAAAAGGc/EXMGaZq8kHQ/s400/01_MVCSetup.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Step 2. Setup is complete after you see the following screen.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_m-Hwz-TGvms/SlxC8W05j5I/AAAAAAAAGGk/6txu379a91Q/s1600-h/02_MVCSetupComplete.jpg"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 314px; CURSOR: pointer" id="BLOGGER_PHOTO_ID_5358231261351088018" border="0" alt="" src="http://1.bp.blogspot.com/_m-Hwz-TGvms/SlxC8W05j5I/AAAAAAAAGGk/6txu379a91Q/s400/02_MVCSetupComplete.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Step 3. In Visual Studio 2008, verify that you have the ASP.NET MVC Web Application template available when you want to create a new project.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_m-Hwz-TGvms/SlxC84fycpI/AAAAAAAAGGs/evrhJfHkoak/s1600-h/03_MVC_VisualStudio2008.jpg"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 200px; CURSOR: pointer" id="BLOGGER_PHOTO_ID_5358231270389346962" border="0" alt="" src="http://4.bp.blogspot.com/_m-Hwz-TGvms/SlxC84fycpI/AAAAAAAAGGs/evrhJfHkoak/s400/03_MVC_VisualStudio2008.jpg" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-8042518403277037862?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/8042518403277037862/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=8042518403277037862' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/8042518403277037862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/8042518403277037862'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2009/07/getting-started-programming-with-aspnet.html' title='Getting Started Programming with ASP.NET MVC'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_m-Hwz-TGvms/SlxC8KlHLzI/AAAAAAAAGGc/EXMGaZq8kHQ/s72-c/01_MVCSetup.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-7473170473732084417</id><published>2009-07-08T13:20:00.002+08:00</published><updated>2009-07-08T13:23:04.975+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft Search Server 2008'/><title type='text'>Microsoft Search Server 2008 Express</title><content type='html'>This is cool! Microsoft has came up with their own search product to rival Google.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i.microsoft.com/global/enterprisesearch/en/us/PublishingImages/logo-search-server-exp.png"&gt;&lt;img style="cursor: pointer; width: 240px; height: 75px;" src="http://i.microsoft.com/global/enterprisesearch/en/us/PublishingImages/logo-search-server-exp.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"Search doesn't have to be complicated. You can deliver search to your organization quickly and easily, for &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;free&lt;/span&gt;&lt;span style="font-style: italic;"&gt;, with Microsoft Search Server 2008 Express.&lt;/span&gt;"&lt;br /&gt;&lt;br /&gt;More details here: &lt;a href="http://www.microsoft.com/enterprisesearch/en/us/search-server-express.aspx"&gt;http://www.microsoft.com/enterprisesearch/en/us/search-server-express.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-7473170473732084417?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/7473170473732084417/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=7473170473732084417' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/7473170473732084417'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/7473170473732084417'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2009/07/microsoft-search-server-2008-express.html' title='Microsoft Search Server 2008 Express'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-7756341268151754822</id><published>2009-07-07T22:39:00.001+08:00</published><updated>2009-07-07T22:41:55.741+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Events'/><title type='text'>Will Code for Green! Developer Contest</title><content type='html'>&lt;strong&gt;Save Green&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;Earn Green&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;Code for Green&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;Enter the Will Code for Green! developer contest and if your economy or ecology themed web application is chosen as one of the two grand prize winners at the 2009 gnomedex.com technology conference, you'll win $10,000 - enough to take the idea further! Imagine how that could help you help others!&lt;br /&gt;&lt;br /&gt;Tell us how your application is either helping people deal with the worsening global economy or helping to improve the ecology of the planet Earth and Show Us how you're coding for green!&lt;br /&gt;&lt;br /&gt;More details here: &lt;a href="http://willcodeforgreen.gnomedex.com/"&gt;http://willcodeforgreen.gnomedex.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-7756341268151754822?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/7756341268151754822/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=7756341268151754822' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/7756341268151754822'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/7756341268151754822'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2009/07/will-code-for-green-developer-contest.html' title='Will Code for Green! Developer Contest'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-7732512463890360930</id><published>2009-07-03T09:59:00.002+08:00</published><updated>2009-07-03T10:02:44.304+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CSS (Cascading Style Sheet)'/><title type='text'>Setting Div CSS Height</title><content type='html'>Sometimes, setting the height of a div container does not work across different browsers. Below is a recommended solution for a few major browsers like FireFox, IE7 and IE6.&lt;br /&gt;&lt;br /&gt;min-height:560px; /*firefox*/&lt;br /&gt;height: auto !important; /*ie7 */&lt;br /&gt;height: 560px; /*ie6 */&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-7732512463890360930?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/7732512463890360930/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=7732512463890360930' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/7732512463890360930'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/7732512463890360930'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2009/07/setting-div-css-height.html' title='Setting Div CSS Height'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-8092391622240153059</id><published>2009-06-27T15:41:00.001+08:00</published><updated>2009-06-27T15:44:08.109+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>The connection string reference</title><content type='html'>A great website on connection strings.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;The idea of ConnectionStrings.com is to provide an easy reference for connection strings.&lt;/em&gt;&lt;br /&gt;&lt;a href="http://www.connectionstrings.com/"&gt;http://www.connectionstrings.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-8092391622240153059?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/8092391622240153059/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=8092391622240153059' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/8092391622240153059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/8092391622240153059'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2009/06/connection-string-reference.html' title='The connection string reference'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-4798672006180713870</id><published>2009-06-19T09:47:00.001+08:00</published><updated>2009-06-19T09:49:53.972+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Parallel FX Library'/><title type='text'>Improved Support For Parallelism In The Next Version Of Visual Studio</title><content type='html'>&lt;strong&gt;Improved Support For Parallelism In The Next Version Of Visual Studio&lt;/strong&gt;&lt;br /&gt;&lt;p&gt;The article at MSDN Magazine discusses the following. &lt;/p&gt;&lt;ol&gt;&lt;li&gt;Expressing parallelism in managed code&lt;/li&gt;&lt;li&gt;Expressing parallelism in native code&lt;/li&gt;&lt;li&gt;Debugging parallel applications&lt;/li&gt;&lt;li&gt;Profiling parallel applications&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Bibliography&lt;br /&gt;MSDN Magazine, &lt;a href="http://msdn.microsoft.com/en-au/magazine/cc817396.aspx"&gt;Improved Support For Parallelism In The Next Version Of Visual Studio&lt;/a&gt;, accessed 19 June 2009&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-4798672006180713870?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/4798672006180713870/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=4798672006180713870' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/4798672006180713870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/4798672006180713870'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2009/06/improved-support-for-parallelism-in.html' title='Improved Support For Parallelism In The Next Version Of Visual Studio'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-2281091853610149372</id><published>2009-06-17T10:53:00.001+08:00</published><updated>2009-06-17T10:55:31.423+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2008'/><title type='text'>Visual Studio - Difference between Build Solution and Rebuild Solution</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Build Solution&lt;/span&gt; compiles only those project files and components that have changed since the last build.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Rebuild Solution&lt;/b&gt; builds all project files and components irrespective of the changes made to them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-2281091853610149372?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/2281091853610149372/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=2281091853610149372' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/2281091853610149372'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/2281091853610149372'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2009/06/visual-studio-difference-between-build.html' title='Visual Studio - Difference between Build Solution and Rebuild Solution'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-1039865526323499441</id><published>2009-06-16T21:41:00.002+08:00</published><updated>2009-06-16T21:44:05.139+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Parallel FX Library'/><title type='text'>Optimize Managed Code For Multi-Core Machines</title><content type='html'>&lt;strong&gt;Parallel Performance&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;Optimize Managed Code For Multi-Core Machines&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The article at MSDN Magazine discusses the following. &lt;/p&gt;&lt;ol&gt;&lt;li&gt;Task Parallel Library &lt;/li&gt;&lt;li&gt;Parallel.For versus ThreadPool &lt;/li&gt;&lt;li&gt;Static Work Distribution &lt;/li&gt;&lt;li&gt;Futures&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Bibliography&lt;br /&gt;MSDN Magazine, &lt;a href="http://msdn.microsoft.com/en-us/magazine/cc163340.aspx"&gt;Optimize Managed Code For Multi-Core Machines&lt;/a&gt;, accessed 16 June 2009&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-1039865526323499441?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/1039865526323499441/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=1039865526323499441' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/1039865526323499441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/1039865526323499441'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2009/06/optimize-managed-code-for-multi-core.html' title='Optimize Managed Code For Multi-Core Machines'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-2381341643714148190</id><published>2009-06-12T23:29:00.003+08:00</published><updated>2009-06-12T23:32:53.375+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft Search Engine Optimization Toolkit'/><title type='text'>Search Engine Optimization Toolkit</title><content type='html'>Microsoft has launched the beta version of the Search Engine Optimization Toolkit. The following is a summary of its features.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Improve the volume and quality of traffic to your Web site from search engines&lt;/li&gt;&lt;li&gt;Control how search engines access and display Web content&lt;/li&gt;&lt;li&gt;Inform search engines about locations that are available for indexing&lt;/li&gt;&lt;li&gt;Site Analysis Features&lt;/li&gt;&lt;li&gt;Robots Exclusion Features&lt;/li&gt;&lt;li&gt;Sitemap and Sitemap Index Features&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;a href="http://www.iis.net/extensions/SEOToolkit"&gt;http://www.iis.net/extensions/SEOToolkit&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-2381341643714148190?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/2381341643714148190/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=2381341643714148190' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/2381341643714148190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/2381341643714148190'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2009/06/search-engine-optimization-toolkit.html' title='Search Engine Optimization Toolkit'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-783046051213504281</id><published>2009-05-11T14:31:00.001+08:00</published><updated>2009-05-11T14:31:57.643+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Robocopy'/><title type='text'>Perform Multithreaded File Copies with Robocopy in Windows 7</title><content type='html'>Windows included the popular Robocopy utility, which offers powerful file copy capabilities in a command line interface. Robocopy is included in Windows 7 and features a new multi-threaded copy option. To perform a multi-threaded copy, you use the new /MT[:n] switch, where n indicates the number of threads to be used. By default, n is 8 when you use the /MT option, and can be any value from 1 to 128.&lt;br /&gt;Note that the multi-threaded option is not compatible with the /IPG and /EFSRAW options.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Tip by Matthew Graven, a Senior Editor at TechNet Magazine.&lt;br /&gt;&lt;br /&gt;Source:&lt;br /&gt;http://technet.microsoft.com/en-us/magazine/dd542631.aspx&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-783046051213504281?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/783046051213504281/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=783046051213504281' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/783046051213504281'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/783046051213504281'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2009/05/perform-multithreaded-file-copies-with.html' title='Perform Multithreaded File Copies with Robocopy in Windows 7'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-7761868223430112194</id><published>2009-03-03T17:03:00.000+08:00</published><updated>2009-03-03T17:04:20.593+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CSLA'/><title type='text'>The partner transaction manager has disabled its support for remote/network transactions</title><content type='html'>First verify the "Distribute Transaction Coordinator" Service is&lt;br /&gt;running on both database server computer and client computers&lt;br /&gt;1.      Go to "Administrative Tools &gt; Services"&lt;br /&gt;2.      Turn on the "Distribute Transaction Coordinator" Service if it is not running&lt;br /&gt;&lt;br /&gt;If it is running and client application is not on the same computer as&lt;br /&gt;the database server, on the computer running database server&lt;br /&gt;1.      Go to "Administrative Tools &gt; Component Services"&lt;br /&gt;2.      On the left navigation tree, go to "Component Services &gt; Computers&lt;br /&gt;&gt; My Computer" (you may need to double click and wait as some nodes&lt;br /&gt;need time to expand)&lt;br /&gt;3.      Right click on "My Computer", select "Properties"&lt;br /&gt;4.      Select "MSDTC" tab&lt;br /&gt;5.      Click "Security Configuration"&lt;br /&gt;6.      Make sure you check "Network DTC Access", "Allow Remote Client",&lt;br /&gt;"Allow Inbound/Outbound", "Enable TIP" (Some option may not be&lt;br /&gt;necessary, have a try to get your configuration)&lt;br /&gt;7.      The service will restart&lt;br /&gt;8.      BUT YOU MAY NEED TO REBOOT YOUR SERVER IF IT STILL DOESN'T WORK&lt;br /&gt;(This is the thing drove me crazy before)&lt;br /&gt;&lt;br /&gt;On your client computer use the same above procedure to open the&lt;br /&gt;"Security Configuration" setting, make sure you check "Network DTC&lt;br /&gt;Access", "Allow Inbound/Outbound" option, restart service and computer&lt;br /&gt;if necessary.&lt;br /&gt;&lt;br /&gt;On you SQL server service manager, click "Service" dropdown, select&lt;br /&gt;"Distribute Transaction Coordinator", it should be also running on&lt;br /&gt;your server computer.&lt;br /&gt;&lt;br /&gt;Source:&lt;br /&gt;http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataproviders/thread/7172223f-acbe-4472-8cdf-feec80fd2e64/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-7761868223430112194?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/7761868223430112194/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=7761868223430112194' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/7761868223430112194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/7761868223430112194'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2009/03/partner-transaction-manager-has.html' title='The partner transaction manager has disabled its support for remote/network transactions'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-4280896357423069335</id><published>2009-02-21T23:40:00.005+08:00</published><updated>2009-06-11T09:30:46.629+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C# Remoting'/><title type='text'>DataSet Remoting DateTime problem</title><content type='html'>&lt;strong&gt;The Problem&lt;/strong&gt;&lt;br /&gt;&lt;em&gt;When you pass an object of the DataSet class to a remote Web service or to a Web service that is in a time zone that is different from the time zone of the calling application, the DateTime columns in a contained table are converted to the equivalent local time. The DateTime columns are converted because the System.Data.DataSet code adjusts to the equivalent local time according to the time zone of the remote computer. For example, if a value of 5:00 is passed from a client computer in Pacific Time to a Web service in Eastern Time, the value in the DataSet object changes to 8:00 in the receiving method of the Web service. This article describes how to work around this problem by passing the time zone information from the client application to the Web service and by adjusting the DateTime columns at the remote computer. The System.Data is the namespace that contains the DataSet class.&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&lt;/em&gt;&lt;br /&gt;&lt;strong&gt;Possible solutions&lt;/strong&gt;&lt;br /&gt;1#&lt;br /&gt;Storing ticks in the extend properties of the dataset at the server side and adding the ticks back to the adjusted datetime values at the client side.&lt;br /&gt;&lt;a href="http://support.microsoft.com/kb/842545"&gt;http://support.microsoft.com/kb/842545&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2#&lt;br /&gt;Setting DataColumn.DateTimeMode = DataSetDateTime.Unspecified. Serialization does not cause an offset in this mode.&lt;br /&gt;&lt;a href="http://geekswithblogs.net/mnf/archive/2008/01/23/datetime-value-in-dataset-changed-over-remoting-boundaries.aspx"&gt;http://geekswithblogs.net/mnf/archive/2008/01/23/datetime-value-in-dataset-changed-over-remoting-boundaries.aspx&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.data.datasetdatetime.aspx"&gt;http://msdn.microsoft.com/en-us/library/system.data.datasetdatetime.aspx&lt;/a&gt;&lt;br /&gt;&lt;a href="http://forums.infragistics.com/forums/t/8701.aspx"&gt;http://forums.infragistics.com/forums/t/8701.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I am open to more suggestions that can fix this issue.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-4280896357423069335?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/4280896357423069335/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=4280896357423069335' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/4280896357423069335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/4280896357423069335'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2009/02/dataset-remoting-datetime-problem.html' title='DataSet Remoting DateTime problem'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-4429746303294637045</id><published>2009-02-09T08:48:00.001+08:00</published><updated>2009-02-09T08:50:49.531+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PMP'/><title type='text'>Guide to get your PMP Certificate</title><content type='html'>&lt;b&gt;Before you start:&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;PMP Certificate is only for those who really have project management experience, it is not required to be the project manager of your previous projects but even being a team member in these projects will be considered in your project management experience.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;Eligibility:&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Applicants must have 35 hours of specific project management education. &lt;/li&gt;&lt;li&gt;With a Bachelor’s Degree (or the global equivalent): Applicants must have a minimum three years’ professional project management experience, during which 4,500 hours are spent leading and directing project tasks, up to eight years from the time of application. &lt;/li&gt;&lt;li&gt;Without a Bachelor’s Degree (or the global equivalent): Applicants must have a minimum five years’ professional project management experience, during which at least 7,500 hours are spent leading and directing project tasks, up to eight years from the time of application.&lt;/li&gt;&lt;li&gt;For more details and information review PMI.org web site.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;Training:&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Before taking your training, download and review CBT Nuggets - Project Management Professional. I am confirming it is not sufficient but it will give you a general overview and a solid understating of the PMP training material and it will help you not to get lost between the processes and knowledge areas.&lt;/li&gt;&lt;li&gt;I recommend subscribing in the PMI and becoming a member and there is nothing to lose because the subscription fee will be deducted from your exam fee later on.&lt;/li&gt;&lt;li&gt;Try to subscribe for your training with the least expensive available training center. Just make sure it is accredit training center. You only need to get the 35 hours credit for your exam application. From time to time you will get announcement from PMI regarding trainings in discounted prices in your area and it is one of the benefits of becoming a member in PMI.&lt;/li&gt;&lt;li&gt;Try after each training session to review what you took in this session. Don’t memorize, don’t even take notes. Just digest what you took. If you can review the session in advance before taking it this will be much better for you. Usually the training center will provide you with the book&lt;/li&gt;&lt;/ul&gt;  &lt;br /&gt;&lt;b&gt;Exam:&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Read you PMP book two times at least. Again don’t memorize and don’t take notes. Just read it and try to understand.&lt;/li&gt;&lt;li&gt;Start to prepare your self for the exam questions using PM FasTrack 5 for rita mulcahy exam simulator. Don’t search for more exam engines this one is enough. &lt;/li&gt;&lt;li&gt;Take tests by process group; try to answer the questions yourself before you peek at the answer.&lt;/li&gt;&lt;li&gt;You must read the explanation for each question and it is now the time to take notes and memorize why the answer was like that. Don’t memorize the questions themselves. Your PMP exam questions will be totally new. &lt;/li&gt;&lt;li&gt;Review all the questions two times at least.&lt;/li&gt;&lt;li&gt;Start to take test in Super PMP mode which simulates the real exam and trine yourself to answer the question in no more than one minute. It is very important in your real exam to control the time.&lt;/li&gt;&lt;li&gt;You must fill out an online application over PMI web site; your application must be reviewed and approved by PMI to get the eligibility. You can not register for PMP exam without the eligibility code.&lt;/li&gt;&lt;li&gt;Regarding the application, it is a long and hard process which will take some time from you so be patient and you can work on it part by part if you want and the information will be saved automatically for your next session. And in the project management experience area take a copy of the requested data to an excel sheet, prepare it then you can login again to PMI site to continue your application and use this sheet to fill project management experience area. &lt;/li&gt;&lt;li&gt;I recommend registering for your exam two months in advance for two reasons; first it will motivate you to study seriously, second to book your seat in the testing center. The PMP exam seats are limited. &lt;/li&gt;&lt;li&gt;The Exam is four-hour examination composed of 200 multiple-choice questions, be relaxed and be confidant. The exam is not so easy and most of the questions are new but you can answer most of them if you prepare your self for the exam. &lt;/li&gt;&lt;li&gt;Keep control on time try to answer each question in no more than one minute. At the end of each hour make sure that you answered 50 questions and you save some time for review.&lt;/li&gt;&lt;li&gt;Don’t spend too much time on hard or long questions just choose what you think it is the right answer and mark the question for review later and go ahead with the exam.&lt;/li&gt;&lt;li&gt;After the first 100 questions you must take a rest for refreshment, it is allowed to leave the testing room for a rest especially for long test like this one, go out of the room stretch your self, wash your face and go back fresh to continue your exam. Don’t spend more than five to ten minutes your exam timer will not stop.&lt;/li&gt;&lt;li&gt;If you follow your time plan in the exam you will end up with 20-30 minutes for reviewing. Review the marked questions if you can then end your exam. &lt;/li&gt;&lt;li&gt;You will get the result of the exam immediately, and if you pass the exam the report will start with CONGRATULATION in capital letters which I wish every one of you to see it at the end of his exam.&lt;/li&gt;&lt;/ul&gt;Source:&lt;br /&gt;Walid Elsahar&lt;br /&gt;http://www.sadikhov.com/forum/index.php?showtopic=133597&lt;br /&gt;09 Feb 2009&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-4429746303294637045?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/4429746303294637045/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=4429746303294637045' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/4429746303294637045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/4429746303294637045'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2009/02/guide-to-get-your-pmp-certificate.html' title='Guide to get your PMP Certificate'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-1710454616379201172</id><published>2009-01-20T14:02:00.001+08:00</published><updated>2009-01-20T14:05:07.787+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>"if you want to play, you play my way"</title><content type='html'>An excellent post by Rockford Lhotka on Windows Azure.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;blockquote&gt;Azure defines a limited architecture for applications. It isn't a new architecture, and it isn't the simplest architecture. But it is an architecture that is known to scale. And Azure basically says "if you want to play, you play my way".&lt;br /&gt;&lt;/blockquote&gt;&lt;/span&gt;&lt;br /&gt;http://www.lhotka.net/weblog/SomeThoughtsOnWindowsAzure.aspx&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-1710454616379201172?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/1710454616379201172/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=1710454616379201172' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/1710454616379201172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/1710454616379201172'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2009/01/if-you-want-to-play-you-play-my-way.html' title='&quot;if you want to play, you play my way&quot;'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-5351605292137308585</id><published>2009-01-08T08:54:00.003+08:00</published><updated>2009-01-08T09:01:11.659+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='At Work'/><title type='text'>How to Deal with Lazy People at Your Workplace</title><content type='html'>&lt;span style="font-weight:bold;"&gt;I never thought that the first obstacle I faced in year 2009 is how to learn to deal with a lazy colleague. I searched Google for answers and the following is an article I found, pretty accurately describing lazy people at my workplace.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You are a hard worker. You enjoy tackling a challenge and claiming victory when it's all said and done. You are not the type of person that necessarily enjoys working in teams, because you know that there is always one who isn't going to put 100% effort into the project, more like 20% or less. He or she will then go around and brag and boast they did more and would like a pat on the back for a contribution that was well...forgettable. How do you deal with these lazy people?&lt;br /&gt;&lt;br /&gt;There are two types of lazy people. The first are those who admit, "Yes, I am lazy and I don't care who knows about it." The other group finds excuses, "I am not lazy. I just need to think about what I need to do before I do it." To this you say, "Well, how long is it going to be before you stop thinking and get to it?" The end result: nothing gets done.&lt;br /&gt;&lt;br /&gt;The first group of lazy people when required to do anything will do the bare minimum. Since you know from the very start, if given the choice they will pick the least amount of work to do, give them the most. Sure they will complain, they will probably say what they won't do, but if there is a reward associated with it, they may find the motivation to do it. Motivation is essentially what they are lacking. The only way to find out what motivates them to stop playing solitaire on the computer and surfing the Internet, is to find out what they really want, need or both. One idea is to use time off as an incentive.&lt;br /&gt;&lt;br /&gt;The second group of lazy people care about what others think, because if they didn't they wouldn't make unnecessary excuses to avoid negative comments. The way to motivate them is not to argue about the excuses that they make, but instead direct them to the task at hand and assign them specific deadlines they must meet. When deadlines are met, provide them with incentives as well or ways to make their job less cumbersome so that they are without excuse.&lt;br /&gt;&lt;br /&gt;Lazy people are always looking for a way to make life easier for their selves. Most are very selfish. They aren't interested in helping others, but they will do it out of obligation. They know they have to eat; therefore, they will get a job, but they will be the ones you most likely see hanging around the water-cooler, talking in the break-room (when they have already took two breaks in less than an hour), out of site (and they are hoping out of your mind) when you need them and other similar behaviors.&lt;br /&gt;&lt;br /&gt;Once you know you have someone like this around you, consider watching he or she more than the rest of the team. They are most likely going to be "up to no good." Too much time on their hands leads to gossip, lying, stealing and any other negative action, because they simply don't know how to keep themselves busy.&lt;br /&gt;&lt;br /&gt;Many lazy people simply haven't been taught how to be good workers. You may want to show them basic principles on how one can achieve their best at work. Pointing the finger at Suzy and praising her for all her achievement in front of lazy workers is not the way to teach them, but describing the characteristics of a good worker is best.&lt;br /&gt;&lt;br /&gt;Source: &lt;a href="http://www.associatedcontent.com/article/422533/how_to_deal_with_lazy_people_at_your.html"&gt;http://www.associatedcontent.com/article/422533/how_to_deal_with_lazy_people_at_your.html&lt;/a&gt;&lt;br /&gt;October 26, 2007 by Nicholl McGuire&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-5351605292137308585?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/5351605292137308585/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=5351605292137308585' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/5351605292137308585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/5351605292137308585'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2009/01/how-to-deal-with-lazy-people-at-your.html' title='How to Deal with Lazy People at Your Workplace'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-3760065340718825395</id><published>2008-12-18T11:30:00.002+08:00</published><updated>2008-12-18T12:59:20.802+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2008'/><title type='text'>Could not load type 'Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemTypeDeniedOrNotExistException</title><content type='html'>I forgot to install Team Explorer 2008 before I install SP1. When I attempt to access my work item, I got the following error.&lt;br /&gt;&lt;br /&gt;"Could not load type 'Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemTypeDeniedOrNotExistException' from assembly 'Microsoft.TeamFoundation.WorkItemTracking.Client" exception.&lt;br /&gt;&lt;br /&gt;Reinstalling SP1 fixed the error.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-3760065340718825395?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/3760065340718825395/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=3760065340718825395' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/3760065340718825395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/3760065340718825395'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/12/could-not-load-type-microsoftteamfounda.html' title='Could not load type &apos;Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemTypeDeniedOrNotExistException'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-1183173996309011097</id><published>2008-11-20T09:41:00.002+08:00</published><updated>2008-11-20T09:45:13.380+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>Windows Azure</title><content type='html'>&lt;p&gt;Windows® Azure is a cloud services operating system that serves as the development, service hosting and service management environment for the Azure Services Platform. Windows Azure provides developers with on-demand compute and storage to host, scale, and manage Web applications on the Internet through Microsoft® data centers.&lt;/p&gt;&lt;p&gt;To build these applications and services, developers can use their existing Microsoft® Visual Studio® 2008 expertise. In addition, Windows Azure supports popular standards and protocols including SOAP, REST, and XML. Windows Azure is an open platform that will support both Microsoft and non-Microsoft languages and environments.&lt;/p&gt;&lt;p&gt;http://www.microsoft.com/azure/windowsazure.mspx&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-1183173996309011097?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/1183173996309011097/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=1183173996309011097' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/1183173996309011097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/1183173996309011097'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/11/windows-azure.html' title='Windows Azure'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-7886710931930465933</id><published>2008-10-21T15:37:00.003+08:00</published><updated>2009-06-11T09:28:55.618+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CSLA'/><title type='text'>CslaGenerator</title><content type='html'>Google Discussion on CSLA (Component-based Scalable Logical Architecture)&lt;br /&gt;&lt;br /&gt;Here is the link&lt;br /&gt;http://groups.google.com/group/CslaGenerator/topics&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-7886710931930465933?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/7886710931930465933/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=7886710931930465933' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/7886710931930465933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/7886710931930465933'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/10/cslagenerator.html' title='CslaGenerator'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-1932623608913838110</id><published>2008-10-14T15:44:00.002+08:00</published><updated>2008-10-14T15:47:33.795+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>SQL - DELETE using INNER JOIN</title><content type='html'>This should be the correct way.&lt;br /&gt;DELETE &lt;span style="color: rgb(255, 0, 0);"&gt;D&lt;/span&gt;&lt;br /&gt;dbo.PropertyLocation.PropertyLocation, dbo.PropertyLocation.PropertyLocationID, dbo.PropertyLocality.PropertyLocality,&lt;br /&gt;dbo.PropertyLocality.PropertyLocalityID, dbo.PropertyTown.PropertyTown, dbo.PropertyTown.PropertyTownID, dbo.PropertyArea.PropertyArea,&lt;br /&gt;dbo.PropertyArea.PropertyAreaID, dbo.PropertyCountry.PropertyCountry&lt;br /&gt;FROM dbo.PropertyLocation &lt;span style="color: rgb(255, 0, 0);"&gt;AS D&lt;/span&gt;&lt;br /&gt;INNER JOIN dbo.PropertyCountry ON dbo.PropertyLocation.PropertyCountryID = dbo.PropertyCountry.PropertyCountryID&lt;br /&gt;INNER JOIN dbo.PropertyLocality ON dbo.PropertyLocation.PropertyLocationID = dbo.PropertyLocality.PropertyLocationID&lt;br /&gt;INNER JOIN dbo.PropertyTown ON dbo.PropertyLocality.PropertyLocalityID = dbo.PropertyTown.PropertyLocalityID&lt;br /&gt;INNER JOIN dbo.PropertyArea ON dbo.PropertyTown.PropertyTownID = dbo.PropertyArea.PropertyTownID&lt;br /&gt;WHERE (dbo.PropertyArea.PropertyAreaID = @PropertyAreaID)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-1932623608913838110?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/1932623608913838110/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=1932623608913838110' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/1932623608913838110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/1932623608913838110'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/10/sql-delete-using-inner-join.html' title='SQL - DELETE using INNER JOIN'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-9076414392218977026</id><published>2008-10-07T13:37:00.005+08:00</published><updated>2009-06-27T12:43:54.092+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>WITH(NOLOCK) and SQL Query Performance</title><content type='html'>Using WITH(NOLOCK) improves query performance when querying the database. It means you cannot ensure the data that you fetch is the latest when querying the database with no lock.&lt;br /&gt;&lt;br /&gt;Here is some useful links to explain WITH(NOLOCK)&lt;br /&gt;&lt;ol&gt;&lt;li&gt;http://www.sql-server-performance.com/articles/per/lock_contention_nolock_rowlock_p1.aspx&lt;/li&gt;&lt;li&gt;http://blogs.neudesic.com/blogs/phil_scott/archive/2005/12/05/11.aspx&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-9076414392218977026?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/9076414392218977026/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=9076414392218977026' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/9076414392218977026'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/9076414392218977026'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/10/withnolock-and-sql-query-performance.html' title='WITH(NOLOCK) and SQL Query Performance'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-8135024082423592631</id><published>2008-10-04T15:20:00.000+08:00</published><updated>2008-10-04T15:22:55.233+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaSun'/><title type='text'>Steps to download JavaSun software</title><content type='html'>&lt;ol&gt;&lt;li&gt;Click http://www.java.com/en/download/manual.jsp to download the latest Java Sun. &lt;/li&gt;&lt;li&gt;Click under the section of "Window XP/Vista/2000/2003 Offline", and click "Run" from the File Download popup window. &lt;/li&gt;&lt;li&gt;Accept the license agreement. &lt;/li&gt;&lt;li&gt;Under the 'Windows Platform', click on the 'Windows offline installation, multi-language' to download the java. &lt;/li&gt;&lt;li&gt;After installation is complete, restart your computer. &lt;/li&gt;&lt;li&gt;Start your Internet Explorer. &lt;/li&gt;&lt;li&gt;From the Internet Explorer Menu Bar, click on Tools and click Internet Option. &lt;/li&gt;&lt;li&gt;At the General tab, on the middle portion of the page, click on the Setting button under Temporary Internet Files. &lt;/li&gt;&lt;li&gt;A setting window will open; ensure that the check for newer versions of stored pages is set to 'Every visit to the page'. &lt;/li&gt;&lt;li&gt;Click on view files button on the same page. &lt;/li&gt;&lt;li&gt;Select all files and delete it. &lt;/li&gt;&lt;li&gt;Then click OK to close the setting windows. &lt;/li&gt;&lt;li&gt;Next click on the Privacy tab and click on the 'Advanced' button on the same page. &lt;/li&gt;&lt;li&gt;An Advanced Privacy Settings window will open; make a tick on the 'Override automatic cookie handling'. &lt;/li&gt;&lt;li&gt;Ensure that the First Party Cookies and third party cookies are both set to 'Accept'. &lt;/li&gt;&lt;li&gt;Make a tick on the Always allow session cookies. &lt;/li&gt;&lt;li&gt;Next click on the Advance tab and scroll down to locate Java and ensure that the check box is ticked. &lt;/li&gt;&lt;li&gt;Click OK to exit from all the windows. &lt;/li&gt;&lt;li&gt;Close your Internet Explorer and start it again for the changes to take effect. &lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-8135024082423592631?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/8135024082423592631/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=8135024082423592631' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/8135024082423592631'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/8135024082423592631'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/10/steps-to-download-javasun-software.html' title='Steps to download JavaSun software'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-7782965285506170790</id><published>2008-09-21T20:21:00.004+08:00</published><updated>2008-09-21T20:27:17.666+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EduSeek'/><title type='text'>EduSeek is the hub for education related activities and information</title><content type='html'>Recently, I was busy helping out a friend with an Education Forum. It is done using phpbb 3.0.&lt;br /&gt;&lt;br /&gt;It was much of a challenge to me since it has long since I touched php and it was the first time I was involved in setting up the forum. Furthermore, in order to make the forum more search engine friendly, we have to do a lot of customization. We downloaded so called "modules" whereby we modify chunks of code and update the database schema to make the forum search engine friendly.&lt;br /&gt;&lt;br /&gt;Do visit the forum and help promote Education!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;EduSeek&lt;/strong&gt;&lt;br /&gt;EduSeek is the hub for education related activities and information. Lets live &amp;amp; learn at EduSeek!&lt;br /&gt;Website link: &lt;a href="http://www.eduseek.com.sg"&gt;http://www.eduseek.com.sg&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-7782965285506170790?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/7782965285506170790/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=7782965285506170790' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/7782965285506170790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/7782965285506170790'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/09/eduseek-is-hub-for-education-related.html' title='EduSeek is the hub for education related activities and information'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-3363652778582906073</id><published>2008-09-05T09:50:00.008+08:00</published><updated>2008-09-05T10:08:49.673+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Parallel FX Library'/><title type='text'>Parallel FX Library</title><content type='html'>After attending the September SgDotNet, I learn something new. It was the only thing that caught my attention throughout the whole presentation. "Parallel FX". &lt;br /&gt;&lt;br /&gt;Most processors are now dual core and how do we really make full use of the two processors. It has to be "Parallel FX". It will be interesting to see how Parallel FX will evolve. Perhaps it will be included in the next dot net framework?&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_m-Hwz-TGvms/SMCThISojXI/AAAAAAAAB2o/tkyWVpb4k20/s1600-h/513px-DotNet.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_m-Hwz-TGvms/SMCThISojXI/AAAAAAAAB2o/tkyWVpb4k20/s400/513px-DotNet.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5242352163629862258" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;"Parallel FX Library (PFX) is a managed concurrency library being developed by a collaboration between Microsoft Research and the CLR team at Microsoft for inclusion with a future revision of the .NET Framework. It is composed of two parts: Parallel LINQ (PLINQ) and Task Parallel Library (TPL). It also consists of a set of Coordination Data Structures (CDS) - a set of data structures used to synchronize and co-ordinate the execution of concurrent tasks. The library was released as a CTP on November 29, 2007[4] and refreshed again in December 2007 and June 2008."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Bibliography&lt;br /&gt;Wikipedia, &lt;a href="http://en.wikipedia.org/wiki/Parallel_FX_Library"&gt;Parallel FX Library&lt;/a&gt;, accessed 05 September 2008&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-3363652778582906073?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/3363652778582906073/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=3363652778582906073' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/3363652778582906073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/3363652778582906073'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/09/parallel-fx-library.html' title='Parallel FX Library'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_m-Hwz-TGvms/SMCThISojXI/AAAAAAAAB2o/tkyWVpb4k20/s72-c/513px-DotNet.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-430185341179892169</id><published>2008-08-25T15:43:00.003+08:00</published><updated>2008-08-25T15:47:30.017+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2005'/><title type='text'>Optimize the launch of the Visual Studio 2005</title><content type='html'>I found the following extremely useful. It does speed up the startup of Visual Studio 2005.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Disable "Start Page".&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Go to Tools | Options.&lt;/li&gt;&lt;li&gt;In Environment | Startup section, change At startup setting to Show empty environment.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Disable splash screen.&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Open the properties of Visual Studio 2005 shortcut.&lt;/li&gt;&lt;li&gt;Add the parameter /nosplash to the target.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Close all unnecessary panels/tabs to prevent them from appearing when the IDE loads.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Bibliography&lt;br /&gt;.Net Tip of The Day, &lt;a href="http://dotnettipoftheday.org/tips/optimize_launch_of_vs2005.aspx"&gt;Optimize the launch of the Visual Studio 2005&lt;/a&gt;, accessed 25 August 2008&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-430185341179892169?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/430185341179892169/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=430185341179892169' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/430185341179892169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/430185341179892169'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/08/optimize-launch-of-visual-studio-2005.html' title='Optimize the launch of the Visual Studio 2005'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-1884246456093967670</id><published>2008-08-22T13:27:00.004+08:00</published><updated>2008-08-22T13:44:33.860+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OpenXML'/><title type='text'>OpenXML</title><content type='html'>Recently, I attended a talk about OpenXML. I have found OpenXML useful in a few cases within my company. My personal feeling is that OpenXML is evolving and it will be the common standard format that we exchange documents in the future.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Introduction&lt;/span&gt;&lt;br /&gt;OpenXML is an open, international standard for word processing documents, presentations and spreadsheets.&lt;br /&gt;&lt;br /&gt;To demonstrate OpenXML, we can use PowerTools for OpenXML are a set of cmdlets that can be used to demonstrate the creation and modification of OpenXML documents using Windows PowerShell. PowerTools can be &lt;a href="http://www.codeplex.com/PowerTools"&gt;downloaded here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Pre-Requisites&lt;br /&gt;&lt;/span&gt;&lt;span&gt;In order to use PowerTools, we must fulfill the pre-requisites. We require Windows PowerShell 1.0 and the Open XML Format SDK.&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;ol&gt;&lt;li&gt;PowerShell 1.0 (&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=C6EF4735-C7DE-46A2-997A-EA58FDFCBA63&amp;amp;displaylang=en"&gt;Download&lt;/a&gt;)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Open XML Format SDK (&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=AD0B72FB-4A1D-4C52-BDB5-7DD7E816D046&amp;amp;displaylang=en"&gt;Download&lt;/a&gt;)&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-weight: bold;"&gt;Resources&lt;/span&gt;&lt;br /&gt;Following are some resources available for OpenXML.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://openxmldeveloper.org/default.aspx"&gt;OpenXML Developer&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://openxmlcommunity.org/"&gt;OpenXML Community&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;I have found OpenXML applicable in many cases. For example, if you are using third party products to generate word documents for reporting, we could have used OpenXML instead. Since OpenXML is open source, we do not need to buy license if developing for internal applications.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-1884246456093967670?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/1884246456093967670/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=1884246456093967670' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/1884246456093967670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/1884246456093967670'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/08/openxml.html' title='OpenXML'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-4316033283586274665</id><published>2008-08-18T13:23:00.000+08:00</published><updated>2008-08-18T13:25:35.767+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PDF Compressor'/><title type='text'>Free PDF Compressor</title><content type='html'>&lt;blockquote&gt;&lt;span style="font-style:italic;"&gt;Compress PDF file and reduce the actual size of PDF document with this completely free PDF Compressor.&lt;br /&gt;&lt;br /&gt;Free PDF Compressor removes duplicate PDF objects, optionally takes advantage of new compression features of latest PDF specifications that for many classes of documents compresses 30 - 60% better than what is possible in PDF 1.5.&lt;br /&gt;&lt;br /&gt;Free PDF Compressor allows you to shrink PDF file by using Flate or RunLength compression algorithm. With this freeware, you are able to set the compression level to generate PDF files of smallest size.&lt;br /&gt;&lt;br /&gt;Another benefit of this freeware utility is that you can decompress or expand any PDF file to its original size for better conversion from PDF to other formats.&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;http://www.nicepdf.com/PDFCompressor.exe&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-4316033283586274665?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/4316033283586274665/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=4316033283586274665' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/4316033283586274665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/4316033283586274665'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/08/free-pdf-compressor.html' title='Free PDF Compressor'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-5448663653431316513</id><published>2008-08-07T09:08:00.004+08:00</published><updated>2008-08-07T09:12:20.492+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Robocopy'/><title type='text'>Robocopy</title><content type='html'>&lt;span style="font-style:italic;"&gt;Robocopy is designed for reliable mirroring of directories or directory trees. It has features to ensure all NTFS attributes and properties are copied, and includes additional restart code for network connections subject to disruption.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Robocopy is a folder copier, not a file copier. However, you can workaround to make it do file copy like below.&lt;br /&gt;&lt;br /&gt;robocopy c:\bar c:\baz foo.txt&lt;br /&gt;&lt;br /&gt;Robocopy is included in the Windows Server 2003 Resource Toolkit. &lt;br /&gt;&lt;br /&gt;Download it here.&lt;br /&gt;http://www.microsoft.com/downloads/details.aspx?familyid=9d467a69-57ff-4ae7-96ee-b18c4790cffd&amp;displaylang=en&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Bibliography&lt;br /&gt;Wikipedia, &lt;a href="http://en.wikipedia.org/wiki/Robocopy"&gt;Robocopy&lt;/a&gt;, accessed 07 August 2008&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-5448663653431316513?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/5448663653431316513/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=5448663653431316513' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/5448663653431316513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/5448663653431316513'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/08/robocopy.html' title='Robocopy'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-7828821008188895498</id><published>2008-07-31T13:50:00.004+08:00</published><updated>2008-08-01T11:49:09.635+08:00</updated><title type='text'>10 ways to increase the productivity of your programmers</title><content type='html'>Developer time doesn’t come cheap — yet in some shops, maintaining developer productivity can be a struggle. Justin James discusses a number of ways to remove the obstacles that may be keeping your developers from working at full capacity.&lt;br /&gt;&lt;br /&gt;Programmers are expensive employees to hire and employ. They make better-than-average salaries compared to other office workers with similar experience and education levels, and they are hard to find in many parts of the country. Needless to say, with the cost of developer time being what it is, it makes sense to take steps to improve the efficiency and productivity of your development staff. Here are 10 tips to help you do just that.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;#1: Minimize distractions&lt;/span&gt;&lt;br /&gt;Most managers are aware that programming is a job that requires long periods of intense concentration. What they don’t realize is that they are not doing a very good job at letting their team focus on their work. Distractions can take all sorts of forms: instant messaging, e-mails, requests for status reports, goofing off… the list is endless. What can a manager do?&lt;br /&gt;&lt;br /&gt;One thing that can help is to change the way you communicate; start using face-to-face and phone conversations for time-critical items, and ask that your team keep e-mail and IM closed for much of the day. If possible, locate your team members in private offices so that the things happening around them do not distract them. And try to not request so many status reports!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;#2: Maximize working time&lt;/span&gt;&lt;br /&gt;There are eight hours in a workday, and it’s up to you to get the most out of your team over the course of those eight hours. Many managers think that the key to higher productivity is to work more than eight hours. In reality, you will see that much of an eight-hour workday is wasted time. Meetings, for example, require not just the time for the meeting, but the time preparing for the meeting, getting to and from the meeting, arriving early to the meeting, and so on. A meeting that is scheduled for 30 minutes can easily consume 60 minutes’ worth of time. Talk with your team and find out where they are “losing” a lot of time and try to eliminate those wasted hours wherever possible. Believe me, your team would rather work to be more effective in eight hours than learn to love 10-hour days.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;#3: Encourage physical and mental health&lt;/span&gt;&lt;br /&gt;Sound physical and mental health are essential to effective workers. Put simply, it is impossible to be of much use at the job when you are stressed out. And poor physical health makes it harder to stay alert and comfortable in an office environment. You can’t force the people on your team to go to the gym or to start handling stress well. But you can take steps to encourage healthy lifestyles. For example, request that the vending machines be stocked with some healthy alternatives to the usual 20 oz. bottles of corn syrup and caffeine.Look for the signs of stress or burnout within your team and find a way to help alleviate it.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;#4: Stop hammering nails with a screwdriver&lt;/span&gt;&lt;br /&gt;There is something about the world of software development that leads many managers to think that all of the tools are free. Maybe it’s the abundance of some really good open source and freeware tools out there. But insisting that they make do with whatever they can find for free online will kill the efficiency of your team.&lt;br /&gt;&lt;br /&gt;If they need the full version of a tool, buy it. Many of the tools that can help your team are not open source or freeware, for better or for worse. There are few tools on the market that cost more than a week’s salary for a programmer, but there are many times when using the wrong tools or no tools wastes much more than a week. That means that you will need to occasionally purchase software for them to help them do their jobs. Get used to it, and try to make the process as easy as possible. It also means that instead of your team members trying to trick evaluation copies of software into functioning beyond the time period, they can get to work.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;#5: Stick to programming&lt;/span&gt;&lt;br /&gt;A few years ago, I needed to book a flight to attend a training session. I spent about 10 minutes searching and found a flight at a price that seemed reasonable. My boss did not like the price and told me to find a better one. I spent the next day-and-a-half looking for flights. I ended up saving $50 compared to the original flight I found. Losing 12 hours of billable hours alone was more than the cost of the flight. The moral of the story? Let your programmers program. Anything outside of their job description is, by definition, a waste of their time. They are not doing what they were hired to do. Have the office administrator book flights and order office supplies; that’s what they’re there for.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;#6: Get clear project specs&lt;/span&gt;&lt;br /&gt;Every development project begins with a specification of one kind or another. Poor specifications lead to work being thrown out or time being wasted as the development team keeps asking for further clarification. Talk to your team and find out if the requests they receive are well written and convey the information that is necessary to minimize lost and wasted time. Chances are, your project definition process could be improved, and by doing so, you will save a ton of time on development.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;#7: Make sure the environment is safe and comfortable&lt;/span&gt;&lt;br /&gt;Your office environment plays a role in how well your team performs — and I’m not talking about the office recycling policy. Are you purchasing high quality, comfortable chairs and desks for people that allow them to work without pain? Or are you buying junk from the local college’s surplus store? Are your programmers battling the eye strain from bright overhead fluorescent lights glaring on their monitors or do they have full spectrum task lights available? Is your office at a ridiculous temperature? A good environment is not just about “creature comforts,” it’s about providing people with a space to work with minimal risk of injury and pain. You will also see that the people on your team will have a better attitude and will be able to work better with a friendlier office environment.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;#8: Pay attention to your attitude&lt;/span&gt;&lt;br /&gt;My experience has been that the attitude of a group leader quickly affects the entire team, for better or for worse. When the leader of a group has a good attitude, that group works harder and better and helps each other out. When the leader of a group has a bad attitude, the group underperforms and fights among itself. How is your attitude affecting your team?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;#9: Don’t overlook mentors, training, and education&lt;/span&gt;&lt;br /&gt;One of the most common complaints I hear from other developers is that their employers invest little-to-no money or time into their continued growth. Developers are expected to learn new techniques and skills on their own time on their own dime. Many good programmers simply do not have the time, money, or desire to do this. As a result, they often lag in terms of learning new skills or improving existing ones. If you want to have better programmers on your team, take a look at having the more knowledgeable people on your team mentor the less experienced members. You also want to look at training opportunities. Even if training is not possible due to budgetary constraints, it is wholly possible to conduct internal training sessions or to allow employees to spend a portion of their time on self-education. As your developers get better at their jobs, they will be more productive.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;#10: Code reviews&lt;/span&gt;&lt;br /&gt;When does not writing code help you write code faster and better? When you are performing a code review. Schedule regular times to have code reviews performed. One of the best types of code reviews is when you have a good programmer who is only loosely familiar with the project looking at the code. When authors need to explain details, they learn their code better, and sometimes an outsider will see problems that the insiders all missed. Code reviews cost nothing but time, and often save much more time than they take to conduct.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Bibliography&lt;br /&gt;Tech Republic, Justin James, &lt;a href="http://blogs.techrepublic.com.com/10things/?p=389"&gt;10 ways to increase the productivity of your programmers&lt;/a&gt;, accessed 31 July 2008&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-7828821008188895498?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/7828821008188895498/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=7828821008188895498' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/7828821008188895498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/7828821008188895498'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/07/10-ways-to-increase-productivity-of.html' title='10 ways to increase the productivity of your programmers'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-5036490985621264021</id><published>2008-07-14T10:56:00.004+08:00</published><updated>2008-07-14T11:04:33.603+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IsolatedStorage'/><title type='text'>Using the Isolated Storage</title><content type='html'>&lt;span style="font-weight:bold;"&gt;Writing to isolated storage&lt;/span&gt;&lt;br /&gt;IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForAssembly();&lt;br /&gt;IsolatedStorageFileStream fs = new IsolatedStorageFileStream("storage.xml", FileMode.OpenOrCreate, isf);&lt;br /&gt;&lt;br /&gt;XmlSerializer xmlSerializer = new XmlSerializer(typeof(ClassType));&lt;br /&gt;xmlSerializer.Serialize(fs, _variable);&lt;br /&gt;&lt;br /&gt;fs.Close();&lt;br /&gt;isf.Close();&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Reading from isolated storage&lt;/span&gt;&lt;br /&gt;IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForAssembly();&lt;br /&gt;if (isf.GetFileNames("storage.xml").Length == 0)&lt;br /&gt;{&lt;br /&gt; return;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;IsolatedStorageFileStream fs = new IsolatedStorageFileStream("storage.xml", FileMode.OpenOrCreate, isf);                       &lt;br /&gt;XmlSerializer xmlSerializer = new XmlSerializer(typeof(ClassType));&lt;br /&gt;_variable = (ClassType)xmlSerializer.Deserialize(fs);&lt;br /&gt;&lt;br /&gt;fs.Close();&lt;br /&gt;isf.Close();&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-5036490985621264021?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/5036490985621264021/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=5036490985621264021' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/5036490985621264021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/5036490985621264021'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/07/using-isolated-storage.html' title='Using the Isolated Storage'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-5924757171603467227</id><published>2008-07-10T09:00:00.008+08:00</published><updated>2008-07-10T09:46:22.187+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Serialization'/><title type='text'>SortedDictionary is not serializable</title><content type='html'>Anything that implements the IDictionary interface in .Net Framework 2.0 is not serializable. It will throw exceptions when you try to serialize it.&lt;br /&gt;&lt;br /&gt;Paul Welter has a solution for it on his blog.&lt;br /&gt;&lt;br /&gt;Here's how&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    using System;&lt;br /&gt;    using System.Collections.Generic;&lt;br /&gt;    using System.Text;&lt;br /&gt;    using System.Xml.Serialization; &lt;br /&gt;&lt;br /&gt;    [XmlRoot("dictionary")]&lt;br /&gt;    public class SerializableDictionary&lt;TKey, TValue&gt;&lt;br /&gt;        : Dictionary&lt;TKey, TValue&gt;, IXmlSerializable&lt;br /&gt;    {&lt;br /&gt;        #region IXmlSerializable Members&lt;br /&gt;&lt;br /&gt;        public System.Xml.Schema.XmlSchema GetSchema()&lt;br /&gt;        {&lt;br /&gt;            return null;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public void ReadXml(System.Xml.XmlReader reader)&lt;br /&gt;        {&lt;br /&gt;            XmlSerializer keySerializer = new XmlSerializer(typeof(TKey));&lt;br /&gt;            XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue)); &lt;br /&gt;&lt;br /&gt;            bool wasEmpty = reader.IsEmptyElement;&lt;br /&gt;            reader.Read();&lt;br /&gt;&lt;br /&gt;            if (wasEmpty)&lt;br /&gt;                return; &lt;br /&gt;&lt;br /&gt;            while (reader.NodeType != System.Xml.XmlNodeType.EndElement)&lt;br /&gt;            {&lt;br /&gt;&lt;br /&gt;                reader.ReadStartElement("item");&lt;br /&gt;&lt;br /&gt;                reader.ReadStartElement("key");&lt;br /&gt;                TKey key = (TKey)keySerializer.Deserialize(reader);&lt;br /&gt;                reader.ReadEndElement(); &lt;br /&gt;&lt;br /&gt;                reader.ReadStartElement("value");&lt;br /&gt;                TValue value = (TValue)valueSerializer.Deserialize(reader);&lt;br /&gt;                reader.ReadEndElement(); &lt;br /&gt;&lt;br /&gt;                this.Add(key, value); &lt;br /&gt;&lt;br /&gt;                reader.ReadEndElement();&lt;br /&gt;                reader.MoveToContent();&lt;br /&gt;            }&lt;br /&gt;            reader.ReadEndElement();&lt;br /&gt;        } &lt;br /&gt;&lt;br /&gt;        public void WriteXml(System.Xml.XmlWriter writer)&lt;br /&gt;        {&lt;br /&gt;&lt;br /&gt;            XmlSerializer keySerializer = new XmlSerializer(typeof(TKey));&lt;br /&gt;            XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue)); &lt;br /&gt;&lt;br /&gt;            foreach (TKey key in this.Keys)&lt;br /&gt;            {&lt;br /&gt;                writer.WriteStartElement("item");&lt;br /&gt;&lt;br /&gt;                writer.WriteStartElement("key");&lt;br /&gt;                keySerializer.Serialize(writer, key);&lt;br /&gt;                writer.WriteEndElement();&lt;br /&gt;&lt;br /&gt;                writer.WriteStartElement("value");&lt;br /&gt;                TValue value = this[key];&lt;br /&gt;                valueSerializer.Serialize(writer, value);&lt;br /&gt;                writer.WriteEndElement();&lt;br /&gt;&lt;br /&gt;                writer.WriteEndElement();&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        #endregion&lt;br /&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Bibliography&lt;br /&gt;Paul Welter, &lt;a href="http://weblogs.asp.net/pwelter34/archive/2006/05/03/444961.aspx"&gt;XML Serializable Generic Dictionary&lt;/a&gt;, accessed 10 July 2008&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-5924757171603467227?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/5924757171603467227/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=5924757171603467227' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/5924757171603467227'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/5924757171603467227'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/07/sorteddictionary-is-not-serializable.html' title='SortedDictionary is not serializable'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-2525595950929868976</id><published>2008-07-06T20:56:00.002+08:00</published><updated>2008-07-06T21:02:20.571+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft Software Licensing and Protection Services'/><title type='text'>Microsoft Software Licensing and Protection Services</title><content type='html'>Want to encrypt your source code and provide licensing? Consider this great product offered by Microsoft.&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-style: italic;"&gt;If you are developing innovative software applications, you need innovative ways to protect, package, license, sell, and manage your software. Microsoft® Software Licensing &amp;amp; Protection (SLP) Services is designed to help independent software vendors (ISVs) provide flexible license models to help increase sales, improve efficiency for development, and protect intellectual property (IP) and revenues. SLP Services helps ISVs get to market faster and for less money.&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;The Microsoft SLP Code Protector is offered at no charge.&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-style:italic;"&gt;Microsoft SLP Code Protector is designed to help protect .NET code against disassembling and decompilation used in cracking and reverse engineering efforts. Microsoft SLP Code Protector combines an advanced encryption engine with unique transformation algorithms that help keep code inaccessible – without affecting functionality and with minimal performance impact on your applications. Our vendor-unique selective code transformation and strong code encryption schemes help guard against unauthorized use of your valuable code. It also provides code integrity in protected functions to help reduce the risk of viruses or malicious code injection.&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Bibliography&lt;br /&gt;Microsoft, &lt;a href="http://www.microsoft.com/slps/"&gt;Microsoft Software Licensing and Protection Services&lt;/a&gt;, accessed 06 July 2008&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-2525595950929868976?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/2525595950929868976/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=2525595950929868976' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/2525595950929868976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/2525595950929868976'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/07/microsoft-software-licensing-and.html' title='Microsoft Software Licensing and Protection Services'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-3836327071086197532</id><published>2008-06-20T22:05:00.004+08:00</published><updated>2008-06-20T22:12:10.860+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Team Foundation Server'/><title type='text'>How to: Configure Team Foundation Source Control to use Proxy Server</title><content type='html'>&lt;blockquote&gt;&lt;span style="font-style: italic;"&gt;Team Foundation source control can be configured to provide enhanced performance for distributed teams by using proxy servers. The proxy server caches copies of source control files in the location of the distributed team, therefore significantly reducing the bandwidth-intensive operation of downloading files into a user’s workspace.&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;To configure a Visual Studio client to use a Team Foundation proxy server&lt;br /&gt;&lt;ol&gt;&lt;li&gt;On the Tools menu, click Options.&lt;/li&gt;&lt;li&gt;In the Options dialog box, locate Source Control, expand it, and then click Visual Studio Team Foundation Server.&lt;/li&gt;&lt;li&gt;Click Use proxy server.&lt;/li&gt;&lt;li&gt;In the Server box, type the UNC path of the computer that is hosting the Team Foundation Server name. This is the name of the server on which you installed Team Foundation Server Proxy. It is not the name of the server on which you have your team projects. For more information, see Team Foundation Administrators.&lt;/li&gt;&lt;li&gt;In the Port box, type 8081, which is the port designated for communication between the client and Team Foundation Server Proxy.&lt;/li&gt;&lt;li&gt;Under Protocol, select either http or https.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;p&gt;Bibliography&lt;br /&gt;Microsoft, &lt;a href="http://msdn.microsoft.com/en-us/library/ms245478%28VS.80%29.aspx"&gt;How to: Configure Team Foundation Source Control to use Proxy Server&lt;/a&gt;, accessed 20 June 2008&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-3836327071086197532?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/3836327071086197532/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=3836327071086197532' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/3836327071086197532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/3836327071086197532'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/06/how-to-configure-team-foundation-source.html' title='How to: Configure Team Foundation Source Control to use Proxy Server'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-384829747537065185</id><published>2008-06-06T23:03:00.001+08:00</published><updated>2008-06-06T23:13:24.412+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TechEd2008'/><title type='text'>TechEd2008 - Application Development, Looking Ahead</title><content type='html'>Bill Gates discusses the future of application development and what to expect in the coming months.&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/VnrIC0skLME&amp;hl=en"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/VnrIC0skLME&amp;hl=en" type="application/x-shockwave-flash" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-384829747537065185?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/384829747537065185/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=384829747537065185' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/384829747537065185'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/384829747537065185'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/06/teched2008-application-development.html' title='TechEd2008 - Application Development, Looking Ahead'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-5091449750509988702</id><published>2008-06-06T22:59:00.007+08:00</published><updated>2008-06-06T23:04:30.510+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TechEd2008'/><category scheme='http://www.blogger.com/atom/ns#' term='ADO.Net'/><title type='text'>TechEd2008 - ADO.NET Distributed Cache</title><content type='html'>SQL Server 2008 features including Spatial, Sync Framework and Sync Services for ADO.NET, and SQL Server Data Services.&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="350"&gt; &lt;param name="movie" value="http://www.youtube.com/v/RCJJmfjW5x4"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/RCJJmfjW5x4" type="application/x-shockwave-flash" width="425" height="350"&gt; &lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-5091449750509988702?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/5091449750509988702/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=5091449750509988702' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/5091449750509988702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/5091449750509988702'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/06/teched2008-adonet-distributed-cache.html' title='TechEd2008 - ADO.NET Distributed Cache'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-9039265786896213003</id><published>2008-06-06T10:10:00.002+08:00</published><updated>2008-06-06T23:04:44.083+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TechEd2008'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>TechEd2008 - Silverlight 2 Beta 2 Announced</title><content type='html'>&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/1WrULsqDSCU&amp;hl=en"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/1WrULsqDSCU&amp;hl=en" type="application/x-shockwave-flash" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-9039265786896213003?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/9039265786896213003/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=9039265786896213003' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/9039265786896213003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/9039265786896213003'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/06/teched2008-silverlight-2-beta-2.html' title='TechEd2008 - Silverlight 2 Beta 2 Announced'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-4688602661357823898</id><published>2008-06-06T05:54:00.002+08:00</published><updated>2008-06-06T05:59:09.255+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FarPoint'/><title type='text'>Alternating row colors in Farpoint Spread</title><content type='html'>Creating alternating row colors in Farpoint Spread.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    Dim bAlternate As Boolean = False&lt;br /&gt;    For Each row As FarPoint.Win.Spread.Row In FpSpread1.Sheets(0).Rows&lt;br /&gt;      If (row.Visible) Then&lt;br /&gt;        If (bAlternate) Then&lt;br /&gt;          row.BackColor = SystemColors.InactiveCaptionText&lt;br /&gt;        Else&lt;br /&gt;          row.BackColor = Color.White&lt;br /&gt;        End If&lt;br /&gt;&lt;br /&gt;        bAlternate = Not bAlternate&lt;br /&gt;      End If&lt;br /&gt;    Next&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-4688602661357823898?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/4688602661357823898/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=4688602661357823898' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/4688602661357823898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/4688602661357823898'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/06/alternating-row-colors-in-farpoint.html' title='Alternating row colors in Farpoint Spread'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-6860306042201572414</id><published>2008-06-05T12:03:00.002+08:00</published><updated>2008-12-10T08:53:24.996+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scrum'/><title type='text'>Scrum</title><content type='html'>Found an interesting cartoon on scrum.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_m-Hwz-TGvms/SEdlydAh6XI/AAAAAAAABrg/lqYMA-T5u0c/s1600-h/080602-scrumtoon.jpg"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_m-Hwz-TGvms/SEdlydAh6XI/AAAAAAAABrg/lqYMA-T5u0c/s400/080602-scrumtoon.jpg" alt="" id="BLOGGER_PHOTO_ID_5208243411531983218" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Bibliography&lt;br /&gt;&lt;a href="http://www.implementingscrum.com/"&gt;Implementing Scrum&lt;/a&gt;, accessed 04 June 2008&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-6860306042201572414?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/6860306042201572414/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=6860306042201572414' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/6860306042201572414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/6860306042201572414'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/06/scrum.html' title='Scrum'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_m-Hwz-TGvms/SEdlydAh6XI/AAAAAAAABrg/lqYMA-T5u0c/s72-c/080602-scrumtoon.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-5719538651847655020</id><published>2008-05-31T01:43:00.002+08:00</published><updated>2008-05-31T01:46:07.378+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Composite UI Application Block'/><title type='text'>Architecting Composite Smart Clients Using CAB and SCSF</title><content type='html'>Another useful resource for composite UI application block (CAB).&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-style:italic;"&gt;Summary: Microsoft's offerings for building composite smart clients include Composite UI Application Block (CAB) and the Smart Client Software Factory (SCSF) from the Patterns &amp; Practices Group. This article unveils the architectural details of CAB and SCSF, and shows you how to design composite smart clients using CAB and SCSF. The examples are from an integrated bank desktop smart-client project undertaken at RACON Software GmbH, a software house of the Raiffeisen Banking Group in Upper Austria.&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Bibliography&lt;br /&gt;Mario Szpuszta, &lt;a href="http://msdn.microsoft.com/en-us/library/bb266334.aspx"&gt;The Architecture Journal - Architecting Composite Smart Clients Using CAB and SCSF&lt;/a&gt;, accessed 30 May 2008&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-5719538651847655020?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/5719538651847655020/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=5719538651847655020' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/5719538651847655020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/5719538651847655020'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/05/architecting-composite-smart-clients.html' title='Architecting Composite Smart Clients Using CAB and SCSF'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-5845896770760678394</id><published>2008-05-30T07:59:00.002+08:00</published><updated>2008-05-30T08:03:09.679+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Regionerate'/><title type='text'>Regionerate</title><content type='html'>This is another excellent tool for improving productivity in Visual Studio. It auto formats and groups your codes into regions.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-style: italic;"&gt;An automatic layout enforcement tool for the C# programming language.&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Bibliography&lt;br /&gt;Omer Rauchwerger, &lt;a href="http://www.rauchy.net/regionerate/2007/06/regionerate-101.html"&gt;Regionerate &lt;/a&gt;, accessed 29 May 2008&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-5845896770760678394?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/5845896770760678394/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=5845896770760678394' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/5845896770760678394'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/5845896770760678394'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/05/regionerate.html' title='Regionerate'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-2640322247994820477</id><published>2008-05-30T00:46:00.006+08:00</published><updated>2008-05-30T00:58:35.382+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GhostDoc'/><title type='text'>GhostDoc</title><content type='html'>A piece of excellent software that improves productivity by generating comments for you.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-style:italic;"&gt;GhostDoc is a free add-in for Visual Studio that automatically generates XML documentation comments for C#. Either by using existing documentation inherited&lt;br /&gt;from base classes or implemented interfaces, or by deducing comments from&lt;br /&gt;name and type of e.g. methods, properties or parameters.&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Bibliography&lt;br /&gt;Roland Weigelt, &lt;a href="http://www.roland-weigelt.de/ghostdoc/"&gt;Roland Weigelt's  G h o s t D o c&lt;/a&gt;, accessed 29 May 2008&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-2640322247994820477?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/2640322247994820477/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=2640322247994820477' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/2640322247994820477'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/2640322247994820477'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/05/ghostdoc.html' title='GhostDoc'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-1733737921627065870</id><published>2008-05-28T02:43:00.003+08:00</published><updated>2008-05-28T02:49:24.196+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Solutions Architect'/><title type='text'>The key skills of an architect</title><content type='html'>One diagram summarizes more than words could say.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://msdn.microsoft.com/en-us/library/Cc505974.jour15_WeDontNeed_Fig01(en-us,MSDN.10).jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px;" src="http://msdn.microsoft.com/en-us/library/Cc505974.jour15_WeDontNeed_Fig01(en-us,MSDN.10).jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Bibliography&lt;br /&gt;Joseph Hofstader, &lt;a href="http://msdn.microsoft.com/en-us/library/cc505974.aspx"&gt;The Architecture Journal - We Don't Need No Architects&lt;/a&gt;, accessed 27 May 2008&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-1733737921627065870?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/1733737921627065870/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=1733737921627065870' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/1733737921627065870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/1733737921627065870'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/05/key-skills-of-architect.html' title='The key skills of an architect'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-1040412087743768724</id><published>2008-05-28T02:31:00.002+08:00</published><updated>2008-05-28T02:36:14.466+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Composite UI Application Block'/><title type='text'>Composite UI Application Block</title><content type='html'>If you are looking to build complex, Microsoft look alike window interfaces, I recommend the following:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;The Composite UI Application Block is a reusable, source code–based component based on the Microsoft .NET Framework 2.0. It provides proven practices to build complex smart client user interfaces based on well known design patterns such as the Composite pattern, in which simple user interface parts can be combined to create complex solutions, but at the same time allowing these parts to be independently developed, tested, and deployed.&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Bibliography&lt;br /&gt;Microsoft, &lt;a href="http://msdn.microsoft.com/en-us/library/aa480450.aspx"&gt;Smart Client - Composite UI Application Block&lt;/a&gt;, accessed 27 May 2008&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-1040412087743768724?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/1040412087743768724/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=1040412087743768724' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/1040412087743768724'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/1040412087743768724'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/05/composite-ui-application-block.html' title='Composite UI Application Block'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-3513661997028442995</id><published>2008-05-23T08:50:00.002+08:00</published><updated>2008-05-23T08:55:51.197+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft SharedView'/><title type='text'>Microsoft SharedView</title><content type='html'>There are many desktop sharing softwares out there. Microsoft has finally decided to come out with its own. What you need is to download the software and a Windows Live ID. I bet most of you have a Windows Live ID if you use messenger.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-style:italic;"&gt;Microsoft SharedView is a fast, easy way to share documents and screen views with small groups of friends or coworkers; anytime, anywhere. Use SharedView to put your heads together and collaborate - create, convey, and communicate…across physical boundaries, through firewalls, and down to the smallest details.&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Bibliography&lt;br /&gt;Microsoft, &lt;a href="http://connect.microsoft.com/site/sitehome.aspx?SiteID=94"&gt;Microsoft SharedView&lt;/a&gt;, accessed 22 May 2008&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-3513661997028442995?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/3513661997028442995/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=3513661997028442995' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/3513661997028442995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/3513661997028442995'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/05/microsoft-sharedview.html' title='Microsoft SharedView'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-8372813845917005967</id><published>2008-05-21T09:17:00.004+08:00</published><updated>2008-05-21T09:24:11.092+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Graphic'/><title type='text'>Adobe Photoshop Express</title><content type='html'>Adobe Photoshop has gone online. It is still in beta. The portal allows you to upload, edit and share your photos.&lt;br /&gt;&lt;br /&gt;The portal mentioned about directly linking the photos uploaded to Adobe Photoshop Express to Facebook and Flickr. I discovered these two features are not enabled on the portal yet.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Bibliography&lt;br /&gt;Adobe Systems Incorporated, &lt;a href="https://www.photoshop.com/express/landing.html"&gt;Adobe Photoshop Express&lt;/a&gt;, accessed 20 May 2008&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-8372813845917005967?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/8372813845917005967/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=8372813845917005967' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/8372813845917005967'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/8372813845917005967'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/05/adobe-photoshop-express.html' title='Adobe Photoshop Express'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-992247068679684777</id><published>2008-05-16T20:48:00.001+08:00</published><updated>2008-05-16T22:10:43.883+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Team Foundation Server'/><title type='text'>Team Foundation Server Power Tool Commands</title><content type='html'>&lt;span style="font-weight:bold;"&gt;Team Foundation Server Power Tool Commands&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Team Foundation Server Power Tool (tfpt.exe) is a command-line tool. To use these commands, start tfpt.exe at the Command Prompt. Some of the commands will display a graphical user interface when used. In addition, you can access the Annotate and Treediff commands from Source Control Explorer in Visual Studio or Team Explorer. Team Foundation Server Power Tool includes the following commands:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Unshelve Command&lt;/span&gt;&lt;br /&gt;Use the unshelve command to unshelve and merge the changes in the workspace.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Rollback Command&lt;/span&gt;&lt;br /&gt;Use the rollback command to roll back changes that have already been committed to Team Foundation Server.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;Online Command&lt;/span&gt;&lt;br /&gt;Use the online command to create pending edits on writable files that do not have pending edits.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;GetCS Command&lt;/span&gt;&lt;br /&gt;Use the GetCS (Get Changeset) command to get the changes in a particular changeset.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;UU Command&lt;/span&gt;&lt;br /&gt;Use the UU (Undo Unchanged) command to undo unchanged files, including adds, edits, and deletes.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Annotate Command&lt;/span&gt;&lt;br /&gt;Use the annotate command to download all versions of the specified files and show information about when and who changed each line in the file.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Review Command&lt;/span&gt;&lt;br /&gt;Use the review command to optimize the code review process to avoid checking in or shelving.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;History Command&lt;/span&gt;&lt;br /&gt;Use the history command to display the revision history for one or more files and folders. The /followbranches option returns the history of the file branch’s ancestors.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Workitem Command&lt;/span&gt;&lt;br /&gt;Use the workitem command to create, update, or view work items.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Query Command&lt;/span&gt;&lt;br /&gt;Use the query command to run a work item query and display the results. If you do not provide a specific query, all the active work items assigned to you are displayed.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;TreeDiff Command&lt;/span&gt;&lt;br /&gt;Use the treediff command to display a visual representation of the differences between files in two server folders, in a server folder and a local folder, or in two local folders.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;Treeclean Command&lt;/span&gt;&lt;br /&gt;Use the treeclean command to view and optionally delete files that are not under source control in the current directory and all subdirectories. This command is useful when you want to remove temporary files from your local workspace, such as files created by the compiler.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Bibliography&lt;br /&gt;Microsoft, &lt;a href="http://msdn.microsoft.com/en-us/teamsystem/aa718351.aspx"&gt;Team Foundation Server Power Tool Commands&lt;/a&gt;, accessed 16 May 2008&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-992247068679684777?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/992247068679684777/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=992247068679684777' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/992247068679684777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/992247068679684777'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/05/team-foundation-server-power-tool.html' title='Team Foundation Server Power Tool Commands'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-2365278284206885139</id><published>2008-05-16T03:05:00.004+08:00</published><updated>2008-05-16T03:17:07.804+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Xobni'/><title type='text'>Xobni</title><content type='html'>Here is a fun plug in for Outlook. Have fun!&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-style:italic;"&gt;Xobni is the Outlook plug-in that helps you organize your flooded inbox.&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Bibliography&lt;br /&gt;Xobni, &lt;a href="http://www.xobni.com/"&gt;Xobni&lt;/a&gt;, accessed 15 May 2008&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-2365278284206885139?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/2365278284206885139/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=2365278284206885139' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/2365278284206885139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/2365278284206885139'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/05/xobni.html' title='Xobni'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-2772438386646375240</id><published>2008-05-09T06:04:00.003+08:00</published><updated>2008-05-09T06:08:13.746+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SMTP'/><title type='text'>Telnet to SMTP</title><content type='html'>Do you know that you can do a telnet into SMTP and send email from there?&lt;br /&gt;&lt;br /&gt;Open up command prompt by going to Run and type &lt;span style="color: rgb(0, 0, 153);"&gt;CMD&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;TELNET smtp.XXX.com 23&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;MAIL TO: XXXX@gmail.com&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;RCPT TO: XXXX@gmail.com&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;DATA&lt;/span&gt;&lt;br /&gt;Enter some text here and hit Enter . Enter&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-2772438386646375240?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/2772438386646375240/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=2772438386646375240' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/2772438386646375240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/2772438386646375240'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/05/telnet-to-smtp.html' title='Telnet to SMTP'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-5715318197009183449</id><published>2008-05-08T08:44:00.003+08:00</published><updated>2008-05-08T08:50:32.233+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SDLC'/><title type='text'>Scrum (Development)</title><content type='html'>Have you ever heard about a pig and a chicken? I laughed when I read the joke. Hope it entertains you too.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;A pig and a chicken are walking down a road. The chicken looks at the pig and says, "Hey, why don't we open a restaurant?" The pig looks back at the chicken and says, "Good idea, what do you want to call it?" The chicken thinks about it and says, "Why don't we call it 'Ham and Eggs'?" "I don't think so," says the pig, "I'd be committed but you'd only be involved."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Bibliography&lt;br /&gt;Wikipedia, &lt;a href="http://en.wikipedia.org/wiki/Scrum_%28development%29"&gt;Scrum (Development)&lt;/a&gt;, accessed 07 May 2008&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-5715318197009183449?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/5715318197009183449/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=5715318197009183449' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/5715318197009183449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/5715318197009183449'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/05/scrum-development.html' title='Scrum (Development)'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-509487422905044889</id><published>2008-05-08T01:05:00.005+08:00</published><updated>2009-06-11T09:30:23.560+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C# Remoting'/><title type='text'>Remoted DateTime values in a DataSet object are converted to the equivalent local time of a remote computer that is in a different time zone</title><content type='html'>Do you use remoting and serialized a dataset that has datetime values in it?&lt;br /&gt;&lt;br /&gt;I wonder if you face the same problem as I do?&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;blockquote&gt;When you pass an object of the DataSet class to a remote Web service or to a Web service that is in a time zone that is different from the time zone of the calling application, the DateTime columns in a contained table are converted to the equivalent local time. The DateTime columns are converted because the System.Data.DataSet code adjusts to the equivalent local time according to the time zone of the remote computer. For example, if a value of 5:00 is passed from a client computer in Pacific Time to a Web service in Eastern Time, the value in the DataSet object changes to 8:00 in the receiving method of the Web service. This article describes how to work around this problem by passing the time zone information from the client application to the Web service and by adjusting the DateTime columns at the remote computer. The System.Data is the namespace that contains the DataSet class.&lt;/blockquote&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Navigate the link below to see Microsoft's proposed solution.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Bibliography&lt;br /&gt;Microsoft Help and Support, &lt;a href="http://support.microsoft.com/kb/842545"&gt;Remoted DateTime values in a DataSet object are converted to the equivalent local time of a remote computer that is in a different time zone&lt;/a&gt;, accessed 07 May 2008&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-509487422905044889?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/509487422905044889/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=509487422905044889' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/509487422905044889'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/509487422905044889'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/05/remoted-datetime-values-in-dataset.html' title='Remoted DateTime values in a DataSet object are converted to the equivalent local time of a remote computer that is in a different time zone'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-2354056875908400474</id><published>2008-05-07T07:14:00.004+08:00</published><updated>2008-05-07T07:28:55.227+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Service'/><title type='text'>Web Service Url in Config</title><content type='html'>If you add a web reference (E.g. http://localhost/webservice/helloworld.asmx), you have to change the server under properties and do a recompile every time the web service deployment server changes.&lt;br /&gt;&lt;br /&gt;To work around or "resolve" this issue, we can store the url as a key in App.config and assign the url to the .url property to the object.&lt;br /&gt;&lt;br /&gt;For example,&lt;br /&gt;In app.config,&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;&lt;br /&gt;&amp;lt;add key="HelloUrl" value="http://deployment/webservice/helloworld.asmx"&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In your code to call the webservice,&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;HelloWorld helloworld = new HelloWorld();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;helloworld.Url = System.Configuration.ConfigurationManager.AppSettings["HelloUrl"]&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-2354056875908400474?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/2354056875908400474/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=2354056875908400474' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/2354056875908400474'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/2354056875908400474'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/05/web-service-url-in-config.html' title='Web Service Url in Config'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-1757763498085058222</id><published>2008-05-06T10:31:00.004+08:00</published><updated>2008-05-06T10:40:44.054+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Solutions Architect'/><title type='text'>Career Path as a Solutions Architect</title><content type='html'>I remember people calling themselves solutions architect. Some lived up to their name, some not.&lt;br /&gt;&lt;br /&gt;So... What is a Solution Architect?&lt;br /&gt;&lt;br /&gt;Here is how Robert Bogue defined it.&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"The essence of the Solution Architect (SA) role is the conversion of the requirements into an architecture and design that will become the blueprint for the solution being created."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I came across Mark Baciak's blog. There seems to be 2 general paths:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Career Path for Consultant Track&lt;/span&gt;&lt;br /&gt;Analyst &gt; Senior Analyst &gt; Consultant &gt; Senior Consultant &gt; Manager &gt; Solutions Architect&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Career Path for Developer Track&lt;/span&gt;&lt;br /&gt;Developer &gt; Senior Developer &gt; Lead Developer &gt; Development Manager &gt; Group Development Manager &gt; Solutions Architect&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Bibliography&lt;br /&gt;Mark Baciak, &lt;a href="http://www.pluralsight.com/blogs/markba/archive/2005/09/01/14475.aspx"&gt;What does the Solutions Architect career path look like?&lt;/a&gt;, accessed 05 May 2008&lt;br /&gt;Robert Bogue, &lt;a href="http://www.developer.com/mgmt/article.php/3504496"&gt;Anatomy of a Software Development Role: Solution Architect&lt;/a&gt;, accessed 05 May 2008&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-1757763498085058222?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/1757763498085058222/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=1757763498085058222' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/1757763498085058222'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/1757763498085058222'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/05/career-path-as-solutions-architect.html' title='Career Path as a Solutions Architect'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-4648884654760356883</id><published>2008-04-17T03:41:00.004+08:00</published><updated>2009-06-27T12:45:38.980+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='At Work'/><title type='text'>Know Your Boundaries at Work</title><content type='html'>&lt;span style="FONT-STYLE: italic"&gt;Date updated: December 15, 2006&lt;/span&gt;&lt;br /&gt;&lt;span style="FONT-STYLE: italic"&gt;By Darin Painter&lt;/span&gt;&lt;br /&gt;&lt;span style="FONT-STYLE: italic"&gt;Content provided by Revolution Health Group&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Sally in Sales refuses to back down from a challenge. She refuses to take no for an answer. Did you hear she refuses to breast-feed? Amber in Accounting leaves no stone unturned. She leaves the office late when necessary. Did you hear she's leaving her husband?&lt;br /&gt;&lt;br /&gt;Understanding co-workers' skills can be powerful — knowing their scuttlebutt can be problematic.&lt;br /&gt;&lt;br /&gt;"Your ability to carry a conversation is crucial in building relationships with fellow employees, but boundaries must exist," says Susan Morem, a Minneapolis-based business consultant and author of How to Gain the Professional Edge, 2nd edition (Ferguson Publishing Co., 2005).&lt;br /&gt;&lt;br /&gt;"The border separating professional and personal relationships isn't easy to patrol, especially at smaller, informal offices," she says. "But conversational boundaries help to determine the reputation of an employee and staff. Simply put, boundaries preserve integrity."&lt;br /&gt;&lt;br /&gt;Whether you're a principal, manager or rank-and-file employee, taking the following advice will help to ensure that conversations with co-workers never distract from a productive, positive workplace.&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Beware of feeling informal&lt;/span&gt;&lt;br /&gt;Some organizations clarify "appropriate" office communication, but most codes of conduct mention only potential legal headaches such as sexual harassment and invasion of privacy.&lt;br /&gt;&lt;br /&gt;"There's generally no clear rule about where to draw the line, so a good rule of thumb is to avoid issues that might make someone uncomfortable," Morem says. Such topics of conversation may include romance, physical appearance, health, race, religion and personal finance.&lt;br /&gt;&lt;br /&gt;"Refrain from gossip," Morem advises. "Remember: Those who talk to you about others will also talk about you to others."&lt;br /&gt;&lt;br /&gt;Morem says most gossip and other inappropriate conversations occur in places that feel informal, such as elevators, hallways and bathrooms. But co-workers should never get the false sense of security that they're off duty in these locations.&lt;br /&gt;&lt;br /&gt;"It's better to pretend your personal microphone is always on. Don't say something if you don't want it heard or repeated," he says. "Making an unsuitable remark damages how others perceive you, and the negative effects on reputation and future advancement can be long-term."&lt;br /&gt;&lt;br /&gt;But making such remarks isn't always the problem; co-workers can aim to prevent hearing them. While it's natural for employees to show interest in one another's lives, someone has to be courageous enough to cut off a co-worker when warranted, says Lydia Ramsey, a consultant on office etiquette in Savannah, Ga., and author of Manners That Sell (Longfellow Press, 2000).&lt;br /&gt;&lt;br /&gt;One strategy is to turn off-topic conversations back to work-related issues as quickly as possible. An unwillingness to reveal too much personal information — or to listen to another person reveal it — shouldn't be seen as unfriendly, Ramsey says. By smiling and simply saying, "Let's not go there," you can stick to suitable discussions without seeming like a stick-in-the-mud.&lt;br /&gt;&lt;br /&gt;Just as informal places can get co-workers into trouble, so can seemingly informal methods of communication. "Employees should treat email as broadcasted words that can be read and printed," Morem says. "It's easier to pass around rumors, gossip and tasteless jokes to multiple people via email than by word of mouth. If you think before you speak, don't forget to think before you hit the 'send' button."&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Forge office friendships with care&lt;/span&gt;&lt;br /&gt;When you're at the office for around 2,000 hours a year, you're bound to develop friendships with co-workers. Some may become confidants with whom you share personal details.&lt;br /&gt;&lt;br /&gt;"Make sure you know and completely trust this kind of co-worker friend," Morem suggests. "It's a risk any time someone has knowledge about details you don't want to make public."&lt;br /&gt;&lt;br /&gt;When co-worker friendships fizzle, the parties often have to see each other daily. Also, keep in mind that office walls are (sometimes literally) thin, so it's best to share personal information during non-working hours.&lt;br /&gt;&lt;br /&gt;A close friendship in the office can cause reluctance to express problems. Employees whose friendships interfere with objectivity need to create some distance, Morem says.&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Expect boundary differences&lt;/span&gt;&lt;br /&gt;The workplace not only combines people of different backgrounds, ages, talents and skills but also folks of different boundary types, says Maggie Down, a relationship counselor and psychotherapist in Perth, Australia.&lt;br /&gt;&lt;br /&gt;People with "overdeveloped" boundaries often are brash and don't notice they're sharing too much information, while people with "underdeveloped" boundaries often believe it's not OK to protest such communication.&lt;br /&gt;&lt;br /&gt;"Getting along at work is often a matter of being flexible and willing to compromise," she says. "It's also important to be tolerant of individual differences."&lt;br /&gt;&lt;br /&gt;Because those differences are widespread and co-workers' boundaries are subjective, office humor is risky, Morem warns. "Most people want to laugh, but you never know who you're going to offend," she says. "The more people you involve, the more likely someone will feel embarrassed or picked on. Jokes can backfire, so tread lightly with them."&lt;br /&gt;Employ tact&lt;br /&gt;&lt;br /&gt;If you have a problem with a co-worker, address what you can do to solve it. Talk to the offending person directly and privately.&lt;br /&gt;&lt;br /&gt;"Talking behind someone's back makes the situation worse," Morem says. "Choose a neutral place away from your work area, such as over lunch or in a quiet area during a break."&lt;br /&gt;&lt;br /&gt;If a co-worker says something that offends or upsets you, try to respond instead of react. "Reaction is immediate and emotional. When we react to something, we are more likely to say or do things we might later regret," Morem says. "A response is planned and controlled, and it leads to fewer communication issues."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-4648884654760356883?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/4648884654760356883/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=4648884654760356883' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/4648884654760356883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/4648884654760356883'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/04/know-your-boundaries-at-work.html' title='Know Your Boundaries at Work'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-5157627614015843620</id><published>2008-04-12T04:23:00.000+08:00</published><updated>2008-04-12T04:25:25.955+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='A Slice of Life'/><title type='text'>Just One More</title><content type='html'>You've probably heard the expression "one little thing can make a big difference". To many of us most of the time, that phrase is just one of any number of overused platitudes that no longer mean anything to us. But like many time-tested aphorisms, that simple phrase contains deep insight. If we can pierce through the thick cloud of skepticism and excess, we begin to discover just how incredible the power of one is.&lt;br /&gt;&lt;br /&gt;For example, if you could make just one more cold call every day; that is, to a random prospect you've never contacted before, you would chalk up 260 calls a year. How many extra sales could come out of that?&lt;br /&gt;&lt;br /&gt;What about suggesting one more item to every customer? They may not buy it, but how do you know if you don't suggest it? It takes practically no extra effort.&lt;br /&gt;&lt;br /&gt;Try applying this principle to other aspects of your life:&lt;br /&gt;&lt;br /&gt;Set aside just one day per month for developing your skills. Attend a workshop maybe or read up on that tutorial for that new program. Most people, even if they think they know the importance of continuous upgrading, don't realize its value enough to actually do it. So that means you can quickly outpace your co-workers and competition.&lt;br /&gt;&lt;br /&gt;And read one book every month. There's no need to be too ambitious - just read one. But read books related to your industry or that will provide insight to helping you improve your skill in a specific area.&lt;br /&gt;&lt;br /&gt;Pause for one moment longer than usual before responding to a prospect's question or request. This silence usually makes people uncomfortable and they are more likely to blurt out something they had not planned on saying. This gives you more insight on the person as well as on the situation.&lt;br /&gt;&lt;br /&gt;Get to the office one hour earlier than everyone else. You can probably achieve more in those 60 minutes than you could in several hours. When the people start coming in, the noises and the coffee breaks and the chats and the phone calls can be endlessly distracting.&lt;br /&gt;&lt;br /&gt;Send out one more email a day to a potential customer. Very often, what people need is just a little push at the right time. This time today could be the time. The possibilities are endless - one more idea, one more thank you card, one more serving of fruit, one more endorsement or testimonial. It's just one more, but it could mean a ton of benefits.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;A Slice of Life is written, produced and presented by Eugene Loh unless otherwise stated. If you wish to share the scripts with others, please credit 'Eugene Loh, 938LIVE, a station of MediaCorp Radio'.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-5157627614015843620?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/5157627614015843620/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=5157627614015843620' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/5157627614015843620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/5157627614015843620'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/04/just-one-more.html' title='Just One More'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-619738630401351829</id><published>2008-03-25T21:55:00.000+08:00</published><updated>2008-03-25T21:56:45.940+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='A Slice of Life'/><title type='text'>Coping With the Boss From Hell</title><content type='html'>Most of us work under someone, and unfortunately, nasty bosses can become a part of virtually any employee's life. Sometimes, the boss goes beyond just unreasonable or frustratingly incompetent; sometimes, the boss can be downright poisonous, verbally and psychologically abusive, creating great doubt and depression in their subordinates. &lt;br /&gt;&lt;br /&gt;So, if leaving the job is not an option, at least not for now, how do you deal with a toxic boss? &lt;br /&gt;&lt;br /&gt;Don't take it personally. If a toxic boss unreasonably insults or reprimands you, try not to internalize it or take it to heart. Your job is what you do, not what you are. Take the attacks as episodes - once they're over, forget them, move on to something that makes you feel nice. &lt;br /&gt;&lt;br /&gt;A strong sense of self-esteem can also help you to handle your boss' attacks without personalizing them. Your boss' opinion counts, but so does yours. Believe in yourself and develop a strong sense of self-worth. &lt;br /&gt;&lt;br /&gt;Pick your battles. Some battles are worth fighting, and others aren't. If your boss asks for something unreasonable but easy, perhaps you should concede. You will achieve victory by knowing that you avoided a longer, more painful incident by conceding rather than fighting. &lt;br /&gt;&lt;br /&gt;Many people get into a war of words. But what's more effective is fighting with actions. You may complain to your boss that you're overworked. Yet he or she continues to pile on the work. A toxic boss may not acknowledge the problem until the work stops getting done. Even better if you can provide concrete evidence, documentation or manpower legislation. &lt;br /&gt;&lt;br /&gt;Be selfish. Take care of yourself. In your quest to please a toxic boss, it's easy to neglect yourself. Don't. If you suffer burnout, physical problems, or family problems as a result of a toxic boss, it is you, not your boss, who will ultimately deal with the fallout. You must remember to take care of yourself first.&lt;br /&gt;&lt;br /&gt;Use humour. Toxic bosses can drain you physically and emotionally. Humour can help to revitalize you. See if you can turn your boss' mannerisms, demeanour or actions into something that's amusing to you. Consistently let off steam! Laugh it away! &lt;br /&gt;&lt;br /&gt;Dealing with a toxic boss is not the easiest thing in the world, but remember, you don't have to break apart now, you will live to fight another day, so don't take it personally, treat yourself well, and get plenty of comic relief!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;A Slice of Life is written, produced and presented by Eugene Loh unless otherwise stated. If you wish to share the scripts with others, please credit 'Eugene Loh, 938LIVE, a station of MediaCorp Radio'.&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-619738630401351829?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/619738630401351829/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=619738630401351829' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/619738630401351829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/619738630401351829'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/03/coping-with-boss-from-hell.html' title='Coping With the Boss From Hell'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-341724186806949977</id><published>2008-03-20T16:50:00.002+08:00</published><updated>2008-03-20T16:58:09.922+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><title type='text'>Remote Desktop Connection</title><content type='html'>I can't seem to find the Remote Desktop Connection item in my Win XP startup menu.&lt;br /&gt;&lt;br /&gt;Another way to launch it is to go to &lt;span style="color: rgb(0, 0, 153);"&gt;Start &gt; Run ... Type mstsc&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-341724186806949977?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/341724186806949977/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=341724186806949977' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/341724186806949977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/341724186806949977'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/03/remote-desktop-connection.html' title='Remote Desktop Connection'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-5056091840362517292</id><published>2008-03-18T20:25:00.000+08:00</published><updated>2008-03-18T20:26:15.664+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='A Slice of Life'/><title type='text'>Reward &amp; Recognition for a Motivated Workforce</title><content type='html'>It was Mark Twain who once said; "I can live for two months on a good compliment." Money may attract people to the front door, but something else has to keep them from going out the back. Many times employees say they are quitting because of a better paying job elsewhere. However, statistics show that the number one reason people quit their jobs is a lack of recognition and praise.&lt;br /&gt;&lt;br /&gt;Reward and recognition is not just a nice thing to do, but a critical element in the management toolkit. People have a basic human need to feel appreciated and recognition programs help meet that need.&lt;br /&gt;&lt;br /&gt;The second aspect of this science is management must create consequences for the behavior important for business success. A "behavior" could be showing up for work on time, having perfect attendance or going over and beyond the call of duty for customers or any other important behavior. A workplace is one that develops systems and processes to reward, recognize and sustain those important behaviors.&lt;br /&gt;&lt;br /&gt;Peer recognition is an example of a reward and recognition tool. It is one of the easiest and most effective programs to initiate. Peer recognition is where the employees have the power to reward each other for doing a good job. Peer recognition works because employees themselves know whom works hard and deserves recognition. Managers can't be everywhere all the time; therefore, the employees are in the best position to catch people doing the right things. Also, workers usually value each other's influence more than their supervisor's-peer pressure.&lt;br /&gt;&lt;br /&gt;Consider this initiative where workers have access to an unlimited supply of forms to hand-write a little note about the good job their co-workers did. On the back of the form, the company lists the behaviours they want to recognize including:&lt;br /&gt;&lt;br /&gt;* Demonstrates friendly, caring service&lt;br /&gt;* Shows flexibility&lt;br /&gt;* Demonstrates teamwork&lt;br /&gt;* Helps to save money&lt;br /&gt;&lt;br /&gt;When the employee writes up their coworker, the forms go to the main office where they post these forms on a central bulletin board for all employees to see. For added recognition, the company formally recognizes the employee who received the highest number of forms at the end of each month. That person receives a special gift from the manager. Then all the forms given out during the month are placed into a basket and names are randomly drawn for additional prizes. The forms are read aloud and recognition given to both the awardee, as well as the person submitting the form.&lt;br /&gt;&lt;br /&gt;Now isn't that better than creating an environment of penalties and fear?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;A Slice of Life is written, produced and presented by Eugene Loh unless otherwise stated. If you wish to share the scripts with others, please credit 'Eugene Loh, 938LIVE, a station of MediaCorp Radio'.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-5056091840362517292?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/5056091840362517292/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=5056091840362517292' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/5056091840362517292'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/5056091840362517292'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/03/reward-recognition-for-motivated.html' title='Reward &amp; Recognition for a Motivated Workforce'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-4249385647301501264</id><published>2008-03-11T16:53:00.002+08:00</published><updated>2008-03-11T17:04:49.353+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='LINQ'/><title type='text'>LINQ - Simple Select</title><content type='html'>Finally, I found some time to explore the power of LINQ. For a start, I am using LINQPad. Remember to download .Net Framework 3.5. I am using the AdventureWorks database in SQL 2005.&lt;br /&gt;&lt;br /&gt;Here is a simple query in LINQ&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;from emp in Employees&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;    select emp&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;and in lambda expression (amazingly short statement right?)&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;Employees    .Select (emp =&gt; emp) &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;and here is how it translate to SQL (Do not tell me you prefer this ....)&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;SELECT [t0].[EmployeeID], [t0].[NationalIDNumber], [t0].[ContactID], [t0].[LoginID], [t0].[ManagerID], [t0].[Title], [t0].[BirthDate], [t0].[MaritalStatus], [t0].[Gender], [t0].[HireDate], [t0].[SalariedFlag], [t0].[VacationHours], [t0].[SickLeaveHours], [t0].[CurrentFlag], [t0].[rowguid] AS [Rowguid], [t0].[ModifiedDate]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;FROM [HumanResources].[Employee] AS [t0]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.21022.8&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Go ahead. Run this in LINQPad.&lt;br /&gt;&lt;br /&gt;Bibliography&lt;br /&gt;&lt;a href="http://msdn2.microsoft.com/en-us/vcsharp/aa336746.aspx"&gt;101 LINQ Samples&lt;/a&gt;, accessed 11 Mar 2008&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-4249385647301501264?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/4249385647301501264/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=4249385647301501264' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/4249385647301501264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/4249385647301501264'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/03/linq-simple-select.html' title='LINQ - Simple Select'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-4020027460705998292</id><published>2008-03-07T09:59:00.002+08:00</published><updated>2008-03-07T10:05:28.563+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='A Slice of Life'/><title type='text'>Saying 'No'</title><content type='html'>Are you saying "yes" to things you don't really want to do? Are you taking on more than you can reasonably handle? Are you spending less time on yourself and your loved ones because your schedule is too intense?&lt;br /&gt;&lt;br /&gt;If you have trouble saying "no", you're not alone. We all find ourselves in situations where we say "yes" to others when we really want to say "no". For example, the friend who insists on buying you another round, the boss who sees you as the willing workhorse, or the mother-in-law who invites herself to stay.&lt;br /&gt;&lt;br /&gt;You may think you are being "Mr Nice Guy" by going along with these requests but you know what? When you give in too easily and too often, people simply see you as an easy target to exploit. You've exposed your weakness and they will impose on you time and again.&lt;br /&gt;&lt;br /&gt;Reacting angrily to what you might see as an unreasonable request is equally inappropriate. It may result in you being seen as hostile. In the workplace an angry refusal to do a piece of work may brand you as being un-cooperative.&lt;br /&gt;&lt;br /&gt;The only viable solution that does not upset others or make you feel bad is the assertive one.&lt;br /&gt;&lt;br /&gt;A good definition of assertiveness is when you stand up for your rights while accepting the rights of others. For example, if you're not contractually obliged to do what you're being asked, you have the right to say "no", just as much right as the other person to ask you. If a problem develops, resolve to work together on a solution. Try to reach a mutual compromise, rather than always compromising yourself.&lt;br /&gt;&lt;br /&gt;Here's how you can learn to say no assertively.&lt;br /&gt;&lt;br /&gt;Make "no" the first word out of your mouth so that others can see there is no hesitation or doubt. Remind yourself that they'll respect you more for being so definite.&lt;br /&gt;&lt;br /&gt;Think through your fears about their possible reactions. Be rational about them. Don't let the fear of what they might think of you force you to do something you don't want to do.&lt;br /&gt;&lt;br /&gt;Use a clear, assertive style: no ifs and buts, no excuses, no apologising. Thank the person for considering you for the request; say you are flattered and honoured.&lt;br /&gt;&lt;br /&gt;And don't feel as though you have to find solutions to their problem; don't dwell on it afterwards or feel responsible for their problem.&lt;br /&gt;&lt;br /&gt;Reclaim the time that's rightfully yours.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;A Slice of Life is written, produced and presented by Eugene Loh unless otherwise stated. If you wish to share the scripts with others, please credit 'Eugene Loh, 938LIVE, a station of MediaCorp Radio'.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-4020027460705998292?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/4020027460705998292/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=4020027460705998292' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/4020027460705998292'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/4020027460705998292'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/03/saying-no.html' title='Saying &apos;No&apos;'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-5475665258192072780</id><published>2008-03-06T23:16:00.002+08:00</published><updated>2008-03-06T23:18:25.017+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SgDotNet'/><title type='text'>SgDotNet - Mar 2008 UG Meeting - Summary</title><content type='html'>Nothing was mentioned about mashups. It seems that the speaker forgot about that. The whole session was talking about Microsoft Live ID thingy. Well, just refer to this site for more information regarding Microsoft Live ID. &lt;a href="http://dev.live.com/"&gt;http://dev.live.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-5475665258192072780?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/5475665258192072780/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=5475665258192072780' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/5475665258192072780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/5475665258192072780'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/03/sgdotnet-mar-2008-ug-meeting-summary.html' title='SgDotNet - Mar 2008 UG Meeting - Summary'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-8879168887292977261</id><published>2008-03-06T09:19:00.002+08:00</published><updated>2008-12-10T08:53:25.401+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft Office Live Workspace (Beta)'/><title type='text'>Microsoft Office Live Workspace (Beta)</title><content type='html'>My request for a beta account has just been approved.&lt;br /&gt;&lt;br /&gt;Here is a preview of Microsoft Office Live Workspace. Click to enlarge screen.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_m-Hwz-TGvms/R89G-i7OVkI/AAAAAAAABJQ/rNHHbvuotk4/s1600-h/Microsoft.Office.Live.WorkSpace.Beta.JPG"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_m-Hwz-TGvms/R89G-i7OVkI/AAAAAAAABJQ/rNHHbvuotk4/s320/Microsoft.Office.Live.WorkSpace.Beta.JPG" alt="" id="BLOGGER_PHOTO_ID_5174432537213032002" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-8879168887292977261?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/8879168887292977261/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=8879168887292977261' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/8879168887292977261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/8879168887292977261'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/03/microsoft-office-live-workspace-beta.html' title='Microsoft Office Live Workspace (Beta)'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_m-Hwz-TGvms/R89G-i7OVkI/AAAAAAAABJQ/rNHHbvuotk4/s72-c/Microsoft.Office.Live.WorkSpace.Beta.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-4297572999686447895</id><published>2008-03-03T09:01:00.005+08:00</published><updated>2009-06-27T12:42:18.899+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SgDotNet'/><title type='text'>SgDotNet - Mar 2008 UG Meeting</title><content type='html'>A new technology is uprising from Microsoft. "Mashups". Have you heard of it?&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Our next UG Meeting is held on &lt;span style="FONT-WEIGHT: bold"&gt;6th March 2008, Level 22CF-12, NTUC Building from 1845 hrs – 2030 hrs&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Windows Live SDK&lt;/span&gt;&lt;br /&gt;Darren Sim (ASP.NET MVP)&lt;br /&gt;1900 hrs – 2015 hrs&lt;br /&gt;&lt;br /&gt;The Windows Live™ Platform puts a deeper level of control into developers' hands by offering access to the core services and data through open, easily accessible APIs.&lt;br /&gt;&lt;br /&gt;In this presentation, Darren would share with the audience, what is Live SDK &amp;amp; Services all about and how they could leverage on this platform/framework, to build rich, interactive, applications for their personal/corporate sites.&lt;br /&gt;&lt;br /&gt;After the presentation you would be able to build applications and &lt;span style="FONT-WEIGHT: bold"&gt;mashups (Web applications that combine multiple services into a single application to consolidate information with an easy-to-use interface)&lt;/span&gt; that combine your innovation with the power of Windows Live services and social relationships!&lt;br /&gt;&lt;br /&gt;About the speaker&lt;br /&gt;&lt;br /&gt;Darren's a Microsoft ASP.NET MVP who speaks frequently in the MSDN Circuits and other Microsoft-linked events, internationally (most recently at VS LIVE! in San Francisco, USA), covering both academia events as well as professional events. His speaking engagements includes Microsoft Expressions, Microsoft XNA, .NET Security, Atlas, ClickOnce Development, ASP.NET 2.0, Visual Studio 2005, SQL Server 2005, Microsoft Communities, C# 2005, iMovie and Windows Vista.&lt;br /&gt;&lt;br /&gt;Apart from his speaking engagements, Darren also does trainings on Microsoft .NET technologies for technical training schools.&lt;br /&gt;&lt;br /&gt;Prior to joining Microsoft Developer Programs, Darren had been part of the Apple® Talent Development Team at MSHS where he led the Multimedia team, focusing on Multimedia Development &amp;amp; Production.&lt;/blockquote&gt;&lt;br /&gt;Website link: &lt;a href="http://sgdotnet.org/forums/thread/193061.aspx"&gt;SgDotNet&lt;/a&gt;, accessed 03 Mar 2008&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-4297572999686447895?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/4297572999686447895/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=4297572999686447895' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/4297572999686447895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/4297572999686447895'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/03/sgdotnet-mar-2008-ug-meeting.html' title='SgDotNet - Mar 2008 UG Meeting'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-7734897160463117635</id><published>2008-02-25T13:22:00.004+08:00</published><updated>2008-05-21T09:13:29.209+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Magazines'/><title type='text'>Free Magazine - asp.netPRO</title><content type='html'>Free PDF editions of asp.netPRO for your viewing pleasure.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.aspnetpro.com/PDF/ASP_200712.gif"&gt;&lt;img style="cursor: pointer;" src="http://www.aspnetpro.com/PDF/ASP_200712.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.aspnetpro.com/adredir.asp?url=/PDF/Issues/aspDEC2007.pdf"&gt;Dec 2007&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.aspnetpro.com/PDF/ASP_200801.gif"&gt;&lt;img style="cursor: pointer;" src="http://www.aspnetpro.com/PDF/ASP_200801.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.aspnetpro.com/adredir.asp?url=/PDF/Issues/aspJAN2008.pdf"&gt;Jan 2008&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.aspnetpro.com/PDF/ASP_200802.gif"&gt;&lt;img style="cursor: pointer;" src="http://www.aspnetpro.com/PDF/ASP_200802.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.aspnetpro.com/adredir.asp?url=/PDF/Issues/aspFEB2008.pdf"&gt;Feb 2008&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-7734897160463117635?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/7734897160463117635/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=7734897160463117635' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/7734897160463117635'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/7734897160463117635'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/02/free-magazine-aspnetpro.html' title='Free Magazine - asp.netPRO'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-5601573141507870561</id><published>2008-02-14T13:26:00.003+08:00</published><updated>2009-06-27T12:44:14.309+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>MSSQL.1, MSSQL.2, MSSQL.3 ...</title><content type='html'>Have you ever wonder why the naming conventions of the path in MS SQL 2005 is like the following?&lt;br /&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;C:\Program Files\Microsoft SQL Server\MSSQL.1&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;C:\Program Files\Microsoft SQL Server\MSSQL.2&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,153)"&gt;C:\Program Files\Microsoft SQL Server\MSSQL.3 etc..&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The following should be self explanatory.&lt;br /&gt;The xp_regread is a stored procedure is a undocumented procedure in MS SQL 2005 that reads the system registry and tells you which instance number maps to which instance.&lt;br /&gt;&lt;p&gt;&lt;span style="FONT-STYLE: italic; COLOR: rgb(255,0,0)"&gt;EXEC master.sys.xp_regread 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL', 'MSSQLSERVER'&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="FONT-STYLE: italic; COLOR: rgb(255,0,0)"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="FONT-STYLE: italic; COLOR: rgb(255,0,0)"&gt;EXEC master.sys.xp_regread 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL', 'SQLEXPRESS'&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Bibliography&lt;br /&gt;Tara Kizer, &lt;a href="http://weblogs.sqlteam.com/tarad/archive/2006/06/07/10114.aspx"&gt;SQL Server 2005 instance number&lt;/a&gt;, accessed 14 Feb 2008&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-5601573141507870561?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/5601573141507870561/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=5601573141507870561' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/5601573141507870561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/5601573141507870561'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/02/mssql1-mssql2-mssql3.html' title='MSSQL.1, MSSQL.2, MSSQL.3 ...'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-7008054940890445942</id><published>2008-01-14T10:53:00.000+08:00</published><updated>2008-01-24T14:28:00.453+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Objectives'/><title type='text'>My Objectives for 2008</title><content type='html'>It has been a busy 2007 year for me. I should set some objectives for the year 2008. I shall add on to the list when I think of more.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Complete my exams and get certified for MCTS: .NET Framework 2.0 Web Applications&lt;/li&gt;&lt;li&gt;Develop at least one .Net application using current technologies. (Silverlight, Ajax, .Net 3.5 etc.)&lt;/li&gt;&lt;li&gt;Learn and blog about Visual Studio 2008, .Net 3.5, LINQ etc.&lt;/li&gt;&lt;li&gt;Complete at least 3 e-learning courses that are soft skills related. (Project management, Communication skills etc.)&lt;/li&gt;&lt;li&gt;Improve on presentation and persuasion skills.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-7008054940890445942?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/7008054940890445942/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=7008054940890445942' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/7008054940890445942'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/7008054940890445942'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/01/my-objectives-for-2008.html' title='My Objectives for 2008'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-2183974020825613993</id><published>2008-01-11T14:46:00.000+08:00</published><updated>2008-01-11T14:53:43.060+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SgDotNet'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft SharePoint'/><title type='text'>Blue Ocean Strategy</title><content type='html'>Alan Andrew Dias spoke about the Blue Ocean Strategy in the SgDotNet - Jan 2008 UG Meeting.&lt;br /&gt;&lt;br /&gt;I wonder how it applies to our daily work? How does Microsoft SharePoint relate to Blue Ocean Strategy?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;blockquote&gt;Blue Ocean Strategy is a business strategy book that promotes a systematic approach "for making the competition irrelevant."&lt;/blockquote&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Bibliography&lt;br /&gt;Wikipedia, &lt;a href="http://en.wikipedia.org/wiki/Blue_Ocean_Strategy"&gt;Blue Ocean Strategy&lt;/a&gt;, accessed 11 Jan 2008&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-2183974020825613993?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/2183974020825613993/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=2183974020825613993' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/2183974020825613993'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/2183974020825613993'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/01/blue-ocean-strategy.html' title='Blue Ocean Strategy'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-6555540339887101106</id><published>2008-01-10T09:15:00.001+08:00</published><updated>2009-06-27T12:42:35.949+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SgDotNet'/><title type='text'>SgDotNet - Jan 2008 UG Meeting</title><content type='html'>I will be attending this meeting. Maung Maung is a good and knowledgeable speaker. Please register at SgDotNet's website if you are interested.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p style="FONT-STYLE: italic"&gt;Our next UG Meeting is held on &lt;strong&gt;10th January 2008&lt;/strong&gt;, Microsoft Singapore, NTUC Building, &lt;strong&gt;Level 22CF-12&lt;/strong&gt; from 1845 hrs – 2115 hrs&lt;/p&gt;&lt;p style="FONT-STYLE: italic"&gt;&lt;strong&gt;Betting and Winning on Windows Developer Technology and Tools for the year 2008&lt;br /&gt;&lt;/strong&gt;&lt;em&gt;Alan Andrew Dias, Solution Specialist, Microsoft Singapore&lt;br /&gt;1900 hrs – 2000 hrs&lt;/em&gt;&lt;br /&gt;There are many Microsoft Tools and Technologies emerging in year 2008 and every developer needs to make a decision on which Technology and Tools he should focus. Being able to select a winning Technology and Developer Tools will make ones time and effort worthwhile both professionally and financially. This session will provide inputs on selecting the right Microsoft tools and technology to create a differentiator. Technologies and Tools that will be covered include Microsoft Office SharePoint Server and Microsoft MSCRM, Visual Studio.NET , Compact Framework, SharePoint Designer 2007, InfoPath 2007.&lt;/p&gt;&lt;p style="FONT-STYLE: italic"&gt;&lt;strong&gt;NET Framework 3.5 Language Enhancements&lt;br /&gt;&lt;/strong&gt;&lt;em&gt;Maung Maung, MVP (Security), NCS&lt;br /&gt;2015 hrs – 2115 hrs&lt;br /&gt;&lt;/em&gt;This session focuses on the new and enhanced features of .NET Framework 3.5 languages as well as the compiler. Join us to learn about type inference, extension methods, lambdas expression and understand how these enhancements help writing more intuitive and efficient code. We will also briefly covered LINQ and how it simplifies the data access implementation.&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Website link: &lt;a href="http://sgdotnet.org/forums/thread/179267.aspx"&gt;SgDotNet&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-6555540339887101106?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/6555540339887101106/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=6555540339887101106' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/6555540339887101106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/6555540339887101106'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/01/sgdotnet-jan-2008-ug-meeting.html' title='SgDotNet - Jan 2008 UG Meeting'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-6628558652884177000</id><published>2008-01-02T13:40:00.001+08:00</published><updated>2008-05-21T09:10:53.931+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Execution of user code in the .NET Framework is disabled</title><content type='html'>&lt;span style="color: rgb(255, 0, 0); font-style: italic;"&gt;&lt;blockquote&gt;Execution of user code in the .NET Framework is disabled. Use sp_configure 'clr enabled' to enable execution of user code in the .NET Framework.&lt;/blockquote&gt;&lt;/span&gt;If you ever hit the above error, try executing the SQL:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 51, 0);"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="color: rgb(153, 51, 0);"&gt;sp_configure&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;'clr enabled'&lt;/span&gt;, 1&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;You will get the result "&lt;span style="font-style: italic;"&gt;Configuration option 'clr enabled' changed from 0 to 1. Run the RECONFIGURE statement to install.&lt;/span&gt;"&lt;br /&gt;&lt;br /&gt;Next, execute the below:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;RECONFIGURE WITH&lt;/span&gt; override&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-6628558652884177000?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/6628558652884177000/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=6628558652884177000' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/6628558652884177000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/6628558652884177000'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2008/01/execution-of-user-code-in-net-framework.html' title='Execution of user code in the .NET Framework is disabled'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-720507054718412445</id><published>2007-12-27T23:01:00.002+08:00</published><updated>2008-12-10T08:53:25.657+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2008'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net 3.5'/><title type='text'>Visual C# 2008 Keybinding Reference Poster</title><content type='html'>A very useful poster from Microsoft.&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-style: italic;"&gt;Visual C# in Visual Studio 2008 and Visual C# 2008 Express Edition&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Wall chart showing useful keyboard shortcuts for Visual C# programming language&lt;/span&gt;&lt;/blockquote&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_m-Hwz-TGvms/R3O_Ntd44wI/AAAAAAAAA5o/XtoB3Wtfy4M/s1600-h/Visual.C.Sharp.2008.Poster.PNG"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_m-Hwz-TGvms/R3O_Ntd44wI/AAAAAAAAA5o/XtoB3Wtfy4M/s320/Visual.C.Sharp.2008.Poster.PNG" alt="" id="BLOGGER_PHOTO_ID_5148669041278771970" border="0" /&gt;&lt;/a&gt;&lt;p&gt;Download Link: &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=E5F902A8-5BB5-4CC6-907E-472809749973&amp;amp;displaylang=en"&gt;Visual C# 2008 Keybinding Reference Poster&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-720507054718412445?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/720507054718412445/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=720507054718412445' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/720507054718412445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/720507054718412445'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2007/12/visual-c-2008-keybinding-reference.html' title='Visual C# 2008 Keybinding Reference Poster'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_m-Hwz-TGvms/R3O_Ntd44wI/AAAAAAAAA5o/XtoB3Wtfy4M/s72-c/Visual.C.Sharp.2008.Poster.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-805736446719658081</id><published>2007-12-27T10:04:00.000+08:00</published><updated>2007-12-27T10:22:10.014+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web browsers'/><category scheme='http://www.blogger.com/atom/ns#' term='Web design'/><title type='text'>Test your web design in different browsers</title><content type='html'>The common web browsers used today are Internet Explorer, Firefox and Safari. However, it is important to ensure current web design are not distorted in different or older versions of web browsers.&lt;br /&gt;&lt;br /&gt;Have you ever wonder how your web design looks like in different web browsers? Try the below.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;What is Browsershots?&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Browsershots makes screenshots of your web design in different browsers. It is a free open-source online service created by Johann C. Rocholl. When you submit your web address, it will be added to the job queue. A number of distributed computers will open your website in their browser. Then they will make screenshots and upload them to the central server here.&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Link: &lt;a href="http://browsershots.org/"&gt;http://browsershots.org/&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-805736446719658081?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/805736446719658081/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=805736446719658081' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/805736446719658081'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/805736446719658081'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2007/12/test-your-web-design-in-different.html' title='Test your web design in different browsers'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-176014397522824388</id><published>2007-12-26T10:28:00.001+08:00</published><updated>2008-05-21T09:15:26.003+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2008'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net 3.5'/><title type='text'>Visual Studio 2008</title><content type='html'>Amanda Silver has blogged about some great new features in Visual Studio 2008. Most of her examples are pertaining to Visual Basic but it should apply to C Sharp as well.&lt;br /&gt;&lt;br /&gt;I have not got my copy of Visual Studio 2008 yet but will try it out once I grab my hands on it!&lt;br /&gt;&lt;br /&gt;Here list of the great features introduced on her blog&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Multi-targeting&lt;/li&gt;&lt;li&gt;Type Inference&lt;/li&gt;&lt;li&gt;If Operator&lt;/li&gt;&lt;li&gt;Object Initializers&lt;/li&gt;&lt;li&gt;Nullable&lt;/li&gt;&lt;li&gt;LINQ to Dataset&lt;/li&gt;&lt;li&gt;Syntax Tooltips&lt;/li&gt;&lt;li&gt;XML Namespace support in Intellisense&lt;/li&gt;&lt;li&gt;Goto Type Defnition&lt;/li&gt;&lt;li&gt;Type inference for loop variables&lt;/li&gt;&lt;li&gt;Performance improvements and… Non-blocking operations!&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Please access Amanda Silver's article below. Highly recommended reading!&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Bibliography&lt;br /&gt;Amanda Silver, &lt;a href="http://blogs.msdn.com/vbteam/archive/2007/11/20/hidden-gems-in-visual-basic-2008-amanda-silver.aspx"&gt;Hidden Gems in Visual Basic 2008&lt;/a&gt;, accessed 26 Dec 2007&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-176014397522824388?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/176014397522824388/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=176014397522824388' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/176014397522824388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/176014397522824388'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2007/12/visual-studio-2008.html' title='Visual Studio 2008'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-7278016473681776622</id><published>2007-12-24T11:20:00.002+08:00</published><updated>2009-06-11T09:29:29.344+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FarPoint'/><title type='text'>Cannot access a disposed object</title><content type='html'>I managed to fix the below exception when using the FarPoint Win Spread control.&lt;br /&gt;&lt;br /&gt;&lt;blockquote style="font-style: italic;"&gt;Cannot access a disposed object 'Spread'&lt;/blockquote&gt;The fix is simple. We use a binding source instead of assigning the list of business objects to the Spread datasource directly. Then, we assign the datasource of the spread to the binding source.&lt;br /&gt;&lt;br /&gt;There are several advantages of using a binding source. Here is two&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Simplifies binding on a form to data by providing currency management, change notification, and other services between Windows Forms controls and data sources.&lt;/li&gt;&lt;li&gt;The binding source acts as a strongly-typed list.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Bibliography&lt;br /&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/system.windows.forms.bindingsource.aspx"&gt;MSDN BindingSource Class&lt;/a&gt;, accessed 24 Dec 2007&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-7278016473681776622?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/7278016473681776622/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=7278016473681776622' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/7278016473681776622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/7278016473681776622'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2007/12/cannot-access-disposed-object.html' title='Cannot access a disposed object'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-6402044232061688250</id><published>2007-12-24T09:59:00.000+08:00</published><updated>2007-12-24T10:05:24.359+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Jobs'/><title type='text'>Developer Evangelist (Contract)</title><content type='html'>It really sounds cool to be a developer evangelist at Microsoft. Below is a job vacancy posting I found at Microsoft Asia Pacific website.&lt;br /&gt;&lt;br /&gt;&lt;blockquote style="font-style: italic;"&gt;This position is a technical role with the mission of creating buzz and enablement in the digital media/Web 2.0 space.&lt;br /&gt;&lt;br /&gt;Digital Media Technologies&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Learn and maintain in-depth knowledge of Visual Studio, the .NET Framework and other Microsoft Developer Tools.&lt;/li&gt;&lt;li&gt;Learn and maintain in-depth knowledge of WPF, Silverlight and the Windows Live APIs,  and Microsoft Expression suite of products.&lt;/li&gt;&lt;li&gt;Broad understanding of MS products (level 100), technologies, and solution as well as how they integrate.&lt;/li&gt;&lt;li&gt;Maintain knowledge of competitive products.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Audiences&lt;br /&gt;&lt;ul&gt;&lt;li&gt;This position will focus on 3 main audiences: start-ups and independent software vendor (ISV) partners, enterprises, and students (next generation developers and potential start-ups).&lt;/li&gt;&lt;li&gt;Within these audiences, this role will be responsible for creating excitement and technical enable.  Some of these evangelism efforts can be done directly or indirectly by leveraging influencers such as the Microsoft Student Partners.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Microsoft Innovation Center&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The Microsoft Innovation Center (MIC) is used as a vehicle for this role’s mission of 1) creating buzz and 2) technical enablement.  It also represents a central venue for one or more of the above audiences to collaborate.&lt;/li&gt;&lt;li&gt;The MIC will primarily be used for 1) briefings (awareness), 2) hands-on-labs (enablement), and 3) proof-of-concepts (POCs/showcases).  These will be with respect to the above technologies and audiences.&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-6402044232061688250?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/6402044232061688250/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=6402044232061688250' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/6402044232061688250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/6402044232061688250'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2007/12/developer-evangelist-contract.html' title='Developer Evangelist (Contract)'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-532259007712824689</id><published>2007-12-22T21:34:00.000+08:00</published><updated>2007-12-26T10:43:57.933+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Astoria'/><category scheme='http://www.blogger.com/atom/ns#' term='ADO.Net'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net 3.5'/><title type='text'>Security in ADO.NET Data Services</title><content type='html'>In my previous post, I questioned about how Astoria is going to handle the security since data is exposed over the HTTP interface. The current issue of Architecture Journal (Journal 13: Software + Services) clarifies my doubt about security.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;em&gt;Astoria looks into the ASP.NET API to find out whether a user is authenticated and to find out further details, so that an application that uses any authentication scheme properly integrated with ASP.NET will automatically work with Astoria.&lt;/em&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;We have to implement proper authentication and authorization to ensure the right data is being exposed to the right users. The current release (May 2007 CTP) of Astoria has over simplistic security implementation, where authentication policies are set at the resource level (/Customers, for example).&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Bibliography&lt;br /&gt;&lt;a href="http://msdn2.microsoft.com/en-us/arcjournal/bb906063.aspx"&gt;Journal 13: Software + Services&lt;/a&gt;, accessed 22 Dec 2007&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-532259007712824689?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/532259007712824689/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=532259007712824689' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/532259007712824689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/532259007712824689'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2007/12/security-in-adonet-data-services.html' title='Security in ADO.NET Data Services'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-4682926655960917059</id><published>2007-12-19T10:54:00.000+08:00</published><updated>2007-12-26T10:43:40.997+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Astoria'/><category scheme='http://www.blogger.com/atom/ns#' term='ADO.Net'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net 3.5'/><title type='text'>ADO.NET Data Services</title><content type='html'>&lt;p&gt;I will like to give a brief summary on a new technology introduced on MSDN Tech Talk Day (12 Dec 2007). It is known as ADO.Net Data Services which was also known as project codename "Astoria".&lt;br /&gt;&lt;br /&gt;ADO.Net Data Services consists of a combination of patterns and libraries that allows us to create data services that exposes pieces of data over the web over HTTP. The data services can be consumed by AJAX enabled web applications, Silverlight enabled web pages and desktop applications etc. These pieces of data are identified by URIs.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;A simple illustration of URI in ADO.Net Data Services&lt;/u&gt;&lt;br /&gt;For example, we have a Customer entity table in SQL. There are many customer records in the Customer table.&lt;br /&gt;&lt;br /&gt;The following URI represents all the Customer entities&lt;br /&gt;http://myserver/data.svc/Customers&lt;br /&gt;&lt;br /&gt;The following URI point to a single Customer entity using the key 'ALFKI'&lt;br /&gt;http://myserver/data.svc/Customers(’ALFKI’)&lt;br /&gt;&lt;br /&gt;Something to think about. As data is exposed over the web, what about security?&lt;br /&gt;&lt;br /&gt;Bibliography&lt;br /&gt;&lt;a href="http://astoria.mslivelabs.com/Default.aspx"&gt;http://astoria.mslivelabs.com/Default.aspx&lt;/a&gt;, accessed 19 Dec 2007&lt;br /&gt;&lt;a href="http://blogs.msdn.com/astoriateam/default.aspx"&gt;http://blogs.msdn.com/astoriateam/default.aspx&lt;/a&gt;, accessed 19 Dec 2007&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-4682926655960917059?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/4682926655960917059/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=4682926655960917059' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/4682926655960917059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/4682926655960917059'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2007/12/adonet-data-services.html' title='ADO.NET Data Services'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-1999506392387569022</id><published>2007-12-19T09:50:00.001+08:00</published><updated>2007-12-19T09:55:54.298+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Graphic'/><title type='text'>Paint.Net</title><content type='html'>An excellent graphic editing tool developed using .net&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;em&gt;&lt;strong&gt;Paint.NET&lt;/strong&gt; is free image and photo editing software for computers that run Windows. It features an intuitive and innovative user interface with support for layers, unlimited undo, special effects, and a wide variety of useful and powerful tools. An active and growing online community provides friendly help, tutorials, and plugins.&lt;/em&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Download link: &lt;a href="http://www.getpaint.net/index.html"&gt;Paint.Net&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-1999506392387569022?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/1999506392387569022/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=1999506392387569022' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/1999506392387569022'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/1999506392387569022'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2007/12/paintnet.html' title='Paint.Net'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-5493303566014630281</id><published>2007-12-19T09:37:00.000+08:00</published><updated>2007-12-19T09:44:38.379+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Regular expression'/><title type='text'>Rad Software Regular Expression Designer</title><content type='html'>This is a great tool for testing regular expressions.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;strong&gt;Rad Software Regular Expression Designer&lt;/strong&gt; is a free download that helps programmers learn, develop and test Regular Expressions. It is an interactive Windows application that is designed to be simple and easy to use.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Download link: &lt;a href="http://www.radsoftware.com.au/regexdesigner/"&gt;Rad Software Regular Expression Designer&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-5493303566014630281?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/5493303566014630281/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=5493303566014630281' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/5493303566014630281'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/5493303566014630281'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2007/12/rad-software-regular-expression.html' title='Rad Software Regular Expression Designer'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6424150166237404359.post-4745813879648583714</id><published>2007-12-19T09:13:00.001+08:00</published><updated>2008-05-21T09:16:50.692+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='LINQ'/><title type='text'>LINQPad</title><content type='html'>At the MSDN Tech Talk Day (12 Dec 2007), one of the speakers introduced this great software that allows us to query SQL databases in LINQ.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Tired of querying in antiquated SQL?&lt;/strong&gt;&lt;br /&gt;Well, you don't have to! LINQPad lets you interactively query SQL databases in a modern query language: LINQ. Kiss goodbye to SQL Management Studio!&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Download link: &lt;a href="http://www.linqpad.net/"&gt;LINQPad&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6424150166237404359-4745813879648583714?l=hancheng-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hancheng-tech.blogspot.com/feeds/4745813879648583714/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6424150166237404359&amp;postID=4745813879648583714' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/4745813879648583714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6424150166237404359/posts/default/4745813879648583714'/><link rel='alternate' type='text/html' href='http://hancheng-tech.blogspot.com/2007/12/linqpad.html' title='LINQPad'/><author><name>hc</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_m-Hwz-TGvms/SK5LdjIw6-I/AAAAAAAAB2I/lRMD5ryVG9M/S220/hancheng_100.jpg'/></author><thr:total>0</thr:total></entry></feed>
