<?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'><id>tag:blogger.com,1999:blog-1638497029260968563</id><updated>2010-02-24T15:50:54.670+03:30</updated><title type='text'>Jamal's Professional Blog</title><subtitle type='html'>My professional software engineering and development blog.</subtitle><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1638497029260968563/posts/default'/><link rel='alternate' type='text/html' href='http://blog.mavadat.net/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.mavadat.net/atom.xml'/><author><name>Jamal Mavadat</name><uri>http://www.blogger.com/profile/16234548896627503751</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>15</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1638497029260968563.post-8530341420966090770</id><published>2008-10-19T09:11:00.001+03:30</published><updated>2008-10-19T09:19:50.847+03:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='team leadership'/><category scheme='http://www.blogger.com/atom/ns#' term='developer'/><title type='text'>Senior Developers are in Mars</title><content type='html'>&lt;p&gt;Last week one of my technical consultation clients (development of network security applications for ISP's and ...) asked if I know someone with great experience in Microsoft .NET with strong VC++ background, and team leadership as well; someone who's willing to manage the mixed C++/.NET development environment.&lt;/p&gt;  &lt;p&gt;Well, it did deserve a blog post as it's now 3 different clients who I know are looking for a &lt;em&gt;Senior Developer&lt;/em&gt; to manage their development team! And like a recruiter, I've tried finding and recommending someone for the positions, someone preferably from my own professional network with a history (just to be able to give detailed comments), but you know what?! nothing happened and things are just getting worse and worse! I might soon admit experienced senior developers with strong leadership attitude are no longer available; perhaps &lt;em&gt;they're all in Mars&lt;/em&gt; now!!!&lt;/p&gt;  &lt;p&gt;If you know someone for the positions, please drop me a short line at &lt;a href="mailto:jamal@mavadat.net"&gt;jamal@mavadat.net&lt;/a&gt; (jamal &lt;em&gt;[at]&lt;/em&gt; mavadat &lt;em&gt;[dot]&lt;/em&gt; net)&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:9feb5e8a-1d99-4761-adf2-fd83e17a720e" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/developer" rel="tag"&gt;developer&lt;/a&gt;,&lt;a href="http://technorati.com/tags/team%20leadership" rel="tag"&gt;team leadership&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1638497029260968563-8530341420966090770?l=blog.mavadat.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1638497029260968563/8530341420966090770/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1638497029260968563&amp;postID=8530341420966090770' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1638497029260968563/posts/default/8530341420966090770'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1638497029260968563/posts/default/8530341420966090770'/><link rel='alternate' type='text/html' href='http://blog.mavadat.net/2008/10/senior-developers-are-in-mars.html' title='Senior Developers are in Mars'/><author><name>Jamal Mavadat</name><uri>http://www.blogger.com/profile/16234548896627503751</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09269299581615640428'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1638497029260968563.post-4491273034131493555</id><published>2008-09-30T08:59:00.001+03:30</published><updated>2008-09-30T09:01:33.532+03:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET 4.0'/><category scheme='http://www.blogger.com/atom/ns#' term='VS2010'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Visual Studio 2010 and MS .NET Framework 4.0</title><content type='html'>&lt;p&gt;Yesterday, Microsoft Redmond unveiled the next version of Visual Studio and .NET Framework:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a title="http://www.microsoft.com/presspass/press/2008/sep08/09-29VS10PR.mspx" href="http://www.microsoft.com/presspass/press/2008/sep08/09-29VS10PR.mspx"&gt;http://www.microsoft.com/presspass/press/2008/sep08/09-29VS10PR.mspx&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a title="http://msdn.microsoft.com/en-us/vstudio/products/cc948977.aspx" href="http://msdn.microsoft.com/en-us/vstudio/products/cc948977.aspx"&gt;http://msdn.microsoft.com/en-us/vstudio/products/cc948977.aspx&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Within last 4 years MS had been so fast on releasing development related stuff! I've seen lots of IT guys arguing this and the way MS is maturing it's framework so fast! Seriously, what do you think?&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:f2ce5814-e2cc-461e-9b15-1c2eac878df5" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Microsoft" rel="tag"&gt;Microsoft&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Visual%20Studio" rel="tag"&gt;Visual Studio&lt;/a&gt;,&lt;a href="http://technorati.com/tags/.NET%20Framework" rel="tag"&gt;.NET Framework&lt;/a&gt;,&lt;a href="http://technorati.com/tags/VS2010" rel="tag"&gt;VS2010&lt;/a&gt;,&lt;a href="http://technorati.com/tags/.NET%204.0" rel="tag"&gt;.NET 4.0&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1638497029260968563-4491273034131493555?l=blog.mavadat.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1638497029260968563/4491273034131493555/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1638497029260968563&amp;postID=4491273034131493555' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1638497029260968563/posts/default/4491273034131493555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1638497029260968563/posts/default/4491273034131493555'/><link rel='alternate' type='text/html' href='http://blog.mavadat.net/2008/09/visual-studio-2010-and-ms-net-framework.html' title='Visual Studio 2010 and MS .NET Framework 4.0'/><author><name>Jamal Mavadat</name><uri>http://www.blogger.com/profile/16234548896627503751</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09269299581615640428'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1638497029260968563.post-4336629805826004475</id><published>2008-09-25T16:49:00.002+03:30</published><updated>2008-09-25T17:11:47.424+03:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Data Warehouse'/><category scheme='http://www.blogger.com/atom/ns#' term='Server'/><category scheme='http://www.blogger.com/atom/ns#' term='Hardware'/><category scheme='http://www.blogger.com/atom/ns#' term='HP'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><title type='text'>Oracle's Data Warehouse Server</title><content type='html'>&lt;p&gt;Although this isn't Oracle's first attempt to enter hardware market, this time it is supposed to be bigger and a bit innovative. Oracle software plus HP hardware, tested by Google. Read more:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a title="http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;amp;articleId=9115499&amp;amp;source=rss_news" href="http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;amp;articleId=9115499&amp;amp;source=rss_news"&gt;http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;amp;articleId=9115499&amp;amp;source=rss_news&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="http://www.zdnet.com.au/news/hardware/soa/Oracle-unveils-first-hardware-product/0,130061702,339292229,00.htm?ocid=nl_TNB_25092008_fea_l9" href="http://www.zdnet.com.au/news/hardware/soa/Oracle-unveils-first-hardware-product/0,130061702,339292229,00.htm?ocid=nl_TNB_25092008_fea_l9"&gt;http://www.zdnet.com.au/news/hardware/soa/Oracle-unveils-first-hardware-product/0,130061702,339292229,00.htm?ocid=nl_TNB_25092008_fea_l9&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="http://news.cnet.com/8301-10787_3-10050470-60.html" href="http://news.cnet.com/8301-10787_3-10050470-60.html"&gt;http://news.cnet.com/8301-10787_3-10050470-60.html&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:049f0ef8-68f9-4173-beeb-58d72ddf00a9" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Oracle" rel="tag"&gt;Oracle&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Google" rel="tag"&gt;Google&lt;/a&gt;,&lt;a href="http://technorati.com/tags/HP" rel="tag"&gt;HP&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Hardware" rel="tag"&gt;Hardware&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Data%20Warehouse" rel="tag"&gt;Data Warehouse&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Server" rel="tag"&gt;Server&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1638497029260968563-4336629805826004475?l=blog.mavadat.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1638497029260968563/4336629805826004475/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1638497029260968563&amp;postID=4336629805826004475' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1638497029260968563/posts/default/4336629805826004475'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1638497029260968563/posts/default/4336629805826004475'/><link rel='alternate' type='text/html' href='http://blog.mavadat.net/2008/09/oracle-data-warehouse-server.html' title='Oracle&amp;#39;s Data Warehouse Server'/><author><name>Jamal Mavadat</name><uri>http://www.blogger.com/profile/16234548896627503751</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09269299581615640428'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1638497029260968563.post-1676483164543728320</id><published>2008-08-22T10:33:00.002+04:30</published><updated>2008-08-22T11:41:25.389+04:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Entity Framework'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Entity Framework 3rd Party Providers</title><content type='html'>&lt;p&gt;You may have already noticed 11 days back Entity Framework matured out of beta. Luckily, I've already got projects running EF and will be definitely blogging around some best practices and issues later time. But for now, I'm just sharing the following list of soon-to-be 3rd party providers for EF:&lt;/p&gt;  &lt;p&gt;Providers Planning Publicly Available Versions in 2008 (Q3 &amp;amp; Q4 CY2008):&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;b&gt;Devart &lt;/b&gt;(formerly Core Lab) - Providing connectivity to Oracle, MySQL, PostgreSQL and SQLite databases &lt;/li&gt;    &lt;li&gt;&lt;b&gt;Firebird &lt;/b&gt;- Providing connectivity to Firebird databases &lt;/li&gt;    &lt;li&gt;&lt;b&gt;IBM &lt;/b&gt;- Providing connectivity to both IBM DB2 data server and Informix Dynamic Server (IDS) database &lt;/li&gt;    &lt;li&gt;&lt;b&gt;Npgsql &lt;/b&gt;- Providing connectivity to PostgreSQL database versions 7.3+ and 8.x &lt;/li&gt;    &lt;li&gt;&lt;b&gt;OpenLink Software&lt;/b&gt; - Providing connectivity to OpenLink Virtuoso, Oracle, Informix, Ingres, Sybase, MySQL, PostgreSQL, DB2, Progress and Microsoft SQL Server databases, and any data source accessible via OpenLink ODBC or JDBC bridge drivers &lt;/li&gt;    &lt;li&gt;&lt;b&gt;Phoenix Software Solutions&lt;/b&gt; - Providing connectivity to SQLite databases &lt;/li&gt;    &lt;li&gt;&lt;b&gt;Sun Microsystems&lt;/b&gt; - Providing connectivity to MySQL databases &lt;/li&gt;    &lt;li&gt;&lt;b&gt;Sybase &lt;/b&gt;- Providing connectivity to SQL Anywhere databases &lt;/li&gt;    &lt;li&gt;&lt;b&gt;VistaDB Software&lt;/b&gt; - Providing connectivity to VistaDB database &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Providers Planning Publicly Available Versions in Early 2009 (Q1 CY2009):&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;b&gt;Synergex&lt;/b&gt; - Providing connectivity to Synergy/DE databases &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Providers Committed to Supporting the Entity Framework:&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;b&gt;DataDirect Technologies&lt;/b&gt; - Providing connectivity to multiple data stores including Oracle, Sybase, Microsoft SQL Server and DB2 via DataDirect Connect&amp;#174; for ADO.NET &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a title="Third Party Provider Support for the Entity Framework RTM" href="http://blogs.msdn.com/adonet/archive/2008/08/11/third-party-provider-support-for-the-entity-framework-rtm.aspx"&gt;Third Party Provider Support for the Entity Framework RTM&lt;/a&gt;&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:b104d707-7b13-4e11-b4a2-038289bc7578" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Entity%20Framework" rel="tag"&gt;Entity Framework&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1638497029260968563-1676483164543728320?l=blog.mavadat.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1638497029260968563/1676483164543728320/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1638497029260968563&amp;postID=1676483164543728320' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1638497029260968563/posts/default/1676483164543728320'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1638497029260968563/posts/default/1676483164543728320'/><link rel='alternate' type='text/html' href='http://blog.mavadat.net/2008/08/entity-framework-3rd-party-providers.html' title='Entity Framework 3rd Party Providers'/><author><name>Jamal Mavadat</name><uri>http://www.blogger.com/profile/16234548896627503751</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09269299581615640428'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1638497029260968563.post-2083851474726062155</id><published>2008-06-27T20:00:00.003+04:30</published><updated>2009-12-27T21:57:42.755+03:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='C-Sharp'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><category scheme='http://www.blogger.com/atom/ns#' term='CLR'/><title type='text'>String.Empty vs. ""</title><content type='html'>Throughout my MS.NET years I was occasionally asked about differences between C# &lt;span style="color: #2b91af;"&gt;String&lt;/span&gt;.Empty and the empty string literal (&lt;span style="color: #a31515;"&gt;&lt;nobr&gt;""&lt;/nobr&gt;&lt;/span&gt;). And also when implementing C# and .NET coding-style documents this has always been challenging since everybody has his own opinion, experience, and taste.&lt;br /&gt;A) &lt;span style="color: blue; font-family: 'Courier New'; font-size: 10pt;"&gt;string&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: 10pt;"&gt; s1 = &lt;span style="color: #2b91af;"&gt;String&lt;/span&gt;.Empty;     &lt;br /&gt;&lt;/span&gt;B) &lt;span style="color: blue; font-family: 'Courier New'; font-size: 10pt;"&gt;string&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: 10pt;"&gt; s2 = &lt;span style="color: #a31515;"&gt;&lt;nobr&gt;""&lt;/nobr&gt;&lt;/span&gt;;&lt;/span&gt;   &lt;br /&gt;Here’s some advice which might come handy:&lt;br /&gt;&lt;b&gt;Performance      &lt;br /&gt;&lt;/b&gt;&lt;span style="color: #2b91af;"&gt;String&lt;/span&gt;.Empty is a static read-only public field which is initialised by the static constructor of the &lt;span style="color: #2b91af;"&gt;String &lt;/span&gt;class. Simplified MSIL code generated for statement &lt;i&gt;A&lt;/i&gt; is &lt;b&gt;&lt;u&gt;ldsfld String.Empty&lt;/u&gt;;&lt;/b&gt; this simply pushes the reference of a specific field (String.Empty in this case) into local stack of your executing method after invoking static constructor of the class if not previously executed – this is a 5 bytes instruction though. Note that &lt;span style="color: #2b91af;"&gt;String&lt;/span&gt;.Empty field actually assigns the empty literal (&lt;span style="color: #a31515;"&gt;&lt;nobr&gt;""&lt;/nobr&gt;&lt;/span&gt;) to a static field only once and during first access to the &lt;span style="color: #2b91af;"&gt;String &lt;/span&gt;class and this is no big deal; then the resulting reference to constant &lt;span style="color: #a31515;"&gt;&lt;nobr&gt;""&lt;/nobr&gt;&lt;/span&gt; value (from string pool - see below) will be reused for your application domain lifetime (your windows process whatever it is, your hosting environment whatever it is…)&lt;br /&gt;On the other hand, the C# statement &lt;i&gt;B&lt;/i&gt; results into &lt;b&gt;&lt;u&gt;ldstr ""&lt;/u&gt;&lt;/b&gt; MSIL statement; again a 5 bytes instruction. &lt;i&gt;ldstr&lt;/i&gt; pushes the supplied literal into AppDomain's internal string pool (CLR internal &lt;span style="color: #2b91af;"&gt;GlobalStringLiteralMap&lt;/span&gt; C++ class) if not previously loaded into the map. The reason is obvious: more efficient memory usage by sharing string literals in memory - a technique called &lt;i&gt;string interning&lt;/i&gt;.&lt;br /&gt;When comparing the two alternatives, statement &lt;i&gt;A&lt;/i&gt; is so straightforward in CLR implementation making it simple and fast, whilst statement &lt;i&gt;B&lt;/i&gt; goes through the overhead of checking the AppDomain's string pool (an internal hash-table) bringing very small performance penalty. BUT:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;A and B have JIT compile-time differences and JIT-Compiler will eventually generate nearly same results in either cases; this also implies there is absolutely no performance penalty when your assembly [not framework assemblies] is NGENed (using ngen.exe for example)&lt;/li&gt;&lt;li&gt;During JIT-compilation of your executing method there is this very small (nearly zero) performance penalty which is paid only once. In other words, worrying about performance differences between statement A and B is pointless.&lt;/li&gt;&lt;/ol&gt;&lt;b&gt;Coding Style      &lt;br /&gt;&lt;/b&gt;Well, whenever it comes to developing an effective coding-style document, I've realised we're not only talking about technology and it also involves aesthetics and human nature! I suppose we all do agree that increasing readability to at least reduce maintenance costs is a generally accepted coding-style design measure; this may hardly become a baseline for coding-style challenges.&lt;br /&gt;What I'll say here, is only my personal opinion and favourite syntax supported by 16+ years of extensive coding effort - yet it does not necessarily reflect community preference: the &lt;span style="color: #2b91af;"&gt;String&lt;/span&gt;.Empty syntax usually results into higher readability by adding distinctness compared to the &lt;span style="color: #a31515;"&gt;""&lt;/span&gt; syntax. I'll definitely go for the first one as I feel more comfortable when reviewing and skimming someone else’s code. The &lt;span style="color: #a31515;"&gt;&lt;nobr&gt;""&lt;/nobr&gt;&lt;/span&gt; syntax is not visually clear enough [needs more attention to see whether or not spaces are contained - could make eyes fatigued for very lengthy code]. Also, it is not clear with non-fixed-size fonts where the number of involved spaces matters [in very rare cases – like when using spaces for print or control alignments]. This is because these fonts usually have narrowed space characters not appropriate for extensive coding.&lt;br /&gt;&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:e50a24ac-3566-40ee-a7d5-2688114e0462" style="display: inline; margin: 0px; padding: 0px;"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/C#" rel="tag"&gt;C#&lt;/a&gt;,&lt;a href="http://technorati.com/tags/.NET" rel="tag"&gt;.NET&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Microsoft" rel="tag"&gt;Microsoft&lt;/a&gt;,&lt;a href="http://technorati.com/tags/CLR" rel="tag"&gt;CLR&lt;/a&gt;,&lt;a href="http://technorati.com/tags/String%20Interning" rel="tag"&gt;String Interning&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1638497029260968563-2083851474726062155?l=blog.mavadat.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1638497029260968563/2083851474726062155/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1638497029260968563&amp;postID=2083851474726062155' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1638497029260968563/posts/default/2083851474726062155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1638497029260968563/posts/default/2083851474726062155'/><link rel='alternate' type='text/html' href='http://blog.mavadat.net/2008/06/stringempty-vs.html' title='String.Empty vs. &amp;quot;&amp;quot;'/><author><name>Jamal Mavadat</name><uri>http://www.blogger.com/profile/16234548896627503751</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09269299581615640428'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1638497029260968563.post-3814690457615841215</id><published>2008-06-27T13:39:00.001+04:30</published><updated>2008-06-27T13:41:42.418+04:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Download'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>22 Million of Firefox 3 Downloads</title><content type='html'>&lt;p&gt;Download record for Mozilla Firefox 3 in the first 24 hours (Download Day) was 8.3 million. By the way, I just got curious what is the download record now few days after the launch date and the result was over 22,560,000 download requests: &lt;a title="http://www.spreadfirefox.com/en-US/worldrecord/" href="http://www.spreadfirefox.com/en-US/worldrecord/"&gt;http://www.spreadfirefox.com/en-US/worldrecord/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;And here's more detailed download statistics: &lt;a title="http://downloadcounter.sj.mozilla.com/" href="http://downloadcounter.sj.mozilla.com/"&gt;http://downloadcounter.sj.mozilla.com/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Have fun...&lt;/p&gt;  &lt;p&gt;   &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:3b9b6c4c-9d8e-41ea-8b94-f5a7fe766d9e" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Firefox" rel="tag"&gt;Firefox&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Download" rel="tag"&gt;Download&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1638497029260968563-3814690457615841215?l=blog.mavadat.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1638497029260968563/3814690457615841215/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1638497029260968563&amp;postID=3814690457615841215' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1638497029260968563/posts/default/3814690457615841215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1638497029260968563/posts/default/3814690457615841215'/><link rel='alternate' type='text/html' href='http://blog.mavadat.net/2008/06/22-million-of-firefox-3-downloads.html' title='22 Million of Firefox 3 Downloads'/><author><name>Jamal Mavadat</name><uri>http://www.blogger.com/profile/16234548896627503751</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09269299581615640428'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1638497029260968563.post-6502700793806633697</id><published>2008-06-08T20:23:00.001+04:30</published><updated>2008-06-09T08:28:22.114+04:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Velocity'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Cache'/><category scheme='http://www.blogger.com/atom/ns#' term='memcached'/><category scheme='http://www.blogger.com/atom/ns#' term='Distributed Cache'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Microsoft Distributed Cache - Velocity</title><content type='html'>&lt;p&gt;&amp;quot;Velocity&amp;quot; is a distributed in-memory caching platform for building scalable, high-performance enterprise and web data-driven applications. &lt;a href="http://blogs.msdn.com/velocity/archive/2008/06/02/introducing-project-codename-velocity.aspx" target="_blank"&gt;Read More...&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Microsoft's &amp;quot;Velocity&amp;quot; is very much similar to &lt;a href="http://www.danga.com/memcached/" target="_blank"&gt;memcached&lt;/a&gt; (pronounced &lt;em&gt;mem-kash-dee&lt;/em&gt;), but Microsoft's &amp;quot;Velocity&amp;quot; has nothing to do with &lt;a href="http://velocity.apache.org/" target="_blank"&gt;The Apache Velocity Project&lt;/a&gt; which is an open-source Java templating platform.&lt;/p&gt;  &lt;p&gt;I recommend all scalability, availability, and performance lovers give &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=B24C3708-EEFF-4055-A867-19B5851E7CD2&amp;amp;displaylang=en" target="_blank"&gt;Velocity CTP1&lt;/a&gt; a test drive.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1638497029260968563-6502700793806633697?l=blog.mavadat.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1638497029260968563/6502700793806633697/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1638497029260968563&amp;postID=6502700793806633697' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1638497029260968563/posts/default/6502700793806633697'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1638497029260968563/posts/default/6502700793806633697'/><link rel='alternate' type='text/html' href='http://blog.mavadat.net/2008/06/microsoft-distributed-cache-velocity.html' title='Microsoft Distributed Cache - Velocity'/><author><name>Jamal Mavadat</name><uri>http://www.blogger.com/profile/16234548896627503751</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09269299581615640428'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1638497029260968563.post-2301445488850445564</id><published>2008-06-05T14:30:00.002+04:30</published><updated>2008-06-05T14:38:23.787+04:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Vista'/><category scheme='http://www.blogger.com/atom/ns#' term='Environment'/><category scheme='http://www.blogger.com/atom/ns#' term='Green'/><category scheme='http://www.blogger.com/atom/ns#' term='Sleep'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Vista is Green</title><content type='html'>&lt;p&gt;Microsoft Windows Vista&amp;#8482; features a low-power &amp;quot;Sleep&amp;quot; mode whilst the computer is not in use. Sleep allows consumers saving energy as much as shutdown, yet interestingly fast in resume. Sleep is nearly a mixture of XP's Hibernate and Standby features. As in hibernation, it resumes from disk in case of power failure; otherwise, resumes from memory as in normal standby. Surprisingly, sleep performance is consistent enough by the mercy of new &lt;a href="http://www.microsoft.com/windows/products/windowsvista/features/details/superfetch.mspx" target="_blank"&gt;Microsoft Superfetch&amp;#8482;&lt;/a&gt; technology.&lt;/p&gt;  &lt;p&gt;Based on LBNL study on 2002, typical Intel Pentium 4 PC with 17&amp;quot; CRT display consumes 128.5 watts when idle but running. According to EPA, generating 1kw/h of electricity in the US results in 700g of CO2 emissions; therefore, using &amp;quot;Sleep&amp;quot; feature to save energy when not using PCs result in 760kw/h saving, eliminating 534kg of CO2 emissions annually which is equates to 10% of a private vehicle emissions.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Ten of these PCs left on when not in use results in the equivalent of one more car on the road in terms of greenhouse gas contribution annually.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Also based on ICG consulting calculations, 1 acre of forest sequesters 3326kg of CO2 emissions annually. So eliminating 534kg of this amount means 0.161 acres of trees not required.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font color="#333333"&gt;For every 6 PCs left on when not in use, an acre of trees is required to sequester the greenhouse gas that is released due to generating the power to leave them fully on while not in use.&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;For more information please refer to &lt;a title="VistaEnergyConserv.doc" href="http://download.microsoft.com/download/9/c/5/9c5b2167-8017-4bae-9fde-d599bac8184a/VistaEnergyConserv.doc" target="_blank"&gt;VistaEnergyConserv.doc&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/1638497029260968563-2301445488850445564?l=blog.mavadat.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1638497029260968563/2301445488850445564/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1638497029260968563&amp;postID=2301445488850445564' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1638497029260968563/posts/default/2301445488850445564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1638497029260968563/posts/default/2301445488850445564'/><link rel='alternate' type='text/html' href='http://blog.mavadat.net/2008/06/vista-is-green.html' title='Vista is Green'/><author><name>Jamal Mavadat</name><uri>http://www.blogger.com/profile/16234548896627503751</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09269299581615640428'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1638497029260968563.post-1496092213754470566</id><published>2008-05-30T12:15:00.001+04:30</published><updated>2008-05-30T12:23:43.179+04:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Video'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='REMIX08'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>DG.TV Jose Fajardo on DeepZoom Awesomeness</title><content type='html'>&lt;p&gt;Here's a fantastic Silverlight DeepZoom demo by Jose at REMIX08:&lt;/p&gt; &lt;iframe style="width: 436px; height: 400px" src="http://silverlight.services.live.com/invoke/35679/2008_05_28_jose_fajardo/iframe.html" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1638497029260968563-1496092213754470566?l=blog.mavadat.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1638497029260968563/1496092213754470566/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1638497029260968563&amp;postID=1496092213754470566' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1638497029260968563/posts/default/1496092213754470566'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1638497029260968563/posts/default/1496092213754470566'/><link rel='alternate' type='text/html' href='http://blog.mavadat.net/2008/05/dgtv-jose-fajardo-on-deepzoom.html' title='DG.TV Jose Fajardo on DeepZoom Awesomeness'/><author><name>Jamal Mavadat</name><uri>http://www.blogger.com/profile/16234548896627503751</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09269299581615640428'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1638497029260968563.post-155533255090669135</id><published>2008-05-29T22:33:00.003+04:30</published><updated>2008-05-30T11:44:08.940+04:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Conversion'/><category scheme='http://www.blogger.com/atom/ns#' term='C-Sharp'/><category scheme='http://www.blogger.com/atom/ns#' term='Covariance'/><category scheme='http://www.blogger.com/atom/ns#' term='Contravariance'/><category scheme='http://www.blogger.com/atom/ns#' term='CLR'/><title type='text'>C# Covariance and Contravariance</title><content type='html'>&lt;p&gt;&lt;strong&gt;Overview&lt;/strong&gt;     &lt;br /&gt;As object-oriented programmers we're all familiar with the concepts of covariance and contravariance, however not all programmers are comfortable with such industry-standard terms.&lt;/p&gt;  &lt;p&gt;Let's review what they stand for. Take a look at the following code fragment:&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; color: blue; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;class&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt; &lt;span style="color: #2b91af"&gt;Vehicle        &lt;br /&gt;&lt;/span&gt;{       &lt;br /&gt;}       &lt;br /&gt;&lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Car&lt;/span&gt; : &lt;span style="color: #2b91af"&gt;Vehicle&lt;/span&gt; &lt;span style="color: green"&gt;//a derived class        &lt;br /&gt;&lt;/span&gt;{       &lt;br /&gt;}       &lt;br /&gt;&lt;span style="color: blue"&gt;void&lt;/span&gt; StartEngine( &lt;span style="color: #2b91af"&gt;Vehicle&lt;/span&gt; v ); &lt;span style="color: green"&gt;//simple method&lt;/span&gt;&lt;span style="color: #2b91af"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Contravariance      &lt;br /&gt;&lt;/strong&gt;Sure you know we may be calling the method &lt;em&gt;StartEngine( ) &lt;/em&gt;by providing some instances of &lt;em&gt;Car &lt;/em&gt;class. Well, it does make sense as we expect compiler implicitly up-cast the &lt;em&gt;Car &lt;/em&gt;instances to &lt;em&gt;Vehicle &lt;/em&gt;and then invoking the &lt;em&gt;StartEngine( ) &lt;/em&gt;method. Yes, this very simple object-oriented technique is called &amp;quot;Contravariance&lt;strong&gt;.&amp;quot;&lt;/strong&gt; Contravariance is supported in almost all object-oriented programming languages. In C# 2.0, delegates support contravariance so that programmers see delegate invocations a bit more like normal method calls. Honestly, I think C# designers should had done this by the first version of the compiler, especially considering their implementation didn't require atypical CLR support.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Covariance&lt;/strong&gt;     &lt;br /&gt;And take a look at this method: &lt;u&gt;&lt;span style="font-size: 10pt; color: #2b91af; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes;="yes;" mso-fareast-font-family:="mso-fareast-font-family:" Calibri;="Calibri;" mso-fareast-theme-font:="mso-fareast-theme-font:" minor-latin;="minor-latin;" mso-ansi-language:="mso-ansi-language:" mso-fareast-language:="mso-fareast-language:" EN-US;="EN-US;" mso-bidi-language:="mso-bidi-language:" AR-SA?="AR-SA?"&gt;Vehicle&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes;="yes;" mso-fareast-font-family:="mso-fareast-font-family:" Calibri;="Calibri;" mso-fareast-theme-font:="mso-fareast-theme-font:" minor-latin;="minor-latin;" mso-ansi-language:="mso-ansi-language:" mso-fareast-language:="mso-fareast-language:" EN-US;="EN-US;" mso-bidi-language:="mso-bidi-language:" AR-SA?="AR-SA?"&gt; GetMostExpensive( );&lt;/span&gt; &lt;/u&gt;    &lt;br /&gt;It also does make sense for C# programmers to return an instance of &lt;em&gt;Car&lt;/em&gt; as the return value of this method. This is simply called &amp;quot;Covariance.&amp;quot; Covariance is supported in most OOP languages. In C# 2.0, covariance is supported by delegates in the same way we expect from normal method calls. Again, it could had been available by the first version of C# compiler.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Covariant Arrays      &lt;br /&gt;&lt;/strong&gt;The good news is that C# supports covariant arrays of reference-types. Here we go:&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size: 10pt; color: #2b91af; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;Car&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;[ ] cars = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Car&lt;/span&gt;[ 9 ]; &lt;span style="color: green"&gt;//an array of cars        &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #2b91af"&gt;Vehicle&lt;/span&gt;[ ] vehicles = cars; &lt;span style="color: green"&gt;//super-type array        &lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;object&lt;/span&gt;[ ] vehicleObjects = cars; &lt;span style="color: green"&gt;//object array!&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;Interesting point is that such type casting is 100% supported by CLR and therefore the resulting bits of compilation (.dll or .exe) do not include overheads. However, based on OOP constraints, the real instantiated type of the array is recognised by CLR and prevents adding an instance of non-expected type (&lt;em&gt;String&lt;/em&gt; class for instance) to the &lt;em&gt;vehicleObjects &lt;/em&gt;array - well, &lt;em&gt;vehicleObjects &lt;/em&gt;is a reference which refers to an instance of type &lt;em&gt;Car[ ]&lt;/em&gt;. Such attempts result into run-time errors.&lt;/p&gt;  &lt;p&gt;But consider how the following code fails during compilation:&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size: 10pt; color: blue; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;int&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;[ ] intArray = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: blue"&gt;int&lt;/span&gt;[ 9 ]; &lt;span style="color: green"&gt;//value-type array        &lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;object&lt;/span&gt;[ ] objectArray = intArray; &lt;span style="color: green"&gt;//ERROR!&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;Although CLR supports direct covariant array type casting of reference-types, it doesn't support such behaviour for array of value-types such as &lt;em&gt;int[ ]&lt;/em&gt; and &lt;em&gt;DateTime[ ]&lt;/em&gt;. Here, I agree with CLR designers who decided not to support such feature as it has conflicts with inline arrays where such simple array casts toggle unintended memory block relocations and new array creation. I personally believe performance and security issues MUST always be visible to developers minimising human mistakes. But the main reason would probably be such casts result into new references which kicks out the whole idea. Not to mention such casts of &lt;em&gt;int[ ] &lt;/em&gt;to &lt;em&gt;object[ ] &lt;/em&gt;need all members be &lt;strong&gt;boxed&lt;/strong&gt; to their equivalent object reference at first.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Other Covariant Collections      &lt;br /&gt;&lt;/strong&gt;Do you expect the following line of code compile?&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; color: #2b91af; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;List&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Car&lt;/span&gt;&amp;gt; cars = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Car&lt;/span&gt;&amp;gt;( ); &lt;span style="color: green"&gt;//list of cars        &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Vehicle&lt;/span&gt;&amp;gt; vehicles = cars; &lt;span style="color: green"&gt;//convert!&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;Nope, it doesn't compile! In fact, there are much differences between a simple array and an instance of &lt;em&gt;List&lt;/em&gt; class. Array is directly supported by CLR whilst &lt;em&gt;List&lt;/em&gt; is a custom class from CLR's point of view. There are hefty of custom collection classes available out there, and in this case, they all perform the same as .NET Framework's List class does.&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;Such collection classes (including List class) directly/indirectly rely on CLR's array type and usually contain instance(s) of this primitive array type. Do you really expect &lt;em&gt;List&amp;lt;Car&amp;gt;&lt;/em&gt; be implicitly cast to &lt;em&gt;List&amp;lt;Vehicle&amp;gt;&lt;/em&gt; as we did by primitive array in which no wrapper class was instantiated? If &amp;quot;yes&amp;quot;, How about &lt;em&gt;FileLogger&amp;lt;Car&amp;gt;&lt;/em&gt; and &lt;em&gt;FileLogger&amp;lt;Vehicle&amp;gt;&lt;/em&gt;, do you still like that cast happen? There are many scenarios where such casts are making you crazy. Simply &lt;em&gt;X&amp;lt;Car&amp;gt;&lt;/em&gt; is not of type &lt;em&gt;X&amp;lt;Vehicle&amp;gt; &lt;/em&gt;and hence should not be cast!&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;But still you may realise there are scenarios in which consumers should be able to cast &lt;em&gt;X&amp;lt;Car&amp;gt;&lt;/em&gt; to &lt;em&gt;X&amp;lt;Vehicle&amp;gt;&lt;/em&gt;. Well, they're not casts in fact. They're simple conversions through which object references are not maintained. Such functionality can easily be supported by adding appropriate methods including conversion operators. However, C# compiler doesn't allow using implicit/explicit operators simulating array conversion (another wise decision), and implementers are to add some normal methods, say &lt;em&gt;List&amp;lt;T&amp;gt;.ConvertTo&amp;lt;SuperType&amp;gt;( )&lt;/em&gt;.&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;Are you happy as implementers of framework's List class have already added &lt;em&gt;ConvertAll( ) &lt;/em&gt;generic method?! Hey, don't let it fool you as it's a conversion method helping you &amp;quot;convert&amp;quot; individual entries of the original list to some other type enclosed in a new generic list - it's not a cast-like conversion at all! Actually framework's List implementers haven't added such method, in the sake of complexity it involves for both implementer and consumer developers. As a class library design best practice, it's usually not a good idea having read-write collection wrapper classes for casting purposes! Take a look at code below:&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size: 10pt; color: #2b91af; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;Car&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;[ ] cars = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Car&lt;/span&gt;[ 9 ];       &lt;br /&gt;&lt;span style="color: #2b91af"&gt;Vehicle&lt;/span&gt;[ ] vehicles = cars; &lt;span style="color: green"&gt;//implicit cast        &lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;       &lt;br /&gt;if&lt;/span&gt;( cars == vehicles ) { } &lt;span style="color: green"&gt;//it's true        &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #2b91af"&gt;       &lt;br /&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Car&lt;/span&gt;&amp;gt; cars = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Car&lt;/span&gt;&amp;gt;( );       &lt;br /&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Vehicle&lt;/span&gt;&amp;gt; vehicles = cars.UpCast&amp;lt;&lt;span style="color: #2b91af"&gt;Vehicle&lt;/span&gt;&amp;gt;( );       &lt;br /&gt;&lt;span style="color: blue"&gt;       &lt;br /&gt;if&lt;/span&gt;( cars == vehicles ) { } &lt;span style="color: green"&gt;//it's FALSE!!!&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;As you see we've got a conversion (by internal wrapper classes) in which object references are not maintained, however internal primitive arrays are the same CLR objects:&lt;/p&gt; &lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Car&lt;/span&gt;&amp;gt; cars = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Car&lt;/span&gt;&amp;gt;( );   &lt;br /&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Vehicle&lt;/span&gt;&amp;gt; vehicles = cars.UpCast&amp;lt;&lt;span style="color: #2b91af"&gt;Vehicle&lt;/span&gt;&amp;gt;( );   &lt;br /&gt;&lt;span style="color: blue"&gt;   &lt;br /&gt;if&lt;/span&gt;( cars[ 2 ] == vehicles[ 2 ] ) { } &lt;span style="color: green"&gt;//it's true!!!&lt;/span&gt;   &lt;p&gt;Though, it seems a missing workaround for the casting problem, it was sound decision not to add such method to &lt;em&gt;List&lt;/em&gt;, as it brings further complexities to the code and eventually introduces complicated bugs. At the other hand, &lt;em&gt;UpCast( )&lt;/em&gt; method should return an internal wrapper object (either same or derived type) which delegates all operations to the original instance yet adding performance issues behind the scene in more complicated cases like this:     &lt;br /&gt;&lt;span style="font-size: 10pt; color: #2b91af; line-height: 115%; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;Dictionary&lt;/span&gt;&lt;span style="font-size: 10pt; line-height: 115%; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Car&lt;/span&gt;&amp;gt;&amp;gt;,&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;String&lt;/span&gt;&amp;gt;&amp;gt;&amp;gt;       &lt;br /&gt;      &lt;br /&gt;&lt;/span&gt;When converting to:     &lt;br /&gt;&lt;span style="font-size: 10pt; color: #2b91af; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes;="yes;" mso-fareast-font-family:="mso-fareast-font-family:" Calibri;="Calibri;" mso-fareast-theme-font:="mso-fareast-theme-font:" minor-latin;="minor-latin;" mso-ansi-language:="mso-ansi-language:" mso-fareast-language:="mso-fareast-language:" EN-US;="EN-US;" mso-bidi-language:="mso-bidi-language:" AR-SA?="AR-SA?"&gt;Dictionary&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes;="yes;" mso-fareast-font-family:="mso-fareast-font-family:" Calibri;="Calibri;" mso-fareast-theme-font:="mso-fareast-theme-font:" minor-latin;="minor-latin;" mso-ansi-language:="mso-ansi-language:" mso-fareast-language:="mso-fareast-language:" EN-US;="EN-US;" mso-bidi-language:="mso-bidi-language:" AR-SA?="AR-SA?"&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Vehicle&lt;/span&gt;&amp;gt;&amp;gt;,&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;object&lt;/span&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Casting and conversion are different as in cast object references are maintained. In other words, when casting no object creation happens but a new view to the existing object is maintained. &lt;/li&gt;    &lt;li&gt;C# language designers have not failed not supporting casting from &lt;em&gt;GenericType&amp;lt;B&amp;gt;&lt;/em&gt; to &lt;em&gt;GenericType&amp;lt;A&amp;gt; &lt;/em&gt;as this is wrong from OOP's point of view &lt;/li&gt;    &lt;li&gt;Primitive array cast is supported by both CLR and C#      &lt;br /&gt;e.g.: &lt;em&gt;Car[ ] &lt;/em&gt;can be cast to &lt;em&gt;Vehicle[ ] &lt;/em&gt;- all the references are maintained and no object constructions occur &lt;/li&gt;    &lt;li&gt;C# implicit/explicit operators cannot be used to simulate cast-like conversion from same inheritance hierarchy path &lt;/li&gt;    &lt;li&gt;.NET Framework designers have not failed not adding cast-like conversion methods to some classes such as &lt;em&gt;List&lt;/em&gt; as it has few performance and maintainability consequences. But still more advanced developers could be demanding this from their framework for certain scenarios. &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/1638497029260968563-155533255090669135?l=blog.mavadat.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1638497029260968563/155533255090669135/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1638497029260968563&amp;postID=155533255090669135' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1638497029260968563/posts/default/155533255090669135'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1638497029260968563/posts/default/155533255090669135'/><link rel='alternate' type='text/html' href='http://blog.mavadat.net/2008/05/c-covariance-and-contravariance.html' title='C# Covariance and Contravariance'/><author><name>Jamal Mavadat</name><uri>http://www.blogger.com/profile/16234548896627503751</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09269299581615640428'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1638497029260968563.post-4579928272803588009</id><published>2008-05-25T09:42:00.001+04:30</published><updated>2008-05-30T12:23:12.580+04:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Video'/><category scheme='http://www.blogger.com/atom/ns#' term='REMIX08'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Australia's REMIX08 Momentum Video</title><content type='html'>&lt;p&gt;This is the video featured at the beginning of Australia's REMIX08 keynote: &lt;/p&gt;  &lt;p&gt;&lt;iframe style="width: 436px; height: 360px" src="http://silverlight.services.live.com/invoke/35679/2008_05_24_momentum/iframe.html" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;p&gt;The event was held in Sydney on May 20th, and on May 22nd in Melbourne.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1638497029260968563-4579928272803588009?l=blog.mavadat.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1638497029260968563/4579928272803588009/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1638497029260968563&amp;postID=4579928272803588009' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1638497029260968563/posts/default/4579928272803588009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1638497029260968563/posts/default/4579928272803588009'/><link rel='alternate' type='text/html' href='http://blog.mavadat.net/2008/05/australia-remix08-momentum-video.html' title='Australia&amp;#39;s REMIX08 Momentum Video'/><author><name>Jamal Mavadat</name><uri>http://www.blogger.com/profile/16234548896627503751</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09269299581615640428'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1638497029260968563.post-9365463312273747</id><published>2008-05-22T01:12:00.001+04:30</published><updated>2008-05-29T22:39:22.760+04:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Video'/><title type='text'>Microsoft CEO Steve Ballmer Gets Egged in Hungary</title><content type='html'>&lt;p&gt;Microsoft CEO Steve Ballmer was egged by a protester during a speech he gave at a Hungarian University. &lt;a href="http://edition.cnn.com/2008/BUSINESS/05/20/microsoft.balmer.egged.ap/index.html" target="_blank"&gt;Read More...&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I've always been pondering how to get best out of worst! By the way, it does worth getting &amp;quot;egged&amp;quot; but be ranked among world's richest guys. Isn't it?!&lt;/p&gt;  &lt;p&gt;&lt;a title="NineMSDN - Steve Ballmer Egged" href="http://video.msn.com/video.aspx?mkt=en-AU&amp;amp;brand=ninemsn&amp;amp;vid=cd8654a4-142c-4c4e-8651-6aeb17d39539" target="_new"&gt;&lt;img height="84" alt="NineMSDN - Steve Ballmer Egged" src="http://img1.catalog.video.msn.com/Image.aspx?uuid=cd8654a4-142c-4c4e-8651-6aeb17d39539&amp;amp;w=112&amp;amp;h=84" width="112" border="0" /&gt;       &lt;br /&gt;NineMSDN - Steve Ballmer Egged&lt;/a&gt;&lt;/p&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;p&gt;&lt;b&gt;And here's some extra:&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Steve Ballmer's Monkey Dance: &lt;embed id="VideoPlayback" style="width: 400px; height: 326px" src="http://video.google.com/googleplayer.swf?docid=-4860483760049380308&amp;amp;hl=en" type="application/x-shockwave-flash" flashvars="flashvars" /&gt; &lt;/p&gt;  &lt;p&gt;Steve Ballmer Likes Developers: &lt;embed id="VideoPlayback" style="width: 400px; height: 326px" src="http://video.google.com/googleplayer.swf?docid=8913084255008000794&amp;amp;hl=en" type="application/x-shockwave-flash" flashvars="flashvars" /&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1638497029260968563-9365463312273747?l=blog.mavadat.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1638497029260968563/9365463312273747/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1638497029260968563&amp;postID=9365463312273747' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1638497029260968563/posts/default/9365463312273747'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1638497029260968563/posts/default/9365463312273747'/><link rel='alternate' type='text/html' href='http://blog.mavadat.net/2008/05/microsoft-ceo-steve-ballmer-gets-egged.html' title='Microsoft CEO Steve Ballmer Gets Egged in Hungary'/><author><name>Jamal Mavadat</name><uri>http://www.blogger.com/profile/16234548896627503751</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09269299581615640428'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1638497029260968563.post-7134002033222656709</id><published>2008-05-09T18:47:00.004+04:30</published><updated>2008-05-29T22:38:32.102+04:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><title type='text'>Happy Birthday to XML</title><content type='html'>&lt;a style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; border-left-width: 0px; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; border-right-width: 0px" href="http://www.w3.org/2008/xml10/"&gt;&lt;img title="Ten Years of W3C XML" style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; border-left-width: 0px; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; border-right-width: 0px" alt="W3C XML 10th anniversary" src="http://www.w3.org/2008/xml10/xml-10" /&gt;&lt;/a&gt;  &lt;br /&gt;&lt;a href="http://www.w3.org/TR/1998/REC-xml-19980210"&gt;Extensible Markup Language (XML) 1.0 Recommendation&lt;/a&gt;, is now ten years old since February 10, 2008. In honour to this special occasion, W3C has already launched a very mini-site which you may like to &lt;a href="http://www.w3.org/2008/xml10/"&gt;surf...&lt;/a&gt;  &lt;br /&gt;  &lt;br /&gt;Cheers everybody,  &lt;br /&gt;Not to forget sending your &lt;a href="http://www.w3.org/2008/xml10/card/greeting-form"&gt;XML 10 Greeting&lt;/a&gt; right now...  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1638497029260968563-7134002033222656709?l=blog.mavadat.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1638497029260968563/7134002033222656709/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1638497029260968563&amp;postID=7134002033222656709' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1638497029260968563/posts/default/7134002033222656709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1638497029260968563/posts/default/7134002033222656709'/><link rel='alternate' type='text/html' href='http://blog.mavadat.net/2008/05/happy-birthday-to-xml.html' title='Happy Birthday to XML'/><author><name>Jamal Mavadat</name><uri>http://www.blogger.com/profile/16234548896627503751</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09269299581615640428'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1638497029260968563.post-7263325341578721386</id><published>2008-04-28T23:01:00.025+04:30</published><updated>2008-05-29T22:51:33.635+04:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='C-Sharp'/><title type='text'>C# vs. C</title><content type='html'>It is pronounced &lt;span style="font-weight:bold;"&gt;C Sharp&lt;/span&gt;, but why is it written C# with the &lt;span style="font-style:italic;"&gt;number sign&lt;/span&gt;? Why isn’t it written C&lt;img style="padding: 0; margin: 0; border: 0;" src="http://blog.mavadat.net/uploaded_images/sharp-sign.gif" border="0" /&gt;; with the real musical &lt;span style="font-style:italic;"&gt;sharp sign&lt;/span&gt;?&lt;br /&gt;&lt;br /&gt;C# is Microsoft’s widely known object-oriented programming language. The name is picked from C programming language and Microsoft’s standard programming language, C++ - C plus plus. The latter part (Sharp sign) is selected from the music world; in musical notation, Sharp (&lt;img style="padding: 0; margin: 0; border: 0" src="http://blog.mavadat.net/uploaded_images/sharp-sign.gif" border="0" /&gt;), means higher in pitch by a semitone. Sure you have noticed how the name “C++” actually depicts a higher level “C”. And I like the way “C&lt;img style="padding: 0; margin: 0; border: 0" src="http://blog.mavadat.net/uploaded_images/sharp-sign.gif" border="0" /&gt;” or “C#” does the same; a beautiful mixture of computer software and music building a name for the new born programming language!&lt;br /&gt;&lt;br /&gt;Here is copied from Section 6, Acronyms and abbreviations of ECMA-334 (4th Edition) – C# Language Specification: &lt;blockquote&gt;“The name C# is written as the LATIN CAPITAL LETTER C (U+0043) followed by the NUMBER SIGN #(U+0023)”&lt;/blockquote&gt;&lt;br /&gt;As you notice, it is stated that the official name of the language is C# by using number sign. The number sign (#) was selected by Microsoft to replace the musical sharp sign, and that's some outcome we’re all now familiar with.&lt;br /&gt;&lt;br /&gt;The decision was made in the sake of the technical difficulties in displaying the musical sharp sign (&lt;img style="padding: 0; margin: 0; border: 0" src="http://blog.mavadat.net/uploaded_images/sharp-sign.gif" border="0" /&gt;) which is not supported by all fonts, browsers, and applications; and also the fact that it is not easily accessible by keyboards. The surprising part is that Microsoft sometimes uses the original name (using musical sharp sign) in some ads and arts; just have a brief look at this shot from &lt;span style="font-weight:bold;"&gt;Microsoft Visual C# 2003&lt;/span&gt; boxes:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.mavadat.net/uploaded_images/visual-c-sharp03-700821.jpg"&gt;&lt;img style="margin: 0pt 0pt 0pt 0pt; cursor: pointer;" src="http://blog.mavadat.net/uploaded_images/visual-c-sharp03-700520.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Some Background&lt;/span&gt;&lt;br /&gt;C# was publicly announced at the &lt;a href="http://msdn.microsoft.com/events/pdc/"&gt;Microsoft’s Professional Developers Conference (PDC)&lt;/a&gt; in 2000. The lead designer and architect of C# programming language is the famous Danish software engineer, &lt;a href="http://www.microsoft.com/presspass/exec/techfellow/Hejlsberg/default.mspx"&gt;Anders Hejlsberg&lt;/a&gt;, who joined Microsoft at 1996, and was very famous for his developments in Turbo Pascal and Delphi – Borland’s amazing development tools at the time. Microsoft offered Anders a bonus of $1,000,000 to join Microsoft. One year later, Borland lodged a complaint that Microsoft has hired some of Borland employees to take Borland’s secrets. Fortunately, the story had a happy ending at last, especially for developers like me who were passionate about both parties.&lt;br /&gt;&lt;br /&gt;In August 2000, Microsoft, Hewlett-Packard, and Intel submitted the C# programming language to European Computer Manufacturers Association (ECMA), and at the end of the day ECMA released &lt;a href="http://www.ecma-international.org/cgi-bin/counters/unicounter.pl?name=Ecma-334&amp;deliver=http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-334.pdf" target="_blank"&gt;ECMA-334 – C# Language Specification&lt;/a&gt; in December 2001. It was then passed to the International Organization for Standardization (ISO) in 2002, and so it became an ISO standard in 2003 – &lt;a href="http://standards.iso.org/ittf/PubliclyAvailableStandards/c042926_ISO_IEC_23270_2006(E).zip" target="_blank"&gt;ISO/IEC 23270&lt;/a&gt;. Currently the best standard-compliant implementation of the standard C# is &lt;span style="font-weight:bold;"&gt;Microsoft C# Compiler&lt;/span&gt;, which is actually being employed by some IDE’s such as &lt;span style="font-weight:bold;"&gt;Microsoft Visual C#&lt;/span&gt; and &lt;span style="font-weight:bold;"&gt;Borland C# Builder&lt;/span&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1638497029260968563-7263325341578721386?l=blog.mavadat.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1638497029260968563/7263325341578721386/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1638497029260968563&amp;postID=7263325341578721386' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1638497029260968563/posts/default/7263325341578721386'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1638497029260968563/posts/default/7263325341578721386'/><link rel='alternate' type='text/html' href='http://blog.mavadat.net/2008/04/c-vs-c.html' title='C# vs. C&lt;img style=&quot;padding: 0; margin: 0;border: 0px;&quot; src=&quot;http://blog.mavadat.net/uploaded_images/sharp-sign-title.gif&quot; border=&quot;0&quot; /&gt;'/><author><name>Jamal Mavadat</name><uri>http://www.blogger.com/profile/16234548896627503751</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09269299581615640428'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1638497029260968563.post-495160529862547951</id><published>2008-04-10T09:22:00.001+04:30</published><updated>2008-04-26T11:32:20.076+04:30</updated><title type='text'>The very beginning!</title><content type='html'>This is the professional blog of Jamal Mavadat. It is dedicated to computer science, and software engineering and development.&lt;br /&gt;&lt;br /&gt;This blog is not supposed to be updated very frequently - every other month based on a rule-of-thumb estimation. Anyway, I recommend you subscribe to the Atom/RSS syndication feed of this blog for your convenience: &lt;a href="http://blog.mavadat.net/atom.xml"&gt;http://blog.mavadat.net/atom.xml&lt;/a&gt;, &lt;a href="http://blog.mavadat.net/rss.xml"&gt;http://blog.mavadat.net/rss.xml&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Everybody please feel free to post your comments; however, I'll be so much pleased if you let me moderate.&lt;br /&gt;&lt;br /&gt;Best regards,&lt;br /&gt;Jamal&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1638497029260968563-495160529862547951?l=blog.mavadat.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1638497029260968563/495160529862547951/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1638497029260968563&amp;postID=495160529862547951' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1638497029260968563/posts/default/495160529862547951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1638497029260968563/posts/default/495160529862547951'/><link rel='alternate' type='text/html' href='http://blog.mavadat.net/2008/04/very-beginning.html' title='The very beginning!'/><author><name>Jamal Mavadat</name><uri>http://www.blogger.com/profile/16234548896627503751</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09269299581615640428'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>
