<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://geeks.netindonesia.net/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">DeskToppie und Webbie .NET Programmierer</title><subtitle type="html">Time is just a read only property of object SpaceTime..</subtitle><id>http://geeks.netindonesia.net/blogs/eriawan/atom.aspx</id><link rel="alternate" type="text/html" href="http://geeks.netindonesia.net/blogs/eriawan/default.aspx" /><link rel="self" type="application/atom+xml" href="http://geeks.netindonesia.net/blogs/eriawan/atom.aspx" /><generator uri="http://communityserver.org" version="3.1.20917.1142">Community Server</generator><updated>2007-06-05T21:00:00Z</updated><entry><title>Visual Studio 2010 Beta 2 Facts: First looks of Visual Studio 2010 Beta 2</title><link rel="alternate" type="text/html" href="http://geeks.netindonesia.net/blogs/eriawan/archive/2010/02/07/visual-studio-2010-beta-2-facts-first-looks-of-visual-studio-2010-beta-2.aspx" /><id>http://geeks.netindonesia.net/blogs/eriawan/archive/2010/02/07/visual-studio-2010-beta-2-facts-first-looks-of-visual-studio-2010-beta-2.aspx</id><published>2010-02-07T01:42:00Z</published><updated>2010-02-07T01:42:00Z</updated><content type="html">&lt;p&gt;Hi there! Now that Visual Studio 2010 is almost here, here are some facts about and what&amp;#39;s new in Visual Studio 2010. &lt;/p&gt;
&lt;p&gt;As you may have known, some of other INDC bloggers have blogged things about VS 2010, and there is a nice prize of blogging competition on this topic. As for me, I just want to tell new interesting facts about VS 2010 especially in Beta 2 release :). &lt;/p&gt;
&lt;p&gt;This topic is divided into these series:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;First looks of Visual Studio 2010 Beta 2 (you&amp;#39;re here) &lt;/li&gt;
&lt;li&gt;.NET 4 Beta 2 and the related C# 4.0 and VB 10&lt;/li&gt;
&lt;li&gt;New language into Visual Studio: F#&lt;/li&gt;
&lt;li&gt;WPF of .NET 4 Beta 2&lt;/li&gt;
&lt;li&gt;ASP.NET 4&lt;/li&gt;
&lt;li&gt;Team development of Visual Studio 2010 Beta 2 &lt;/li&gt;
&lt;li&gt;Extending VS 2010 Beta 2 &lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;(... and more to come!) &lt;/p&gt;
&lt;p&gt;Now, here&amp;#39;s the first: &lt;/p&gt;
&lt;h2&gt;First looks of Visual Studio 2010 Beta 2 &lt;/h2&gt;
&lt;p&gt;Note: For those didn&amp;#39;t have Visual Studio 2010 Beta 2, you can download it from this MSDN portal of Visual Studio: &lt;a href="http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx" title="http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx"&gt;http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Visual Studio 2010 comes in different editions, and it’s different in editions than in versions before 2010.&lt;/p&gt;
&lt;p&gt;Visual Studio 2008 comes in these flavors:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Express Edition (free to download and use, but you’ll have to install VB, Visual C#, Visual C++ and Visual Web Developer separately) &lt;/li&gt;
&lt;li&gt;Standard Edition &lt;/li&gt;
&lt;li&gt;Professional Edition &lt;/li&gt;
&lt;li&gt;Team System Developer and Database Edition included (it was initially in a separate edition) &lt;/li&gt;
&lt;li&gt;Team System Architect &lt;/li&gt;
&lt;li&gt;Team System Test &lt;/li&gt;
&lt;li&gt;Team Suite, a you can have it all edition that include Team System Developer, Database, Architect, and Test edition &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Quite many, right? Now, for Visual Studio 2010 editions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Express Edition (free and the it is the same as Visual Studio 2008 Express) &lt;/li&gt;
&lt;li&gt;Professional Edition &lt;/li&gt;
&lt;li&gt;Premium Edition (this includes features from Team System Developer and Database) &lt;/li&gt;
&lt;li&gt;Ultimate edition (just like Team Suite of VS 2008, but with additional Architect tools and many more) &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;At first, after you install the Visual Studio 2010 Beta 2, you’ll see this screen: (I use 1024 x 768 resolution)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.netindonesia.net/blogs/eriawan/image_18C02417.png"&gt;&lt;img src="http://geeks.netindonesia.net/blogs/eriawan/image_thumb_7E6F9525.png" style="border-width:0px;display:inline;" title="image" alt="image" width="644" border="0" height="459" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;At first, you’ll notice that it has new first page! Also the Visual Studio logo is also new, although it’s still a &lt;a href="http://en.wikipedia.org/wiki/M%C3%B6bius_strip"&gt;Möbius strip&lt;/a&gt;, but with a nice touchy bluish theme. But one nice interesting fact is (although you can’t see this directly), Visual Studio 2010 UI is largely developed using WPF 4!&lt;/p&gt;
&lt;p&gt;Too bad I can’t use Snoop at first on Visual Studio 2010 running instances to prove this, but you can fix Snoop directly in the code using &lt;a href="http://www.japf.fr/2009/11/using-snoop-with-vs2010/"&gt;this tips&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I also downloaded the most “complete” edition of VS 2010, the Ultimate edition. It seems Microsoft wants to sync with Windows Vista and Windows 7 editions, right?&lt;/p&gt;
&lt;p&gt;If you select “New Project…” on the right side of the Start Page, you’ll see these project types:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.netindonesia.net/blogs/eriawan/image_1EF2CD11.png"&gt;&lt;img src="http://geeks.netindonesia.net/blogs/eriawan/image_thumb_67E4B50B.png" style="border:0px none;display:inline;" title="image" alt="image" width="644" border="0" height="394" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.netindonesia.net/blogs/eriawan/image_30B71313.png"&gt;&lt;img src="http://geeks.netindonesia.net/blogs/eriawan/image_thumb_0A0886C6.png" style="border:0px none;display:inline;" title="image" alt="image" width="244" border="0" height="129" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;There you are! You’ll see F# dubbed as Visual F# in the list of templates!&lt;/p&gt;
&lt;p&gt;And you’ll also see lots of other new template items, such as Silverlight 3 items. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;And what about the documentation? It’s not like the previous version of MSDN Library. Visual Studio 2010 has MS Help 3.0, and it’s quite different from the previous versions of MS Help.&lt;/p&gt;
&lt;p&gt;You have to install the documentation first by “adding” it to the Help collections as a “local content”.&lt;/p&gt;
&lt;p&gt;At first, go to menu “Help” and choose “Manage Help Setting”:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.netindonesia.net/blogs/eriawan/image_2F625467.png"&gt;&lt;img src="http://geeks.netindonesia.net/blogs/eriawan/image_thumb_61D58C0C.png" style="border:0px none;display:inline;" title="image" alt="image" width="383" border="0" height="194" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Visual Studio will then check existing configuration of MS Help 3.0 for quite some time, then a Help Manager window will come up:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.netindonesia.net/blogs/eriawan/image_05023518.png"&gt;&lt;img src="http://geeks.netindonesia.net/blogs/eriawan/image_thumb_7616F1FE.png" style="border:0px none;display:inline;" title="image" alt="image" width="575" border="0" height="392" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Choose find content on disk:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.netindonesia.net/blogs/eriawan/image_03C59A08.png"&gt;&lt;img src="http://geeks.netindonesia.net/blogs/eriawan/image_thumb_1B3C3A3A.png" style="border:0px none;display:inline;" title="image" alt="image" width="575" border="0" height="392" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Browse to the installation disk and go to “ProductDocumentation” folder and you’ll find: &lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.netindonesia.net/blogs/eriawan/image_79D8809E.png"&gt;&lt;img src="http://geeks.netindonesia.net/blogs/eriawan/image_thumb_1A5BAC52.png" style="border:0px none;display:inline;" title="image" alt="image" width="644" border="0" height="361" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Select the file, and then add the packages. If you have successfully added the collections restart Visual Studio soon. Go to the Manage Help Settings and you’ll see this:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.netindonesia.net/blogs/eriawan/image_080ED191.png"&gt;&lt;img src="http://geeks.netindonesia.net/blogs/eriawan/image_thumb_01F396C4.png" style="border:0px none;display:inline;" title="image" alt="image" width="575" border="0" height="392" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Now, back to Visual Studio again. Choose menu Help then “Visual Studio Documentation”. A new browser window will pop up and it will also display the homepage of VS 2010 help:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.netindonesia.net/blogs/eriawan/image_57AE990A.png"&gt;&lt;img src="http://geeks.netindonesia.net/blogs/eriawan/image_thumb_72B65675.png" style="border:0px none;display:inline;" title="image" alt="image" width="644" border="0" height="328" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;As you see, instead of displaying the MS Help Viewer, the documentation will be displayed directly on a web browser. This is quite useful, since it takes less amount of time and memory compared to previous versions.&lt;/p&gt;
&lt;p&gt;But this collections that shipped with VS 2010 Beta 2 is not complete, there will be a bunch of pages or links missing/broken. So, always keep the installation of MSDN Library for VS 2008 SP1, don’t uninstall it.&lt;/p&gt;
&lt;p&gt;Now, you’re ready to code! Next: .NET 4 Beta 2 and the related C# 4.0 and VB 10…&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fgeeks.netindonesia.net%2fblogs%2feriawan%2farchive%2f2010%2f02%2f07%2fvisual-studio-2010-beta-2-facts-first-looks-of-visual-studio-2010-beta-2.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fgeeks.netindonesia.net%2fblogs%2feriawan%2farchive%2f2010%2f02%2f07%2fvisual-studio-2010-beta-2-facts-first-looks-of-visual-studio-2010-beta-2.aspx" alt="kick it on DotNetKicks.com" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post: &lt;/strong&gt;&lt;a href="mailto:?body=Thought you might like this: http://geeks.netindonesia.net/blogs/eriawan/archive/2010/02/07/visual-studio-2010-beta-2-facts-first-looks-of-visual-studio-2010-beta-2.aspx&amp;amp;subject=Visual Studio 2010 Beta 2 Facts: First looks of Visual Studio 2010 Beta 2" target="_blank" title="Send via email"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Mail.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.facebook.com/sharer.php?u=http://geeks.netindonesia.net/blogs/eriawan/archive/2010/02/07/visual-studio-2010-beta-2-facts-first-looks-of-visual-studio-2010-beta-2.aspx&amp;amp;t=Visual+Studio+2010+Beta+2+Facts%3a+First+looks+of+Visual+Studio+2010+Beta+2" target="_blank" title="Submit Visual Studio 2010 Beta 2 Facts: First looks of Visual Studio 2010 Beta 2 to DotNetKicks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Facebook.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://del.icio.us/post?url=http://geeks.netindonesia.net/blogs/eriawan/archive/2010/02/07/visual-studio-2010-beta-2-facts-first-looks-of-visual-studio-2010-beta-2.aspx&amp;amp;title=Visual+Studio+2010+Beta+2+Facts%3a+First+looks+of+Visual+Studio+2010+Beta+2" target="_blank" title="Submit Visual Studio 2010 Beta 2 Facts: First looks of Visual Studio 2010 Beta 2 to del.icio.us"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Delicious.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.digg.com/submit?url=http://geeks.netindonesia.net/blogs/eriawan/archive/2010/02/07/visual-studio-2010-beta-2-facts-first-looks-of-visual-studio-2010-beta-2.aspx&amp;amp;phase=2" target="_blank" title="Submit Visual Studio 2010 Beta 2 Facts: First looks of Visual Studio 2010 Beta 2 to digg.com"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Digg.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://geeks.netindonesia.net/blogs/eriawan/archive/2010/02/07/visual-studio-2010-beta-2-facts-first-looks-of-visual-studio-2010-beta-2.aspx&amp;amp;title=Visual+Studio+2010+Beta+2+Facts%3a+First+looks+of+Visual+Studio+2010+Beta+2" target="_blank" title="Add Visual Studio 2010 Beta 2 Facts: First looks of Visual Studio 2010 Beta 2 to Live Bookmarks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Live.16.gif" border="0"&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://geeks.netindonesia.net/aggbug.aspx?PostID=185559" width="1" height="1"&gt;</content><author><name>eriawan</name><uri>http://geeks.netindonesia.net/members/eriawan.aspx</uri></author><category term="Visual Studio 2010" scheme="http://geeks.netindonesia.net/blogs/eriawan/archive/tags/Visual+Studio+2010/default.aspx" /></entry><entry><title>How “semantic web” are you?</title><link rel="alternate" type="text/html" href="http://geeks.netindonesia.net/blogs/eriawan/archive/2009/01/23/how-semantic-web-are-you.aspx" /><id>http://geeks.netindonesia.net/blogs/eriawan/archive/2009/01/23/how-semantic-web-are-you.aspx</id><published>2009-01-23T08:25:45Z</published><updated>2009-01-23T08:25:45Z</updated><content type="html">&lt;p&gt;Hi guys! Just to refresh my entries about web 2.0 on &lt;a target="_blank" href="http://geeks.netindonesia.net/blogs/eriawan/archive/2006/10/05/Web-2.0_3F00_-Is-it-here_3F00_-_2200_PART-1_3A00_THE-OVERVIEW_2200_.aspx"&gt;this intro&lt;/a&gt; and then part 2, one of the hype of web 2.0 is semantic web. Now, this semantic is not just talking about the what your page will look, but it’s also what your html (or xhtml) page should be constructed. Meaning that, the source of your web page should be in a context of semantically correct.&lt;/p&gt;  &lt;hr /&gt;  &lt;p&gt;Note:&lt;/p&gt;  &lt;p&gt;First of all, I’m not a web standards fanatic or advocate! Even though I was once part of the W3C HTML/WG invited participant about 9 years ago.&lt;/p&gt;  &lt;hr /&gt;  &lt;p&gt;A very nice example of this is the source of &lt;a target="_blank" href="http://stackoverflow.com/"&gt;stackoverflow&lt;/a&gt; and the most complete sample that I’ve known of, is the website of &lt;a target="_blank" href="http://tantek.com"&gt;Tantek Çelik&lt;/a&gt;, former Microsoft’s developer of IE 5 for Mac (which is sadly, not further developed). &lt;/p&gt;  &lt;p&gt;As we move further and further to XHTML and Semantic Web, the old tags of HTML 3.2 will be considered obsolete or deprecated. W3C itself is moving to more semantically direction.&lt;/p&gt;  &lt;h2&gt;Web are moving to.. semantic web as semantic in simple linguistic?&lt;/h2&gt;  &lt;p&gt;Why?&lt;/p&gt;  &lt;p&gt;HTML 3.2 and before is:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;A mixes of style and data/content presentation &lt;/li&gt;    &lt;li&gt;Ambiguous tree representation of DOM 1 &lt;/li&gt;    &lt;li&gt;Vendor influential (not neutral), for example: APPLET element &lt;/li&gt;    &lt;li&gt;Focusing on quick deployment of looks and layout instantly (remember FONT element?) &lt;/li&gt;    &lt;li&gt;Focusing on “tag”, not element. This is because it’s rooted back to the original hyperlink text created by CERN, the original birthplace of web and HTML and no DOM at that time. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;HTML 4.01 is:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Promoting separation of style and layout (moved into CSS) and content presentation. No FONT element anymore! &lt;/li&gt;    &lt;li&gt;Focusing on HTML element that’s further sync with DOM’s object. &lt;/li&gt;    &lt;li&gt;Less ambiguous and in sync with DOM 2, although some ambiguities are still exist. Samples of ambiguities removed: use DIV instead of LAYER, BLINK is completely removed. &lt;/li&gt;    &lt;li&gt;More neutral and based on very lengthy process of WD-“WD Last Call”-CR-PR-REC that unfortunately can take very long time to wait for finished Recommendation and can be pushed back to WD! Even Microsoft has been struggling with standardization and actively participating since the release of IE 7 Beta (see notes below). &lt;/li&gt;    &lt;li&gt;A natural transition toward stricter DOM and readable and understandable HTML (geared toward browsers for sight impaired/disabilities), even on the source code level, since your HTML can also be read using a combined implementations of WCAI AAA &lt;/li&gt;    &lt;li&gt;This natural transition is bringing more focus on content presentation but still allow STYLEs elements &lt;/li&gt;    &lt;li&gt;Not just have to be understood, the meaning of translated or read HTML has to be meaningful in a sense of semantic linguistic, and therefore semantically correct, not just syntactically valid/correct. &lt;/li&gt; &lt;/ul&gt;  &lt;hr /&gt;  &lt;p&gt;Notes on Microsoft on W3C:&lt;/p&gt;  &lt;p&gt;As a result of overwhelming request of IE’s standard conformances, many web developers were leaving IE, even fewer after the release of IE 7. As a matter of fact, IE 8 Beta 2 hasn’t been able to pass ACID2 test.&lt;/p&gt;  &lt;p&gt;But Microsoft, especially Microsoft’s employee aren’t just bringing promises. See these promises and “horror” comments of this blog of &lt;a target="_blank" href="http://blogs.msdn.com/cwilso"&gt;Chris Wilson, Microsoft IE’s Architect&lt;/a&gt;. Also don’t forget to catch up with Chris Wilson’s new blog: &lt;a title="cwilso.com" href="http://cwilso.com/"&gt;cwilso.com&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Curious about latest IE development? Follow IE development on &lt;a target="_blank" href="http://blogs.msdn.com/ie"&gt;MSDN’s IE Team blog&lt;/a&gt;. &lt;/p&gt;  &lt;hr /&gt;  &lt;p&gt;XHTML 1.0 is:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Based on &lt;a target="_blank" href="http://www.w3.org/TR/2008/REC-xml-20081126/"&gt;XML 1.0 (now in 5th edition)&lt;/a&gt;, Namespaces in XML 1.0 &lt;/li&gt;    &lt;li&gt;Although a transitional DTD is available, the use of case sensitivity is strongly applied since it’s XML based. &lt;/li&gt;    &lt;li&gt;Can be extended implicitly, although this fact is still debated. But due to the fact of “X” factor in XML is eXtensible, this will welcome new possibilities of applications with other XML related standards at W3C, such as XSL, XSLT, XPath, XForm, XFrame, and others. &lt;/li&gt;    &lt;li&gt;Promoting discipline over readable and transportable web &lt;/li&gt;    &lt;li&gt;Focus on more well formed XML and more correct semantic &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Where is the semantic factor, actually? &lt;/h2&gt;  &lt;p&gt;There are way too many aspects of semantic web and I can’t simply put those all in this small blog entry. But I can give you quick samples.&lt;/p&gt;  &lt;p&gt;On the HTML side:&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="1"&gt;     &lt;tr&gt;       &lt;td&gt;Element&lt;/td&gt;        &lt;td&gt;Semantic HTML&lt;/td&gt;        &lt;td&gt;Why&lt;/td&gt;     &lt;/tr&gt;        &lt;tr&gt;       &lt;td&gt;&amp;lt;b&amp;gt;&lt;/td&gt;        &lt;td&gt;&amp;lt;strong&amp;gt;&lt;/td&gt;        &lt;td&gt;More emphasized and clearer definition. It’s also stated in HTML 4.0, this will be rendered as bold face.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&amp;lt;i&amp;gt;&lt;/td&gt;        &lt;td&gt;&amp;lt;em&amp;gt;&lt;/td&gt;        &lt;td&gt;More emphasized and cleaner definition. It’s also stated in HTML 4.0, this will be rendered in italic face.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&amp;lt;font&amp;gt;&lt;/td&gt;        &lt;td&gt;no longer used&lt;/td&gt;        &lt;td&gt;Use CSS to specify type faces and sizes. Also promote more separation.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&amp;lt;blockquote&amp;gt; for quotation&lt;/td&gt;        &lt;td&gt;&amp;lt;q&amp;gt; for quotation&lt;/td&gt;        &lt;td&gt;Cleaner definition over quote of “q”. There have been numerous disagreements on blockquote on many forums of W3C, since blockquote is not clear and ambiguous.&lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;  &lt;p&gt;On the HTML table representation:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Table should be used exclusively for tabular data, not for HTML layout &lt;/li&gt;    &lt;li&gt;Use thead to give table header a real semantic representation of a header of tabular data, and use tbody for data itself. &lt;/li&gt;    &lt;li&gt;Use fixed width to ease layout calculation for browser rendering, but do this in CSS, not in the HTML source! Hint: use “&lt;font face="Courier New"&gt;table-layout: fixed&lt;/font&gt;” &lt;/li&gt;    &lt;li&gt;If you need footer or last row summary, use tfoot &lt;/li&gt;    &lt;li&gt;You want caption? You can use “caption” and use it directly as a child element of the table &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;This is the sample of a table:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;table&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span&gt;thead&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;First name&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;Last Name&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;City&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span&gt;thead&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span&gt;tbody&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;Eriawan&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;Kusumawardhono&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;Surabaya&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;Benyamin&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;Suaib&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;Jakarta&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span&gt;tbody&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span&gt;tfoot&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;Total data:&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;2&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span&gt;tfoot&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span&gt;table&lt;/span&gt;&lt;span&gt;&amp;gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;With additional formatting, the table will be rendered like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://geeks.netindonesia.net/blogs/eriawan/formatted_html_table_59FAF51F.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="formatted_html_table" border="0" alt="formatted_html_table" src="http://geeks.netindonesia.net/blogs/eriawan/formatted_html_table_thumb_0EB9A3BC.png" width="644" height="314" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;If you look closely, the IE I use&amp;#160; is IE 8 Beta 2. See the compatibilty button. :)&lt;/p&gt;

&lt;p&gt;These are the complete code of the sample:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span&gt;&amp;lt;!&lt;/span&gt;&lt;span&gt;DOCTYPE&lt;/span&gt; &lt;span&gt;html&lt;/span&gt; &lt;span&gt;PUBLIC&lt;/span&gt; &lt;span&gt;&amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot;&lt;/span&gt; &lt;span&gt;&amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span&gt;html&lt;/span&gt; &lt;span&gt;xmlns&lt;/span&gt;&lt;span&gt;=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&lt;/span&gt; &lt;span&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span&gt;head&lt;/span&gt;&lt;span&gt;&amp;gt;
&lt;/span&gt;    &lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;Semantic web&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;&amp;gt;
&lt;/span&gt;    &lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;style&lt;/span&gt; &lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&amp;quot;text/css&amp;quot;&amp;gt;
&lt;/span&gt;    &lt;span&gt;thead
&lt;/span&gt;    {
        &lt;span&gt;background-color&lt;/span&gt;: &lt;span&gt;#00f&lt;/span&gt;;
        &lt;span&gt;color&lt;/span&gt;: &lt;span&gt;#fff&lt;/span&gt;;
    }
    &lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span&gt;head&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;&amp;gt;

&amp;lt;&lt;/span&gt;&lt;span&gt;h1&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;Table sample&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;h1&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span&gt;table&lt;/span&gt; &lt;span&gt;border&lt;/span&gt;&lt;span&gt;=&amp;quot;1&amp;quot;&lt;/span&gt; &lt;span&gt;cellspacing&lt;/span&gt;&lt;span&gt;=&amp;quot;0&amp;quot;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span&gt;thead&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;First name&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;Last Name&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;City&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span&gt;thead&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span&gt;tbody&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;Eriawan&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;Kusumawardhono&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;Surabaya&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;Benyamin&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;Suaib&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;Jakarta&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span&gt;tbody&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span&gt;tfoot&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;Total data:&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;2&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span&gt;tfoot&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span&gt;table&lt;/span&gt;&lt;span&gt;&amp;gt;

&amp;lt;/&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span&gt;html&lt;/span&gt;&lt;span&gt;&amp;gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;h3&gt;Are there any help from tools/utilities? &lt;/h3&gt;

&lt;p&gt;The sad fact is, not many HTML/XHTML editors are aware about these. &lt;/p&gt;

&lt;p&gt;Adobe Dreamweaver CS2 and CS3, for example, have acknowledged most of these and it also validates XHTML 1.0 well, but there’s no support for directly inserting thead and tfoot. Dreamweaver CS2 and CS3 also have supports for suggesting the use of “alt” attributes on “img”. Sweet! &lt;/p&gt;

&lt;p&gt;I’d like to test Dreamweaver CS4, but the hardware requirements are quite overkill.&lt;/p&gt;

&lt;p&gt;Microsoft Expression Web is more lightweight than Dreamweaver CS3, but unfortunately has many XHTML validation consistencies.&lt;/p&gt;

&lt;p&gt;Surprisingly, HTML editor of Microsoft Visual Web Developer (of Visual Studio 2008) has valid validation and has “preview mode” that is closer to the current browser used. And it fully respects W3C XHTML 1.0 DTD, not paying respect to IE’s HTML DTD! Although, the suggestion is somehow less cleaner than in Dreamweaver CS2/CS3. Why? &lt;/p&gt;

&lt;p&gt;Because Microsoft acknowledges the fact that IE even IE 8 Beta 2 doesn’t explicitly support XHTML 1.0. Only Opera 9.5 (or above), and Firefox 4.0 (yes, 4.0!) support XHTML.&lt;/p&gt;

&lt;p&gt;What to see in the near future? I’ll try to continue this humble mumble of semantic web.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Comments are welcome! :)&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fgeeks.netindonesia.net%2fblogs%2feriawan%2farchive%2f2009%2f01%2f23%2fhow-semantic-web-are-you.aspx"&gt;&lt;img border="0" alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fgeeks.netindonesia.net%2fblogs%2feriawan%2farchive%2f2009%2f01%2f23%2fhow-semantic-web-are-you.aspx" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post: &lt;/strong&gt;&lt;a href="mailto:?body=Thought you might like this: http://geeks.netindonesia.net/blogs/eriawan/archive/2009/01/23/how-semantic-web-are-you.aspx&amp;amp;subject=How “semantic web” are you?" target="_blank" title="Send via email"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Mail.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.facebook.com/sharer.php?u=http://geeks.netindonesia.net/blogs/eriawan/archive/2009/01/23/how-semantic-web-are-you.aspx&amp;amp;t=How+%e2%80%9csemantic+web%e2%80%9d+are+you%3f" target="_blank" title="Submit How “semantic web” are you? to DotNetKicks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Facebook.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://del.icio.us/post?url=http://geeks.netindonesia.net/blogs/eriawan/archive/2009/01/23/how-semantic-web-are-you.aspx&amp;amp;title=How+%e2%80%9csemantic+web%e2%80%9d+are+you%3f" target="_blank" title="Submit How “semantic web” are you? to del.icio.us"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Delicious.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.digg.com/submit?url=http://geeks.netindonesia.net/blogs/eriawan/archive/2009/01/23/how-semantic-web-are-you.aspx&amp;amp;phase=2" target="_blank" title="Submit How “semantic web” are you? to digg.com"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Digg.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://geeks.netindonesia.net/blogs/eriawan/archive/2009/01/23/how-semantic-web-are-you.aspx&amp;amp;title=How+%e2%80%9csemantic+web%e2%80%9d+are+you%3f" target="_blank" title="Add How “semantic web” are you? to Live Bookmarks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Live.16.gif" border="0"&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://geeks.netindonesia.net/aggbug.aspx?PostID=83964" width="1" height="1"&gt;</content><author><name>eriawan</name><uri>http://geeks.netindonesia.net/members/eriawan.aspx</uri></author><category term="web 2.0" scheme="http://geeks.netindonesia.net/blogs/eriawan/archive/tags/web+2.0/default.aspx" /><category term="XHTML" scheme="http://geeks.netindonesia.net/blogs/eriawan/archive/tags/XHTML/default.aspx" /><category term="semantic web" scheme="http://geeks.netindonesia.net/blogs/eriawan/archive/tags/semantic+web/default.aspx" /></entry><entry><title>Get the latest wave of Windows Live application (in Beta)</title><link rel="alternate" type="text/html" href="http://geeks.netindonesia.net/blogs/eriawan/archive/2008/10/03/get-the-latest-wave-of-windows-live-application-in-beta.aspx" /><id>http://geeks.netindonesia.net/blogs/eriawan/archive/2008/10/03/get-the-latest-wave-of-windows-live-application-in-beta.aspx</id><published>2008-10-03T12:59:00Z</published><updated>2008-10-03T12:59:00Z</updated><content type="html">&lt;p&gt;Funny, now the Windows Live applications and services seem to be in one version sync: version 14.&lt;/p&gt;
&lt;p&gt;Get the full standalone of 110MB here:&lt;/p&gt;
&lt;p&gt;&lt;a title="http://download.microsoft.com/download/7/6/E/76EE3260-D212-4D9B-B8D6-79C014B0593B/EN/wlsetup-all.exe&amp;#13;&amp;#10;" href="http://download.microsoft.com/download/7/6/E/76EE3260-D212-4D9B-B8D6-79C014B0593B/EN/wlsetup-all.exe"&gt;http://download.microsoft.com/download/7/6/E/76EE3260-D212-4D9B-B8D6-79C014B0593B/EN/wlsetup-all.exe &lt;br /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So, what really is this hefty one package? It contains:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Windows Live Writer Beta &lt;/li&gt;
&lt;li&gt;Windows Live Messenger &lt;/li&gt;
&lt;li&gt;Windows Live Mail Beta &lt;/li&gt;
&lt;li&gt;Windows Live Toolbar Beta&lt;/li&gt;
&lt;li&gt;Windows Live Photo Gallery Beta&lt;/li&gt;
&lt;li&gt;.. and this strange for me, Windows Live Call Beta. I think it&amp;#39;s Microsoft&amp;#39;s answer to Skype.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;… And they all have the same version: version 14.&lt;/p&gt;
&lt;p&gt;Here’s the snapshots:&lt;/p&gt;
&lt;p&gt;Windows Live Messenger 14:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.netindonesia.net/blogs/eriawan/messenger_14_01C9F2D3.png"&gt;&lt;img title="messenger_14" style="BORDER-RIGHT:0px;BORDER-TOP:0px;DISPLAY:inline;BORDER-LEFT:0px;BORDER-BOTTOM:0px;" height="484" alt="messenger_14" src="http://geeks.netindonesia.net/blogs/eriawan/messenger_14_thumb_5BF65D20.png" width="261" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Windows Live Writer 14:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.netindonesia.net/blogs/eriawan/writer_14_7DE45055.png"&gt;&lt;img title="writer_14" style="BORDER-RIGHT:0px;BORDER-TOP:0px;DISPLAY:inline;BORDER-LEFT:0px;BORDER-BOTTOM:0px;" height="468" alt="writer_14" src="http://geeks.netindonesia.net/blogs/eriawan/writer_14_thumb_385F502A.png" width="644" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Windows Live Mail 14&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.netindonesia.net/blogs/eriawan/livemail_14_5F2FF71B.png"&gt;&lt;img title="livemail_14" style="BORDER-RIGHT:0px;BORDER-TOP:0px;DISPLAY:inline;BORDER-LEFT:0px;BORDER-BOTTOM:0px;" height="439" alt="livemail_14" src="http://geeks.netindonesia.net/blogs/eriawan/livemail_14_thumb_532E06E7.png" width="644" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;If some of you may ask, why do I show Windows XP? I need to inform you that you can still install these damn useful applications on Windows XP SP2, and on Vista of course. I suggest, on Vista though. You already have .NET 2.0 on Vista with added twists of security and reliability. :)&lt;/p&gt;
&lt;p&gt;Funny or maybe not finished? The Windows Live Writer editor doesn’t recognize the CSS of my blog. Hope they will fix this.&lt;/p&gt;
&lt;p&gt;Ah, by the way, Windows Live Writer needs .NET 2.0 runtime. And if you don’t have it, it’s already included in the standalone installer. Enjoy!&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post: &lt;/strong&gt;&lt;a href="mailto:?body=Thought you might like this: http://geeks.netindonesia.net/blogs/eriawan/archive/2008/10/03/get-the-latest-wave-of-windows-live-application-in-beta.aspx&amp;amp;subject=Get the latest wave of Windows Live application (in Beta)" target="_blank" title="Send via email"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Mail.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.facebook.com/sharer.php?u=http://geeks.netindonesia.net/blogs/eriawan/archive/2008/10/03/get-the-latest-wave-of-windows-live-application-in-beta.aspx&amp;amp;t=Get+the+latest+wave+of+Windows+Live+application+(in+Beta)" target="_blank" title="Submit Get the latest wave of Windows Live application (in Beta) to DotNetKicks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Facebook.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://del.icio.us/post?url=http://geeks.netindonesia.net/blogs/eriawan/archive/2008/10/03/get-the-latest-wave-of-windows-live-application-in-beta.aspx&amp;amp;title=Get+the+latest+wave+of+Windows+Live+application+(in+Beta)" target="_blank" title="Submit Get the latest wave of Windows Live application (in Beta) to del.icio.us"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Delicious.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.digg.com/submit?url=http://geeks.netindonesia.net/blogs/eriawan/archive/2008/10/03/get-the-latest-wave-of-windows-live-application-in-beta.aspx&amp;amp;phase=2" target="_blank" title="Submit Get the latest wave of Windows Live application (in Beta) to digg.com"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Digg.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://geeks.netindonesia.net/blogs/eriawan/archive/2008/10/03/get-the-latest-wave-of-windows-live-application-in-beta.aspx&amp;amp;title=Get+the+latest+wave+of+Windows+Live+application+(in+Beta)" target="_blank" title="Add Get the latest wave of Windows Live application (in Beta) to Live Bookmarks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Live.16.gif" border="0"&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://geeks.netindonesia.net/aggbug.aspx?PostID=65226" width="1" height="1"&gt;</content><author><name>eriawan</name><uri>http://geeks.netindonesia.net/members/eriawan.aspx</uri></author><category term="web 2.0" scheme="http://geeks.netindonesia.net/blogs/eriawan/archive/tags/web+2.0/default.aspx" /><category term="windows live" scheme="http://geeks.netindonesia.net/blogs/eriawan/archive/tags/windows+live/default.aspx" /></entry><entry><title>RESOURCE: Free .NET Zero ebook by Charles Petzold</title><link rel="alternate" type="text/html" href="http://geeks.netindonesia.net/blogs/eriawan/archive/2008/07/17/resource-free-net-zero-ebook-by-charles-petzold.aspx" /><id>http://geeks.netindonesia.net/blogs/eriawan/archive/2008/07/17/resource-free-net-zero-ebook-by-charles-petzold.aspx</id><published>2008-07-17T04:04:52Z</published><updated>2008-07-17T04:04:52Z</updated><content type="html">&lt;p&gt;I know, it&amp;#39;s quite old but it&amp;#39;s still relevant, even today in the world of .NET 2.0, 3.0, and 3.5.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.charlespetzold.com/dotnet/" target="_blank"&gt;&lt;font size="4"&gt;What the C or C++ Programmer Needs to Know About C# and the .NET Framework&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Enjoy reading! :)&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post: &lt;/strong&gt;&lt;a href="mailto:?body=Thought you might like this: http://geeks.netindonesia.net/blogs/eriawan/archive/2008/07/17/resource-free-net-zero-ebook-by-charles-petzold.aspx&amp;amp;subject=RESOURCE: Free .NET Zero ebook by Charles Petzold" target="_blank" title="Send via email"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Mail.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.facebook.com/sharer.php?u=http://geeks.netindonesia.net/blogs/eriawan/archive/2008/07/17/resource-free-net-zero-ebook-by-charles-petzold.aspx&amp;amp;t=RESOURCE%3a+Free+.NET+Zero+ebook+by+Charles+Petzold" target="_blank" title="Submit RESOURCE: Free .NET Zero ebook by Charles Petzold to DotNetKicks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Facebook.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://del.icio.us/post?url=http://geeks.netindonesia.net/blogs/eriawan/archive/2008/07/17/resource-free-net-zero-ebook-by-charles-petzold.aspx&amp;amp;title=RESOURCE%3a+Free+.NET+Zero+ebook+by+Charles+Petzold" target="_blank" title="Submit RESOURCE: Free .NET Zero ebook by Charles Petzold to del.icio.us"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Delicious.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.digg.com/submit?url=http://geeks.netindonesia.net/blogs/eriawan/archive/2008/07/17/resource-free-net-zero-ebook-by-charles-petzold.aspx&amp;amp;phase=2" target="_blank" title="Submit RESOURCE: Free .NET Zero ebook by Charles Petzold to digg.com"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Digg.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://geeks.netindonesia.net/blogs/eriawan/archive/2008/07/17/resource-free-net-zero-ebook-by-charles-petzold.aspx&amp;amp;title=RESOURCE%3a+Free+.NET+Zero+ebook+by+Charles+Petzold" target="_blank" title="Add RESOURCE: Free .NET Zero ebook by Charles Petzold to Live Bookmarks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Live.16.gif" border="0"&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://geeks.netindonesia.net/aggbug.aspx?PostID=56844" width="1" height="1"&gt;</content><author><name>eriawan</name><uri>http://geeks.netindonesia.net/members/eriawan.aspx</uri></author></entry><entry><title>Silent scream revisited, and there are many who really cares about our education! (silent scream part two)</title><link rel="alternate" type="text/html" href="http://geeks.netindonesia.net/blogs/eriawan/archive/2008/05/21/silent-scream-revisited-and-there-are-many-who-really-cares-about-our-education-silent-scream-part-two.aspx" /><id>http://geeks.netindonesia.net/blogs/eriawan/archive/2008/05/21/silent-scream-revisited-and-there-are-many-who-really-cares-about-our-education-silent-scream-part-two.aspx</id><published>2008-05-21T10:49:07Z</published><updated>2008-05-21T10:49:07Z</updated><content type="html">&lt;p&gt;Yes. Why do I say many cares? Just a day after I wrote my latest blog entry about the &lt;a href="http://geeks.netindonesia.net/blogs/eriawan/archive/2008/03/04/there-s-got-to-be-a-way-not-just-a-silent-scream-about-our-it-education.aspx" target="_blank"&gt;first silent scream&lt;/a&gt;, some of my colleagues gave me supports, including many of my colleagues from Indonesian OMG BMI members. Wow! They even offer me many samples of syllables from many Australian universities, for comparison resources.&lt;/p&gt; &lt;p&gt;Some of them were willing to pour some real cash to accelerate this. But not so fast, though. We need to form a specific &amp;quot;organization&amp;quot;, since then it&amp;#39;s not an initiative from RX Communica anymore. Basically, they agreed. It&amp;#39;s also being considered as a non-profit organization, and there should be no hidden agenda at all, no dependency or dominance from a single company.&lt;/p&gt; &lt;p&gt;Ahh, it may sound easy to say than to really form it. At the same time, while my friends and I are still considering many options, those guys that interested in funding approach me. But, they have to agree on stricter term, especially on these fine prints: &lt;strong&gt;&lt;em&gt;&amp;quot;non profit, no dependency and dominance&amp;quot;&lt;/em&gt;&lt;/strong&gt;. Few of them backed off. &lt;/p&gt; &lt;p&gt;Funny thing is, some of them thought that we were building a promising startup, just like the story behind the fever of startup on the dusk of web 2.0 bubbles.&lt;/p&gt; &lt;p&gt;Simple answer is: No. We are not building a startup. We&amp;#39;re not tied as a promising newcomer for many VCs. Yes, we&amp;#39;re concerning about software development in general, and our main target is preparing young talents to be aware of the latest software development theory and best practices, also giving them experiences on real projects.&lt;/p&gt; &lt;p&gt;A first, the base camp is on RX Communica. Later when the need (and also funding) are sufficient, we&amp;#39;ll have our own base, since we&amp;#39;ve agreed about no dominance, even for RX Communica and also my friend&amp;#39;s company. We don&amp;#39;t know yet the name. :)&lt;/p&gt; &lt;p&gt;Many thanks for you guys, especially from Indonesian OMG guys and my silent scream fellows on Kalimantan. Next, since this topic is no longer about .NET, I&amp;#39;ll migrate it to a new host, or maybe I&amp;#39;ll use any other free blog services for this time being. Or, do any of you, this blog&amp;#39;s loyal visitors, want me to report it here? I will, if you want to. But I&amp;#39;m afraid it&amp;#39;ll be less .NET content. :)&lt;/p&gt; &lt;p&gt;As Aerosmith sung:&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;font size="3"&gt;&amp;quot;It&amp;#39;s amazing! With a blink of an eye, we finally see the light...&amp;quot;&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Again, many thanks.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post: &lt;/strong&gt;&lt;a href="mailto:?body=Thought you might like this: http://geeks.netindonesia.net/blogs/eriawan/archive/2008/05/21/silent-scream-revisited-and-there-are-many-who-really-cares-about-our-education-silent-scream-part-two.aspx&amp;amp;subject=Silent scream revisited, and there are many who really cares about our education! (silent scream part two)" target="_blank" title="Send via email"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Mail.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.facebook.com/sharer.php?u=http://geeks.netindonesia.net/blogs/eriawan/archive/2008/05/21/silent-scream-revisited-and-there-are-many-who-really-cares-about-our-education-silent-scream-part-two.aspx&amp;amp;t=Silent+scream+revisited%2c+and+there+are+many+who+really+cares+about+our+education!+(silent+scream+part+two)" target="_blank" title="Submit Silent scream revisited, and there are many who really cares about our education! (silent scream part two) to DotNetKicks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Facebook.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://del.icio.us/post?url=http://geeks.netindonesia.net/blogs/eriawan/archive/2008/05/21/silent-scream-revisited-and-there-are-many-who-really-cares-about-our-education-silent-scream-part-two.aspx&amp;amp;title=Silent+scream+revisited%2c+and+there+are+many+who+really+cares+about+our+education!+(silent+scream+part+two)" target="_blank" title="Submit Silent scream revisited, and there are many who really cares about our education! (silent scream part two) to del.icio.us"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Delicious.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.digg.com/submit?url=http://geeks.netindonesia.net/blogs/eriawan/archive/2008/05/21/silent-scream-revisited-and-there-are-many-who-really-cares-about-our-education-silent-scream-part-two.aspx&amp;amp;phase=2" target="_blank" title="Submit Silent scream revisited, and there are many who really cares about our education! (silent scream part two) to digg.com"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Digg.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://geeks.netindonesia.net/blogs/eriawan/archive/2008/05/21/silent-scream-revisited-and-there-are-many-who-really-cares-about-our-education-silent-scream-part-two.aspx&amp;amp;title=Silent+scream+revisited%2c+and+there+are+many+who+really+cares+about+our+education!+(silent+scream+part+two)" target="_blank" title="Add Silent scream revisited, and there are many who really cares about our education! (silent scream part two) to Live Bookmarks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Live.16.gif" border="0"&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://geeks.netindonesia.net/aggbug.aspx?PostID=48157" width="1" height="1"&gt;</content><author><name>eriawan</name><uri>http://geeks.netindonesia.net/members/eriawan.aspx</uri></author><category term="education side of software development" scheme="http://geeks.netindonesia.net/blogs/eriawan/archive/tags/education+side+of+software+development/default.aspx" /></entry><entry><title>LINQ, Lambda expressions, functional programming, F#, C# 3.0, VB 9.0 and what the heck of these guys are related? (part two)</title><link rel="alternate" type="text/html" href="http://geeks.netindonesia.net/blogs/eriawan/archive/2008/05/13/linq-lambda-expressions-functional-programming-f-c-3-0-vb-9-0-and-what-the-heck-of-these-guys-are-related-part-two.aspx" /><id>http://geeks.netindonesia.net/blogs/eriawan/archive/2008/05/13/linq-lambda-expressions-functional-programming-f-c-3-0-vb-9-0-and-what-the-heck-of-these-guys-are-related-part-two.aspx</id><published>2008-05-13T09:02:00Z</published><updated>2008-05-13T09:02:00Z</updated><content type="html">&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;hr /&gt;  &lt;p&gt;Update: &lt;/p&gt; &lt;p&gt;May 147h, 2008: revisiting local type inference and more clarification on VB and C# feature comparison&lt;/p&gt; &lt;hr /&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h3&gt;Close view of Lambda Expressions and the journey to LINQ&lt;/h3&gt; &lt;p&gt;Now, what&amp;#39;s really a lambda?&lt;/p&gt; &lt;p&gt;According to MSDN Library that comes with VS 2008, a lambda expression is &amp;quot;&lt;i&gt;an anonymous function that can contain expressions and statements, and can be used to create delegates or expression tree types.&lt;/i&gt;&amp;quot; That&amp;#39;s a mouthful description. &lt;/p&gt; &lt;p&gt;First, an anonymous function. Function, in a sense of C# and VB.NET, is simply a method that returns any value. In VB, it&amp;#39;s more verbose, it uses keyword Function. It can be seen as a further development of anonymous method, only it&amp;#39;s more like syntactic sugar, since it&amp;#39;s more expressive.&lt;/p&gt; &lt;p&gt;Before enjoying this journey, C#3.0 and VB 9.0 new features are not LINQ alone. Many new features of C#3.0 and VB 9.0 forms (or compose) LINQ.&lt;/p&gt; &lt;p&gt;These are:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Query expression (or query comprehension)  &lt;/li&gt;&lt;li&gt;Local variable type inference  &lt;/li&gt;&lt;li&gt;Lambda expression  &lt;/li&gt;&lt;li&gt;Anonymous types  &lt;/li&gt;&lt;li&gt;Object initializers  &lt;/li&gt;&lt;li&gt;Expression tree&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Now grab your popcorn, relax and stay sit. :)&lt;/p&gt; &lt;h3&gt;Before Lambda expressions, and others, there has been impedance mismatch of data and object&lt;/h3&gt; &lt;p&gt;Now, let&amp;#39;s see... The roadmap to the query expression of LINQ. Yes, the journey behind it. You can also see the movie about it on LANGNET 2008 website in Talks section. But for those prefer to seek another way to crunch this concept, let me enlighten you. :)&lt;/p&gt; &lt;p&gt;It all starter when these things happened: &amp;quot;impedance mismatch of objects and relational data&amp;quot;.&lt;/p&gt; &lt;p&gt;Or, easily put by Anders Hejlsberg and others:&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;relationaldata != object&lt;/font&gt;&lt;/p&gt; &lt;p&gt;Remember XBase family software such as dBASE, FoxBase (then FoxPro and then Visual FoxPro and then &amp;quot;gone&amp;quot;)? Yes, they were neat, if you need to access data, it&amp;#39;s so simple. You got the feeling that the data was there, integrated with your language you&amp;#39;re coding. It&amp;#39;s also giving you compile time errors on query (although there were no such thing like Intellisense). They were also fun to use, since you&amp;#39;re concerning only on &amp;quot;what&amp;quot; data you want to display, instead of concerning &amp;quot;how&amp;quot;. And the database world has grown not just simple query, but it&amp;#39;s grown into a standard based SQL, at least ANSI SQL-92.&lt;/p&gt; &lt;p&gt;The separation grew larger, since the difference was more obvious: &lt;/p&gt; &lt;ol&gt; &lt;li&gt;Database is relational, object is hierarchical,  &lt;/li&gt;&lt;li&gt;Database has nullable types, object didn&amp;#39;t have it.  &lt;/li&gt;&lt;li&gt;Database has indexes, primary keys, object didn&amp;#39;t have it. But this was solved by major ORM, including #1 above, but not #2.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h3&gt;The long road to marry data and object&lt;/h3&gt; &lt;p&gt;Luckily, in CLR 2.0 (also C# 2.0 and VB 8.0) we have Nullable value type, which can be simply written int? in C# or Integer? in VB. Now, we know then, at least in .NET 2.0, we have matched types from database domain.&lt;/p&gt; &lt;p&gt;What about query in our programming language? It&amp;#39;s simply can&amp;#39;t match the power of the domain specific language such as SQL. Yet, we still need to work at the heart of our general programming language discipline first, the object itself.&lt;/p&gt; &lt;p&gt;The journey of those thinkers in Microsoft is illustrated below.&lt;/p&gt; &lt;p&gt;Suppose I want to query an arbitrary collection in .NET, and later I want to make it &amp;quot;fluent&amp;quot; and looks like query I used to know. Why? Because basically a table is a collection of rows, and this collection can be a CLR IEnumerable&amp;lt;T&amp;gt;.&lt;/p&gt; &lt;p&gt;Now, let&amp;#39;s do a simple query of available processes on my machine, and then print it on console.&lt;/p&gt; &lt;p&gt;In C# 2.0:&lt;/p&gt; &lt;div style="border:1px solid gray;margin:20px 0px 10px;padding:4px;overflow:auto;font-size:8pt;width:97.5%;cursor:text;max-height:200px;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt; &lt;div style="border-style:none;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;IEnumerable&amp;lt;Process&amp;gt; processess = Process.GetProcesses();&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;foreach&lt;/span&gt; (Process proc &lt;span&gt;in&lt;/span&gt; processess)&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;{&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;    Console.WriteLine(proc.ProcessName);&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;}&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;Console.ReadLine();&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;In VB 8.0:&lt;/p&gt;
&lt;div style="border:1px solid gray;margin:20px 0px 10px;padding:4px;overflow:auto;font-size:8pt;width:97.5%;cursor:text;max-height:200px;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;
&lt;div style="border-style:none;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;Dim&lt;/span&gt; processes &lt;span&gt;As&lt;/span&gt; IEnumerable(Of Process) = Process.GetProcesses()&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;For&lt;/span&gt; &lt;span&gt;Each&lt;/span&gt; proc &lt;span&gt;As&lt;/span&gt; Process &lt;span&gt;In&lt;/span&gt; processes&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;    Console.WriteLine(proc.ProcessName)&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;Next&lt;/span&gt;&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;Console.ReadLine()&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Oh, what about if I want to know which processes on my machine have size &amp;gt; 50MB? Sure I could add if statement that filter the proc in Processes before I display, like these:&lt;/p&gt;
&lt;p&gt;in C# 2.0:&lt;/p&gt;
&lt;div style="border:1px solid gray;margin:20px 0px 10px;padding:4px;overflow:auto;font-size:8pt;width:97.5%;cursor:text;max-height:200px;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;
&lt;div style="border-style:none;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;IEnumerable&amp;lt;Process&amp;gt; processess = Process.GetProcesses();&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;foreach&lt;/span&gt; (Process proc &lt;span&gt;in&lt;/span&gt; processess)&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;{&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;    &lt;span&gt;if&lt;/span&gt; (proc.WorkingSet64 &amp;gt; (50 * 1024 * 1024))&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;        Console.WriteLine(proc.ProcessName);&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;}&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;Console.ReadLine();&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;in VB 8.0:&lt;/p&gt;
&lt;div style="border:1px solid gray;margin:20px 0px 10px;padding:4px;overflow:auto;font-size:8pt;width:97.5%;cursor:text;max-height:200px;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;
&lt;div style="border-style:none;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;Dim&lt;/span&gt; processes &lt;span&gt;As&lt;/span&gt; IEnumerable(Of Process) = Process.GetProcesses()&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;For&lt;/span&gt; &lt;span&gt;Each&lt;/span&gt; proc &lt;span&gt;As&lt;/span&gt; Process &lt;span&gt;In&lt;/span&gt; processes&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;    &lt;span&gt;If&lt;/span&gt; proc.WorkingSet64 &amp;gt; (50 * 1024 * 1024) &lt;span&gt;Then&lt;/span&gt;&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;        Console.WriteLine(proc.ProcessName)&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;    &lt;span&gt;End&lt;/span&gt; &lt;span&gt;If&lt;/span&gt;&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;Next&lt;/span&gt;&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;Console.ReadLine()&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;But, this is the query that I want. A query is not like these. I decide to implement Where as a method. But how do I pass expression to be later evaluated and spawned as iterators? Fortunately, C# 2.0 has a new keyword of C# &amp;quot;yield&amp;quot; to have the compiler generates iterators. But sadly enough, VB 8.0 doesn&amp;#39;t have it. But you can code it in C# and use it in VB anyway.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;b&gt;Note: This is where the language features of C# and VB seems having unfair advantages: the yield keyword is only available on C#. Why doesn&amp;#39;t MS include this in VB? I can&amp;#39;t find the reason anywhere, even on MSDN.&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;After I think for a while, I decide I have to put these into a method with accept generic. Ah, this is a suitable implementation for .NET 2.0 anonymous generic delegate. I think I want a class that contains method that can be called anywhere, and this is definitely a static class.&lt;/p&gt;
&lt;p&gt;So, I modified my code to add this class, let&amp;#39;s just call it Query. And the method to filter, let&amp;#39;s just call it Where. It&amp;#39;s perfectly suited for our intent: to filter out elements/items and make new collection with filtered items.&lt;/p&gt;
&lt;p&gt;But first, I have to make declaration/definition of the delegate:&lt;/p&gt;
&lt;div&gt;
&lt;div style="border-style:none;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;public&lt;/span&gt; &lt;span&gt;delegate&lt;/span&gt; TResult Func&amp;lt;T,TResult&amp;gt;(T arg);&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;And now, here&amp;#39;s the resulting Query class with Where method in C# 2.0:&lt;/p&gt;
&lt;div style="border:1px solid gray;margin:20px 0px 10px;padding:4px;overflow:auto;font-size:8pt;width:97.5%;cursor:text;max-height:200px;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;height:230px;"&gt;
&lt;div style="border-style:none;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;namespace&lt;/span&gt; TrialLINQinNET20&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;{&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;    &lt;span&gt;public&lt;/span&gt; &lt;span&gt;delegate&lt;/span&gt; TResult Func&amp;lt;T,TResult&amp;gt;(T arg);&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt; &lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;    &lt;span&gt;public&lt;/span&gt; &lt;span&gt;static&lt;/span&gt; &lt;span&gt;class&lt;/span&gt; Query&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;    {&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;        &lt;span&gt;public&lt;/span&gt; &lt;span&gt;static&lt;/span&gt; IEnumerable&amp;lt;T&amp;gt; Where&amp;lt;T&amp;gt;(IEnumerable&amp;lt;T&amp;gt; items,Func&amp;lt;T,&lt;span&gt;bool&lt;/span&gt;&amp;gt; predicate)&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;        {&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;            &lt;span&gt;foreach&lt;/span&gt; (T item &lt;span&gt;in&lt;/span&gt; items)&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;            {&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;                &lt;span&gt;if&lt;/span&gt; (predicate(item))&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;                    &lt;span&gt;yield&lt;/span&gt; &lt;span&gt;return&lt;/span&gt; item;&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;            }&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;        }&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;    }&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Now, my query somehow looks nicer: &lt;/p&gt;
&lt;p&gt;In C# 2.0:&lt;/p&gt;
&lt;div style="border:1px solid gray;margin:20px 0px 10px;padding:4px;overflow:auto;font-size:8pt;width:97.5%;cursor:text;max-height:200px;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;
&lt;div style="border-style:none;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;IEnumerable&amp;lt;Process&amp;gt; processess = Process.GetProcesses();&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;IEnumerable&amp;lt;Process&amp;gt; listproc = Query.Where(processess, &lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;    &lt;span&gt;delegate&lt;/span&gt;(Process p) { &lt;span&gt;return&lt;/span&gt; p.WorkingSet64 &amp;gt; (50 * 1024 * 1024); });&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;foreach&lt;/span&gt; (Process proc &lt;span&gt;in&lt;/span&gt; processess)&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;{&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;    Console.WriteLine(proc.ProcessName);&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;}&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;Console.ReadLine();&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;In VB 8.0, I can&amp;#39;t. It simply doesn&amp;#39;t support anonymous functions, and this including anonymous delegate.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;b&gt;Note: This is another aspect of VB 8.0 having unfair advantages: the anonymous delegate/function is only available on C# 2.0. Another &amp;quot;why doesn&amp;#39;t MS include this in VB&amp;quot;. But in VB 9.0 it&amp;#39;s being done as a lambda expression in a more verbose way.&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Now, I have created filter or &amp;quot;map&amp;quot; in functional programming terms. I passed the predicate as expressed in delegate.&lt;/p&gt;
&lt;p&gt;To tell you the truth, I copy the declaration of Func&amp;lt;T,TResult&amp;gt; delegate from MSDN Library.&lt;/p&gt;
&lt;p&gt;What about Select? If you look at the base theory of SQL, it&amp;#39;s called a projection. As a matter of fact, projection, filter, and others are essentially part of relational algebra. And it&amp;#39;s fun to know that it&amp;#39;s part of set theory, which we had in elementary school. :)&lt;/p&gt;
&lt;p&gt;Now, let&amp;#39;s create a select method. Basically, it projects a collection of type into other collection of type. It can be the same, but it can be different. It looks almost like Where, but I have to change and modify the signature of select method to be able to map IEnumerable&amp;lt;T&amp;gt; to another type.&lt;/p&gt;
&lt;p&gt;This is the select method:&lt;/p&gt;
&lt;div&gt;
&lt;div style="border-style:none;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;public&lt;/span&gt; &lt;span&gt;static&lt;/span&gt; IEnumerable&amp;lt;U&amp;gt; Select&amp;lt;T, U&amp;gt;(IEnumerable&amp;lt;T&amp;gt; source, Func&amp;lt;T, U&amp;gt; selector)&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;{&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;    &lt;span&gt;foreach&lt;/span&gt; (T var &lt;span&gt;in&lt;/span&gt; source)&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;    {&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;        &lt;span&gt;yield&lt;/span&gt; &lt;span&gt;return&lt;/span&gt; selector(var);&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;    }&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Yes. Now, if I want to display (and select) only the ProcessName of the running process that has taken more than 50MB of my precious RAM, the code will be:&lt;/p&gt;
&lt;div style="border:1px solid gray;margin:20px 0px 10px;padding:4px;overflow:auto;font-size:8pt;width:97.5%;cursor:text;max-height:200px;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;
&lt;div style="border-style:none;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;IEnumerable&amp;lt;Process&amp;gt; processess = Process.GetProcesses();&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;IEnumerable&amp;lt;Process&amp;gt; listproc = Query.Where(processess, &lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;    &lt;span&gt;delegate&lt;/span&gt;(Process p) { &lt;span&gt;return&lt;/span&gt; p.WorkingSet64 &amp;gt; (50 * 1024 * 1024); });&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;IEnumerable&amp;lt;String&amp;gt; procnames = Query.Select&amp;lt;Process, String&amp;gt;(listproc,&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;    &lt;span&gt;delegate&lt;/span&gt;(Process p) { &lt;span&gt;return&lt;/span&gt; p.ProcessName; });&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;foreach&lt;/span&gt; (String procname &lt;span&gt;in&lt;/span&gt; procnames)&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;{&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;    Console.WriteLine(procname);&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;}&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;Console.ReadLine();&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Now... I see the class and the code is simpler to be read. I can map a collection of Process into a collection of String, since I only need to dump the ProcessName.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;i&gt;Please note the sequence here: I need to filter it first, then map it. If I map first and then filter it, I&amp;#39;ll loose some information about the data (type metadata) in the collection. So where comes before select! This is different from SQL, since SQL permits select first and then filter it, and then take from a pool of data. In OOP, we have to know from what data we want to use, filter it, and then map it.&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;SQL seems to cook up structural type before &amp;quot;from&amp;quot; was taken place.&lt;/p&gt;
&lt;h3&gt;Local type inference revisited...&lt;/h3&gt;
&lt;p&gt;Hmm... This is somehow satisfactory, but it&amp;#39;s full of syntactical noises, where I have to type full type declaration, especially if I have to type long type declaration of generics.&lt;/p&gt;
&lt;p&gt;The variable&amp;#39;s type on the left side of declaration is already known after I initialized or have been assigned with a value.&lt;/p&gt;
&lt;p&gt;Now this is where I begin to use C# 3.0, .NET 3.5, and Visual Studio 2008, since it can infer the type of local variable. Only, it means available only on local variable of method scope. This is why it&amp;#39;s simply named &amp;quot;local type inference&amp;quot;.&lt;/p&gt;
&lt;p&gt;Instead of writing this:&lt;/p&gt;
&lt;p&gt;in C# 2.0:&lt;/p&gt;
&lt;div&gt;
&lt;div style="border-style:none;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;Dictionary&amp;lt;String, List&amp;lt;Int32&amp;gt;&amp;gt; integerdict = &lt;span&gt;new&lt;/span&gt; Dictionary&amp;lt;&lt;span&gt;string&lt;/span&gt;, List&amp;lt;&lt;span&gt;int&lt;/span&gt;&amp;gt;&amp;gt;();&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;in VB 8.0 it&amp;#39;s somehow shorter:&lt;/p&gt;
&lt;div&gt;
&lt;div style="border-style:none;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;Dim&lt;/span&gt; integerdict &lt;span&gt;As&lt;/span&gt; &lt;span&gt;New&lt;/span&gt; Dictionary(Of &lt;span&gt;String&lt;/span&gt;, List(Of &lt;span&gt;Integer&lt;/span&gt;))()&lt;/pre&gt;&lt;/div&gt;And C# 3.0 brings you:&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;div style="border-style:none;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;var integerdict = &lt;span&gt;new&lt;/span&gt; Dictionary&amp;lt;&lt;span&gt;string&lt;/span&gt;, List&amp;lt;&lt;span&gt;int&lt;/span&gt;&amp;gt;&amp;gt;();&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Again, it means give integerdict the type of the right hand assignment or expression has. It&amp;#39;s neat, and it&amp;#39;s simpler. &lt;/p&gt;
&lt;p&gt;It&amp;#39;s still statically typed, since by then the type of integerdict is always Dictionary&amp;lt;string, List&amp;lt;int&amp;gt;&amp;gt;. Yes, it looks like dynamic language, but it&amp;#39;s not dynamically typed, and it&amp;#39;s not the same as Variant in VB or object in Javascript.&lt;/p&gt;
&lt;p&gt;Now, in C# 3.0, my little query class and its implementation is:&lt;/p&gt;
&lt;div&gt;
&lt;div style="border-style:none;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;var processess = Process.GetProcesses();&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;var listproc = Query.Where(processess, &lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;    &lt;span&gt;delegate&lt;/span&gt;(Process p) { &lt;span&gt;return&lt;/span&gt; p.WorkingSet64 &amp;gt; (50 * 1024 * 1024); });&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;var procnames = Query.Select&amp;lt;Process, String&amp;gt;(listproc, &lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;    &lt;span&gt;delegate&lt;/span&gt;(Process p) { &lt;span&gt;return&lt;/span&gt; p.ProcessName; });&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;foreach&lt;/span&gt; (String procname &lt;span&gt;in&lt;/span&gt; procnames)&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;{&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;    Console.WriteLine(procname);&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;}&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;Console.ReadLine(); &lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Pretty neat, isn&amp;#39;t it? But this is not query. In real query, I just can combine Where and Select. So, the procnames is a select of filtered data of process.WorkingSet64 &amp;gt; 50MB. How do I do this?&lt;/p&gt;
&lt;p&gt;Then I decide to just passing the where to my projection:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;div style="border-style:none;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;var processess = Process.GetProcesses();&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;var procnames = Query.&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;    Select&amp;lt;Process, String&amp;gt;(Query.Where(processess,&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;    &lt;span&gt;delegate&lt;/span&gt;(Process p) { &lt;span&gt;return&lt;/span&gt; p.WorkingSet64 &amp;gt; (50 * 1024 * 1024); }),&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;    &lt;span&gt;delegate&lt;/span&gt;(Process p) { &lt;span&gt;return&lt;/span&gt; p.ProcessName; });&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;foreach&lt;/span&gt; (String procname &lt;span&gt;in&lt;/span&gt; procnames)&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;{&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;    Console.WriteLine(procname);&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;}&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;Console.ReadLine();&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;But now it looks confusing. In reality, I should filter it first and then map it. Do where first, and then select it. The execution order is correct, but I can&amp;#39;t just make it into a sequences.&lt;/p&gt;
&lt;p&gt;I was thinking about extending IEnumerable to be able to do query, something like IQuery but it has to be concrete class, not an interface. But then again, it&amp;#39;s not so practical.&lt;/p&gt;
&lt;p&gt;But I think it would be nice to have this notion: procname.Where(...).Select(...) instead of having to combine Select and Where just like above. In programming buzzword, this way of thinking is called &amp;quot;fluent&amp;quot;, since the data/value passed flows like fluid, although it&amp;#39;s still to be arranged in a sequence.&lt;/p&gt;
&lt;p&gt;Simple sample of fluent thinking:&lt;/p&gt;
&lt;div style="border:1px solid gray;margin:20px 0px 10px;padding:4px;overflow:auto;font-size:8pt;width:97.5%;cursor:text;max-height:200px;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;
&lt;div style="border-style:none;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;String name=&lt;span&gt;&amp;quot;Eriawan  &amp;quot;&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;String upperstring = name.ToUpper().Trim();&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;See? The string is passed. Now, it&amp;#39;s more fluid.&lt;/div&gt;
&lt;h3&gt;Ahhh, it&amp;#39;s &amp;quot;fluent&amp;quot; now&lt;/h3&gt;
&lt;p&gt;Luckily, there&amp;#39;s this feature: method extension in C# 3.0 and VB 9.0. I can just &amp;quot;extend&amp;quot; existing class especially &amp;quot;locked&amp;quot; class or classes which has modifier of sealed in C# or NotInheritable in VB. &lt;/p&gt;
&lt;p&gt;How to do this?&lt;/p&gt;
&lt;p&gt;In C# 3.0:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create static class with static methods, with the first parameter is the type you want to add method.&lt;/li&gt;
&lt;li&gt;Put &amp;quot;this&amp;quot; keyword in the first parameter of the static method&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;In VB 9.0:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create new module&lt;/li&gt;
&lt;li&gt;Create method (either Sub or Function) with Public modifier and give the method &amp;lt;Extension()&amp;gt; attribute&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;And you&amp;#39;re on!&lt;/p&gt;
&lt;p&gt;So, my Query class in C# 3.0 would be:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;div style="border-style:none;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;public&lt;/span&gt; &lt;span&gt;static&lt;/span&gt; &lt;span&gt;class&lt;/span&gt; Query&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;{&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;    &lt;span&gt;public&lt;/span&gt; &lt;span&gt;static&lt;/span&gt; IEnumerable&amp;lt;T&amp;gt; Where&amp;lt;T&amp;gt;(&lt;span&gt;this&lt;/span&gt; IEnumerable&amp;lt;T&amp;gt; items, Func&amp;lt;T, &lt;span&gt;bool&lt;/span&gt;&amp;gt; predicate)&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;    {&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;        &lt;span&gt;foreach&lt;/span&gt; (T item &lt;span&gt;in&lt;/span&gt; items)&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;        {&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;            &lt;span&gt;if&lt;/span&gt; (predicate(item))&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;                &lt;span&gt;yield&lt;/span&gt; &lt;span&gt;return&lt;/span&gt; item;&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;        }&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;    }&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;    &lt;span&gt;public&lt;/span&gt; &lt;span&gt;static&lt;/span&gt; IEnumerable&amp;lt;U&amp;gt; Select&amp;lt;T, U&amp;gt;(&lt;span&gt;this&lt;/span&gt; IEnumerable&amp;lt;T&amp;gt; source, Func&amp;lt;T, U&amp;gt; selector)&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;    {&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;        &lt;span&gt;foreach&lt;/span&gt; (T item &lt;span&gt;in&lt;/span&gt; source)&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;        {&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;            &lt;span&gt;yield&lt;/span&gt; &lt;span&gt;return&lt;/span&gt; selector(item);&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;        }&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;        &lt;span&gt;//return source;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;    }&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Now, the implementations will be:&lt;/p&gt;
&lt;div&gt;
&lt;div style="border-style:none;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;var processess = Process.GetProcesses();&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;var procnames = processess&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;    .Where(&lt;span&gt;delegate&lt;/span&gt;(Process p) { &lt;span&gt;return&lt;/span&gt; p.WorkingSet64 &amp;gt; (50 * 1024 * 1024); })&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;    .Select(&lt;span&gt;delegate&lt;/span&gt;(Process p) { &lt;span&gt;return&lt;/span&gt; p.ProcessName; });&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;foreach&lt;/span&gt; (String procname &lt;span&gt;in&lt;/span&gt; procnames)&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;{&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;    Console.WriteLine(procname);&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;}&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;Console.ReadLine();&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Yayy! It&amp;#39;s more fluent! But... I think it&amp;#39;s still noisy. Just look at the delegate syntax on Where and Select. It&amp;#39;s simply a function with a parameter and an expression. I want to be more expressive.&lt;/p&gt;
&lt;h3&gt;Now is the close view of Lambda&lt;/h3&gt;
&lt;p&gt;Now, this is where Lambda Expression comes to help. Lambda expression, as Norman said in commenting blog entry :), is just basically writing inline function. Lambda expression is just a simple synonym of Lambda Calculus, which is one of the basic of functional programming.&lt;/p&gt;
&lt;p&gt;Let&amp;#39;s just go down to transform our delegate parameters above, into these:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;div style="border-style:none;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;var procnames = processess&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;    .Where((Process p) =&amp;gt; { &lt;span&gt;return&lt;/span&gt; p.WorkingSet64 &amp;gt; (50 * 1024 * 1024); })&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;    .Select((Process p) =&amp;gt; { &lt;span&gt;return&lt;/span&gt; p.ProcessName; });&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;The fat arrow &amp;quot;=&amp;gt;&amp;quot; is &amp;quot;goes to&amp;quot;. It can be simplified as inline function that has parameter p and then&amp;nbsp; &amp;quot;p -&amp;gt; p.ProcessName&amp;quot;.&lt;/p&gt;
&lt;p&gt;Thanks to local type inference, the lambda parameter type can be omitted:&lt;/p&gt;
&lt;div&gt;
&lt;div style="border-style:none;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;var procnames = processess&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;    .Where((p) =&amp;gt; { &lt;span&gt;return&lt;/span&gt; p.WorkingSet64 &amp;gt; (50 * 1024 * 1024); })&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;    .Select((p) =&amp;gt; { &lt;span&gt;return&lt;/span&gt; p.ProcessName; });&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;If the parameter is just one, the parentheses () can be omitted too. Also, since the return value is just a simple expression, I can just make it more expressive and looks more functional instead of writing an imperative return statement.&lt;/p&gt;
&lt;p&gt;Now the code above looks like this:&lt;/p&gt;
&lt;div&gt;
&lt;div style="border-style:none;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;var procnames = processess&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;    .Where(p =&amp;gt; p.WorkingSet64 &amp;gt; (50 * 1024 * 1024))&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;    .Select(p =&amp;gt; p.ProcessName);&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Now, the noises are gone. My code looks functional!&lt;/p&gt;
&lt;p&gt;But it&amp;#39;s still not the query I used to be, I know it&amp;#39;s closer. It would be nice to have select and where as keywords, and be integrated into our code.&lt;/p&gt;
&lt;p&gt;Now, C# 3.0 and VB 9.0 include this new feature: query comprehension.&lt;/p&gt;
&lt;h3&gt;Query that is so integrated into our code: Query comprehension&lt;/h3&gt;
&lt;p&gt;The code before now is transformed using this query comprehension into:&lt;/p&gt;
&lt;div&gt;
&lt;div style="border-style:none;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;var procnames = from p &lt;span&gt;in&lt;/span&gt; processess&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;                &lt;span&gt;where&lt;/span&gt; p.WorkingSet64 &amp;gt; (50 * 1024 * 1024)&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;                select p.ProcessName;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;and in VB 9.0:&lt;/p&gt;
&lt;div&gt;
&lt;div style="border-style:none;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;Dim&lt;/span&gt; procnames = From p &lt;span&gt;As&lt;/span&gt; Process &lt;span&gt;In&lt;/span&gt; Process.GetProcesses() _&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;            Where p.WorkingSet64 &amp;gt; (50 * 1024 * 1024) _&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;            &lt;span&gt;Select&lt;/span&gt; p.ProcessName&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;But the LINQ wave doesn&amp;#39;t stop here! There are many other discrete cool features in C# 3.0 and VB 9.0 that forms LINQ.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fgeeks.netindonesia.net%2fblogs%2feriawan%2farchive%2f2008%2f05%2f13%2flinq-lambda-expressions-functional-programming-f-c-3-0-vb-9-0-and-what-the-heck-of-these-guys-are-related-part-two.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fgeeks.netindonesia.net%2fblogs%2feriawan%2farchive%2f2008%2f05%2f13%2flinq-lambda-expressions-functional-programming-f-c-3-0-vb-9-0-and-what-the-heck-of-these-guys-are-related-part-two.aspx" alt="kick it on DotNetKicks.com" border="0" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;(to be continued...)&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post: &lt;/strong&gt;&lt;a href="mailto:?body=Thought you might like this: http://geeks.netindonesia.net/blogs/eriawan/archive/2008/05/13/linq-lambda-expressions-functional-programming-f-c-3-0-vb-9-0-and-what-the-heck-of-these-guys-are-related-part-two.aspx&amp;amp;subject=LINQ, Lambda expressions, functional programming, F#, C# 3.0, VB 9.0 and what the heck of these guys are related? (part two)" target="_blank" title="Send via email"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Mail.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.facebook.com/sharer.php?u=http://geeks.netindonesia.net/blogs/eriawan/archive/2008/05/13/linq-lambda-expressions-functional-programming-f-c-3-0-vb-9-0-and-what-the-heck-of-these-guys-are-related-part-two.aspx&amp;amp;t=LINQ%2c+Lambda+expressions%2c+functional+programming%2c+F%23%2c+C%23+3.0%2c+VB+9.0+and+what+the+heck+of+these+guys+are+related%3f+(part+two)" target="_blank" title="Submit LINQ, Lambda expressions, functional programming, F#, C# 3.0, VB 9.0 and what the heck of these guys are related? (part two) to DotNetKicks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Facebook.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://del.icio.us/post?url=http://geeks.netindonesia.net/blogs/eriawan/archive/2008/05/13/linq-lambda-expressions-functional-programming-f-c-3-0-vb-9-0-and-what-the-heck-of-these-guys-are-related-part-two.aspx&amp;amp;title=LINQ%2c+Lambda+expressions%2c+functional+programming%2c+F%23%2c+C%23+3.0%2c+VB+9.0+and+what+the+heck+of+these+guys+are+related%3f+(part+two)" target="_blank" title="Submit LINQ, Lambda expressions, functional programming, F#, C# 3.0, VB 9.0 and what the heck of these guys are related? (part two) to del.icio.us"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Delicious.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.digg.com/submit?url=http://geeks.netindonesia.net/blogs/eriawan/archive/2008/05/13/linq-lambda-expressions-functional-programming-f-c-3-0-vb-9-0-and-what-the-heck-of-these-guys-are-related-part-two.aspx&amp;amp;phase=2" target="_blank" title="Submit LINQ, Lambda expressions, functional programming, F#, C# 3.0, VB 9.0 and what the heck of these guys are related? (part two) to digg.com"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Digg.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://geeks.netindonesia.net/blogs/eriawan/archive/2008/05/13/linq-lambda-expressions-functional-programming-f-c-3-0-vb-9-0-and-what-the-heck-of-these-guys-are-related-part-two.aspx&amp;amp;title=LINQ%2c+Lambda+expressions%2c+functional+programming%2c+F%23%2c+C%23+3.0%2c+VB+9.0+and+what+the+heck+of+these+guys+are+related%3f+(part+two)" target="_blank" title="Add LINQ, Lambda expressions, functional programming, F#, C# 3.0, VB 9.0 and what the heck of these guys are related? (part two) to Live Bookmarks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Live.16.gif" border="0"&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://geeks.netindonesia.net/aggbug.aspx?PostID=47466" width="1" height="1"&gt;</content><author><name>eriawan</name><uri>http://geeks.netindonesia.net/members/eriawan.aspx</uri></author><category term="Functional programming" scheme="http://geeks.netindonesia.net/blogs/eriawan/archive/tags/Functional+programming/default.aspx" /><category term="LINQ" scheme="http://geeks.netindonesia.net/blogs/eriawan/archive/tags/LINQ/default.aspx" /></entry><entry><title>A full speed ahead of 3G in this afternoon! Is it real?</title><link rel="alternate" type="text/html" href="http://geeks.netindonesia.net/blogs/eriawan/archive/2008/03/29/a-full-speed-ahead-of-3g-in-this-afternoon-is-it-real.aspx" /><id>http://geeks.netindonesia.net/blogs/eriawan/archive/2008/03/29/a-full-speed-ahead-of-3g-in-this-afternoon-is-it-real.aspx</id><published>2008-03-29T05:42:55Z</published><updated>2008-03-29T05:42:55Z</updated><content type="html">&lt;p&gt;I was in the middle of downloading screencast from Channel9 of MSDN and also finishing my part 2 blog. &lt;/p&gt; &lt;p&gt;To my surprise, the 3G connection went so fast! Many thanks to my XL 3G for this connection:&lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.netindonesia.net/blogs/eriawan/WindowsLiveWriter/Afullspeedaheadof3GinthisafternoonIsitre_B18A/image_4.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="269" alt="image" src="http://geeks.netindonesia.net/blogs/eriawan/WindowsLiveWriter/Afullspeedaheadof3GinthisafternoonIsitre_B18A/image_thumb_1.png" width="644" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Before this, I always complained to them about how slow it was.&lt;/p&gt; &lt;p&gt;But right after that, I test the real speed using intel bandwidth test:&lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.netindonesia.net/blogs/eriawan/WindowsLiveWriter/Afullspeedaheadof3GinthisafternoonIsitre_B18A/image_6.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="444" alt="image" src="http://geeks.netindonesia.net/blogs/eriawan/WindowsLiveWriter/Afullspeedaheadof3GinthisafternoonIsitre_B18A/image_thumb_2.png" width="644" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;It looks like I only have a quick surge of 3G speed. Well.. For this speed, it&amp;#39;s still slower thean my ISDN connection at home. But, anyway, it&amp;#39;s fun to test the real speed. Also, maybe I should sample more test.&lt;/p&gt; &lt;p&gt;I have tested it again many times, and this is what I got an average of 72kbps out of 5 times testing:&lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.netindonesia.net/blogs/eriawan/WindowsLiveWriter/Afullspeedaheadof3GinthisafternoonIsitre_B18A/image_8.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="483" alt="image" src="http://geeks.netindonesia.net/blogs/eriawan/WindowsLiveWriter/Afullspeedaheadof3GinthisafternoonIsitre_B18A/image_thumb_3.png" width="644" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;So, what I got is a quick surge of 3G speed. Has any of you experienced this phenomenon too?&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post: &lt;/strong&gt;&lt;a href="mailto:?body=Thought you might like this: http://geeks.netindonesia.net/blogs/eriawan/archive/2008/03/29/a-full-speed-ahead-of-3g-in-this-afternoon-is-it-real.aspx&amp;amp;subject=A full speed ahead of 3G in this afternoon! Is it real?" target="_blank" title="Send via email"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Mail.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.facebook.com/sharer.php?u=http://geeks.netindonesia.net/blogs/eriawan/archive/2008/03/29/a-full-speed-ahead-of-3g-in-this-afternoon-is-it-real.aspx&amp;amp;t=A+full+speed+ahead+of+3G+in+this+afternoon!+Is+it+real%3f" target="_blank" title="Submit A full speed ahead of 3G in this afternoon! Is it real? to DotNetKicks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Facebook.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://del.icio.us/post?url=http://geeks.netindonesia.net/blogs/eriawan/archive/2008/03/29/a-full-speed-ahead-of-3g-in-this-afternoon-is-it-real.aspx&amp;amp;title=A+full+speed+ahead+of+3G+in+this+afternoon!+Is+it+real%3f" target="_blank" title="Submit A full speed ahead of 3G in this afternoon! Is it real? to del.icio.us"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Delicious.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.digg.com/submit?url=http://geeks.netindonesia.net/blogs/eriawan/archive/2008/03/29/a-full-speed-ahead-of-3g-in-this-afternoon-is-it-real.aspx&amp;amp;phase=2" target="_blank" title="Submit A full speed ahead of 3G in this afternoon! Is it real? to digg.com"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Digg.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://geeks.netindonesia.net/blogs/eriawan/archive/2008/03/29/a-full-speed-ahead-of-3g-in-this-afternoon-is-it-real.aspx&amp;amp;title=A+full+speed+ahead+of+3G+in+this+afternoon!+Is+it+real%3f" target="_blank" title="Add A full speed ahead of 3G in this afternoon! Is it real? to Live Bookmarks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Live.16.gif" border="0"&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://geeks.netindonesia.net/aggbug.aspx?PostID=43492" width="1" height="1"&gt;</content><author><name>eriawan</name><uri>http://geeks.netindonesia.net/members/eriawan.aspx</uri></author><category term="Personal of me" scheme="http://geeks.netindonesia.net/blogs/eriawan/archive/tags/Personal+of+me/default.aspx" /><category term="3G" scheme="http://geeks.netindonesia.net/blogs/eriawan/archive/tags/3G/default.aspx" /></entry><entry><title>LINQ, Lambda expressions, functional programming, F#, C# 3.0, VB 9.0 and what the heck of these guys are related? (part one)</title><link rel="alternate" type="text/html" href="http://geeks.netindonesia.net/blogs/eriawan/archive/2008/03/22/linq-lambda-expressions-functional-programming-f-c-3-0-vb-9-0-and-what-the-heck-of-these-guys-are-related-part-one.aspx" /><id>http://geeks.netindonesia.net/blogs/eriawan/archive/2008/03/22/linq-lambda-expressions-functional-programming-f-c-3-0-vb-9-0-and-what-the-heck-of-these-guys-are-related-part-one.aspx</id><published>2008-03-22T22:33:00Z</published><updated>2008-03-22T22:33:00Z</updated><content type="html">&lt;p&gt;Yeah. I know. It&amp;#39;s quite noisy, either in INDC&amp;#39;s mailing list, or in many web that says cool features in VS 2008.&lt;/p&gt;
&lt;p&gt;But let me straighthen up first, why I choose LINQ first? It&amp;#39;s because becoming hot buzzwords number one. And it can get many wrong views.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;UPDATE: &lt;/p&gt;
&lt;p&gt;27th March, 2008: fixing typos, code samples are now in C# 3.0 and VB 9.0, not just C# 3.0.&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;LINQ views and what comes in a single query of LINQ&lt;/h2&gt;
&lt;p&gt;Ah. Language INtegrated Query. Everyone has been becoming crowded and many shouting at me, &amp;quot;I know it! Of course I know!&amp;quot; But many don&amp;#39;t know, it&amp;#39;s not just a new essential features of VS 2008, but it&amp;#39;s more like one of new features of .NET 3.5.&lt;/p&gt;
&lt;p&gt;I also often heard many mumbles that said, &amp;quot;LINQ is the only way&amp;quot;,&amp;quot;LINQ is the newest concept from Microsoft&amp;#39;s family of programming languages&amp;quot;, blah, blah, blah, and many leads to almost false &lt;a href="http://en.wikipedia.org/wiki/Altruism"&gt;altruism&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It can be a sad fact for us but it&amp;#39;s true, &lt;b&gt;&lt;i&gt;LINQ is not all that new&lt;/i&gt;&lt;/b&gt;! In &amp;quot;C Omega&amp;quot;, or Cω, the notion that you can include SQL query such as Select is already available before C# 3.0. The name itself is new. Yes, the term LINQ is new, but the concept behind it it&amp;#39;s not new. But why I say, not all? The concept of bringing Lambda expressions to LINQ queries are new. I&amp;#39;ll try to explain it after this LINQ views.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;i&gt;LINQ it&amp;#39;s not exclusive of .NET 3.5, though&lt;/i&gt;&lt;/b&gt;. Because it&amp;#39;s simply a set of new language features capabilities that built into the fabric of C# 3.0 and VB 9.0 language specifications in terms of new keywords and new syntaxes. Most of all, it&amp;#39;s simply a &lt;a href="http://en.wikipedia.org/wiki/Syntactic_sugar"&gt;syntactic sugar&lt;/a&gt;, to ease all of us writing codes especially when dealing with SQL query language syntaxes. And don&amp;#39;t forget one thing, .NET 3.5 is still .NET 2.0 lies beneath. So, .NET 3.5 was built on top of .NET 2.0 added with .NET 3.0. It&amp;#39;s not exclusive, right?&lt;/p&gt;
&lt;p&gt;Since LINQ is not exclusive of .NET 3.5, it&amp;#39;s also implied that you can still can do your hard work in doing querying data. Still, you can do many things in &amp;quot;.NET 2.0 ways&amp;quot;. But we, as software developers, tend to be more productive, and can be we&amp;#39;re obligated to be always more productive and also more innovative in doing our core responsibilities, solving business problems and coding.&lt;/p&gt;
&lt;p&gt;So, I strongly suggest that you use LINQ if you have Visual Studio 2008, and please upgrade to VS 2008 if you have 2005 since your new learning curve is not that new. Why? I&amp;#39;m not a strong opponent of using LINQ. In fact, I (again) strongly suggest you to use LINQ as appropriate and wisely for your development. It&amp;#39;s helpful. It&amp;#39;s not a must, but it eases our coding, and also promoting easier to read and then to code (can be the other way around). &lt;/p&gt;
&lt;p&gt;Why? Because you&amp;#39;ll get compile time checking and Intellisense in your query syntaxes! This means less error, more focus to the query logic. Also another why is, it&amp;#39;s a way to compose pieces of arcane nested select queries, which can have many side effects. This concept comes from functional programming, and later I&amp;#39;ll explain this after LINQ stuffs.&lt;/p&gt;
&lt;p&gt;But be prepared to dive the concept behind LINQ uses first. You have to know it. I strongly suiggest you to learn it also. There are some facets of many programming paradigm &amp;quot;hidden&amp;quot; from us!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;A quick LINQ to SQL&lt;/h3&gt;
&lt;p&gt;First, easier to code. Why? Let me give you a basic example of LINQ querying a LINQ to SQL (formerly DLINQ)generated class that represents Customers, from our good old sample database of Northwind (it&amp;#39;s not installled by default in SQL Server 2005, you can get it &lt;a href="http://www.microsoft.com/downloads/info.aspx?na=22&amp;amp;p=8&amp;amp;SrcDisplayLang=en&amp;amp;SrcCategoryId=&amp;amp;SrcFamilyId=&amp;amp;u=%2fdownloads%2fdetails.aspx%3fFamilyID%3d06616212-0356-46a0-8da2-eebc53a68034%26DisplayLang%3den"&gt;here&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;These are quick step by step to get your feet wet quickly:&lt;/p&gt;
&lt;p&gt;In this sample, I create a LINQ to SQL classes and name it Northwind.dbml&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.netindonesia.net/blogs/eriawan/WindowsLiveWriter/LINQLambdaexp.0andwhattheheckoftheseguys_279/vcsharp2008express_itemtemplate_2.jpg"&gt;&lt;img src="http://geeks.netindonesia.net/blogs/eriawan/WindowsLiveWriter/LINQLambdaexp.0andwhattheheckoftheseguys_279/vcsharp2008express_itemtemplate_thumb.jpg" style="border-width:0px;" alt="vcsharp2008express_itemtemplate" width="644" border="0" height="388" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Now let&amp;#39;s use this new classes, but please pay attention that you have to understand what really is &amp;quot;LINQ to SQL Classes&amp;quot; is.&lt;/p&gt;
&lt;p&gt;Basically LINQ to SQL is a quick &amp;quot;one stop shopping ORM&amp;quot; tool that maps your SQL Server database, tables, relations, and also stored procedures into hierarchical objects and CLR methods.&lt;/p&gt;
&lt;p&gt;Your database will be mapped into a DataContext, your table will be mapped to &lt;/p&gt;
&lt;p&gt;Just add these tables from Northwind to the Northwind.dbml: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Customer 
&lt;/li&gt;&lt;li&gt;Order 
&lt;/li&gt;&lt;li&gt;Order_Detail&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Just for fun, add the SalesByCategory stored procedure into Northwind.dbml and you&amp;#39;ll see this:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.netindonesia.net/blogs/eriawan/WindowsLiveWriter/LINQLambdaexp.0andwhattheheckoftheseguys_279/Northwind_dbml_2.jpg"&gt;&lt;img src="http://geeks.netindonesia.net/blogs/eriawan/WindowsLiveWriter/LINQLambdaexp.0andwhattheheckoftheseguys_279/Northwind_dbml_thumb.jpg" style="border-width:0px;" alt="Northwind_dbml" width="598" border="0" height="484" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Now... it&amp;#39;s quite straightforward, right? But, where&amp;#39;s the real LINQ?&lt;/p&gt;
&lt;p&gt;Ah, LINQ is not pictures and models. This tool simply helps us visualize this code: (in the Northwind.designer.cs)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.netindonesia.net/blogs/eriawan/WindowsLiveWriter/LINQLambdaexp.0andwhattheheckoftheseguys_279/northwind_designer_4.jpg"&gt;&lt;img src="http://geeks.netindonesia.net/blogs/eriawan/WindowsLiveWriter/LINQLambdaexp.0andwhattheheckoftheseguys_279/northwind_designer_thumb_1.jpg" style="border-width:0px;" alt="northwind_designer" width="592" border="0" height="484" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;These are the code that represents Northwind database (also conceptually):&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;pre class="code"&gt;    &lt;span&gt;public&lt;/span&gt; &lt;span&gt;partial&lt;/span&gt; &lt;span&gt;class&lt;/span&gt; &lt;span&gt;NorthwindDataContext&lt;/span&gt; : System.Data.Linq.&lt;span&gt;DataContext&lt;br /&gt;&lt;/span&gt;    {&lt;br /&gt;        &lt;br /&gt;        &lt;span&gt;private&lt;/span&gt; &lt;span&gt;static&lt;/span&gt; System.Data.Linq.Mapping.&lt;span&gt;MappingSource&lt;/span&gt; mappingSource = &lt;span&gt;new&lt;/span&gt; &lt;span&gt;AttributeMappingSource&lt;/span&gt;();&lt;br /&gt;        &lt;br /&gt;&lt;span&gt;    #region&lt;/span&gt; Extensibility Method Definitions&lt;br /&gt;    &lt;span&gt;partial&lt;/span&gt; &lt;span&gt;void&lt;/span&gt; OnCreated();&lt;br /&gt;    &lt;span&gt;partial&lt;/span&gt; &lt;span&gt;void&lt;/span&gt; InsertCustomer(&lt;span&gt;Customer&lt;/span&gt; instance);&lt;br /&gt;    &lt;span&gt;partial&lt;/span&gt; &lt;span&gt;void&lt;/span&gt; UpdateCustomer(&lt;span&gt;Customer&lt;/span&gt; instance);&lt;br /&gt;    &lt;span&gt;partial&lt;/span&gt; &lt;span&gt;void&lt;/span&gt; DeleteCustomer(&lt;span&gt;Customer&lt;/span&gt; instance);&lt;br /&gt;    &lt;span&gt;partial&lt;/span&gt; &lt;span&gt;void&lt;/span&gt; InsertOrder(&lt;span&gt;Order&lt;/span&gt; instance);&lt;br /&gt;    &lt;span&gt;partial&lt;/span&gt; &lt;span&gt;void&lt;/span&gt; UpdateOrder(&lt;span&gt;Order&lt;/span&gt; instance);&lt;br /&gt;    &lt;span&gt;partial&lt;/span&gt; &lt;span&gt;void&lt;/span&gt; DeleteOrder(&lt;span&gt;Order&lt;/span&gt; instance);&lt;br /&gt;    &lt;span&gt;partial&lt;/span&gt; &lt;span&gt;void&lt;/span&gt; InsertOrder_Detail(&lt;span&gt;Order_Detail&lt;/span&gt; instance);&lt;br /&gt;    &lt;span&gt;partial&lt;/span&gt; &lt;span&gt;void&lt;/span&gt; UpdateOrder_Detail(&lt;span&gt;Order_Detail&lt;/span&gt; instance);&lt;br /&gt;    &lt;span&gt;partial&lt;/span&gt; &lt;span&gt;void&lt;/span&gt; DeleteOrder_Detail(&lt;span&gt;Order_Detail&lt;/span&gt; instance);&lt;br /&gt;&lt;span&gt;    #endregion&lt;br /&gt;&lt;/span&gt;        &lt;br /&gt;        &lt;span&gt;public&lt;/span&gt; NorthwindDataContext() : &lt;br /&gt;                &lt;span&gt;base&lt;/span&gt;(&lt;span&gt;global&lt;/span&gt;::WinFormDLinq.Properties.&lt;span&gt;Settings&lt;/span&gt;.Default.NORTHWNDConnectionString, mappingSource)&lt;br /&gt;        {&lt;br /&gt;            OnCreated();&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        &lt;span&gt;public&lt;/span&gt; NorthwindDataContext(&lt;span&gt;string&lt;/span&gt; connection) : &lt;br /&gt;                &lt;span&gt;base&lt;/span&gt;(connection, mappingSource)&lt;br /&gt;        {&lt;br /&gt;            OnCreated();&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        &lt;span&gt;public&lt;/span&gt; NorthwindDataContext(System.Data.&lt;span&gt;IDbConnection&lt;/span&gt; connection) : &lt;br /&gt;                &lt;span&gt;base&lt;/span&gt;(connection, mappingSource)&lt;br /&gt;        {&lt;br /&gt;            OnCreated();&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        &lt;span&gt;public&lt;/span&gt; NorthwindDataContext(&lt;span&gt;string&lt;/span&gt; connection, System.Data.Linq.Mapping.&lt;span&gt;MappingSource&lt;/span&gt; mappingSource) : &lt;br /&gt;                &lt;span&gt;base&lt;/span&gt;(connection, mappingSource)&lt;br /&gt;        {&lt;br /&gt;            OnCreated();&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        &lt;span&gt;public&lt;/span&gt; NorthwindDataContext(System.Data.&lt;span&gt;IDbConnection&lt;/span&gt; connection, System.Data.Linq.Mapping.&lt;span&gt;MappingSource&lt;/span&gt; mappingSource) : &lt;br /&gt;                &lt;span&gt;base&lt;/span&gt;(connection, mappingSource)&lt;br /&gt;        {&lt;br /&gt;            OnCreated();&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        &lt;span&gt;public&lt;/span&gt; System.Data.Linq.&lt;span&gt;Table&lt;/span&gt;&amp;lt;&lt;span&gt;Customer&lt;/span&gt;&amp;gt; Customers&lt;br /&gt;        {&lt;br /&gt;            &lt;span&gt;get&lt;br /&gt;&lt;/span&gt;            {&lt;br /&gt;                &lt;span&gt;return&lt;/span&gt; &lt;span&gt;this&lt;/span&gt;.GetTable&amp;lt;&lt;span&gt;Customer&lt;/span&gt;&amp;gt;();&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        &lt;span&gt;public&lt;/span&gt; System.Data.Linq.&lt;span&gt;Table&lt;/span&gt;&amp;lt;&lt;span&gt;Order&lt;/span&gt;&amp;gt; Orders&lt;br /&gt;        {&lt;br /&gt;            &lt;span&gt;get&lt;br /&gt;&lt;/span&gt;            {&lt;br /&gt;                &lt;span&gt;return&lt;/span&gt; &lt;span&gt;this&lt;/span&gt;.GetTable&amp;lt;&lt;span&gt;Order&lt;/span&gt;&amp;gt;();&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        &lt;span&gt;public&lt;/span&gt; System.Data.Linq.&lt;span&gt;Table&lt;/span&gt;&amp;lt;&lt;span&gt;Order_Detail&lt;/span&gt;&amp;gt; Order_Details&lt;br /&gt;        {&lt;br /&gt;            &lt;span&gt;get&lt;br /&gt;&lt;/span&gt;            {&lt;br /&gt;                &lt;span&gt;return&lt;/span&gt; &lt;span&gt;this&lt;/span&gt;.GetTable&amp;lt;&lt;span&gt;Order_Detail&lt;/span&gt;&amp;gt;();&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        [&lt;span&gt;Function&lt;/span&gt;(Name=&lt;span&gt;&amp;quot;dbo.SalesByCategory&amp;quot;&lt;/span&gt;)]&lt;br /&gt;        &lt;span&gt;public&lt;/span&gt; &lt;span&gt;ISingleResult&lt;/span&gt;&amp;lt;&lt;span&gt;SalesByCategoryResult&lt;/span&gt;&amp;gt; SalesByCategory([&lt;span&gt;Parameter&lt;/span&gt;(Name=&lt;span&gt;&amp;quot;CategoryName&amp;quot;&lt;/span&gt;, DbType=&lt;span&gt;&amp;quot;NVarChar(15)&amp;quot;&lt;/span&gt;)] &lt;span&gt;string&lt;/span&gt; categoryName, [&lt;span&gt;Parameter&lt;/span&gt;(Name=&lt;span&gt;&amp;quot;OrdYear&amp;quot;&lt;/span&gt;, DbType=&lt;span&gt;&amp;quot;NVarChar(4)&amp;quot;&lt;/span&gt;)] &lt;span&gt;string&lt;/span&gt; ordYear)&lt;br /&gt;        {&lt;br /&gt;            &lt;span&gt;IExecuteResult&lt;/span&gt; result = &lt;span&gt;this&lt;/span&gt;.ExecuteMethodCall(&lt;span&gt;this&lt;/span&gt;, ((&lt;span&gt;MethodInfo&lt;/span&gt;)(&lt;span&gt;MethodInfo&lt;/span&gt;.GetCurrentMethod())), categoryName, ordYear);&lt;br /&gt;            &lt;span&gt;return&lt;/span&gt; ((&lt;span&gt;ISingleResult&lt;/span&gt;&amp;lt;&lt;span&gt;SalesByCategoryResult&lt;/span&gt;&amp;gt;)(result.ReturnValue));&lt;br /&gt;        }&lt;br /&gt;    }&lt;/pre&gt;
&lt;p&gt;In VB:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Again, quite straightforward, eh? &lt;/p&gt;
&lt;p&gt;The rest of the code is the declaration of tables.&lt;/p&gt;
&lt;p&gt;Now, again, where&amp;#39;s the LINQ, or query, or the code thingy?&lt;/p&gt;
&lt;p&gt;I simply use the NorthwindDataContext and create a new instance of it. Then, just get Customer table from it! With a hint from Intellisense. Yes.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.netindonesia.net/blogs/eriawan/WindowsLiveWriter/LINQLambdaexp.0andwhattheheckoftheseguys_279/dlinq_intellisense_2.jpg"&gt;&lt;img src="http://geeks.netindonesia.net/blogs/eriawan/WindowsLiveWriter/LINQLambdaexp.0andwhattheheckoftheseguys_279/dlinq_intellisense_thumb.jpg" style="border-width:0px;" alt="dlinq_intellisense" width="644" border="0" height="205" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Okay! Now the LINQ!&lt;/p&gt;
&lt;p&gt;In this quick sample, I dump the output of the LINQ to SQL of Customer to an IEnumerable and then put it as a DataSource of a Windows Forms GridView:&lt;/p&gt;
&lt;p&gt;in C#: &lt;/p&gt;&lt;pre class="code"&gt;        &lt;span&gt;private&lt;/span&gt; &lt;span&gt;void&lt;/span&gt; Form1_Load(&lt;span&gt;object&lt;/span&gt; sender, &lt;span&gt;EventArgs&lt;/span&gt; e)&lt;br /&gt;        {&lt;br /&gt;            &lt;span&gt;NorthwindDataContext&lt;/span&gt; dbnorth = &lt;span&gt;new&lt;/span&gt; &lt;span&gt;NorthwindDataContext&lt;/span&gt;();&lt;br /&gt;            &lt;span&gt;var&lt;/span&gt; qry = &lt;span&gt;from&lt;/span&gt; c &lt;span&gt;in&lt;/span&gt; dbnorth.Customers&lt;br /&gt;                      &lt;span&gt;select&lt;/span&gt; &lt;span&gt;new&lt;/span&gt; { c.CustomerID, c.ContactName, c.CompanyName, c.City };&lt;br /&gt;            &lt;span&gt;this&lt;/span&gt;.dgvCustomer.DataSource = qry;&lt;br /&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;In VB:&lt;/p&gt;&lt;pre class="code"&gt;    &lt;span&gt;Private&lt;/span&gt; &lt;span&gt;Sub&lt;/span&gt; Form1_Load(&lt;span&gt;ByVal&lt;/span&gt; sender &lt;span&gt;As&lt;/span&gt; System.Object, &lt;span&gt;ByVal&lt;/span&gt; e &lt;span&gt;As&lt;/span&gt; System.EventArgs) &lt;span&gt;Handles&lt;/span&gt; &lt;span&gt;MyBase&lt;/span&gt;.Load&lt;br /&gt;        &lt;span&gt;Dim&lt;/span&gt; dbnorth &lt;span&gt;As&lt;/span&gt; NorthwindDataContext = &lt;span&gt;New&lt;/span&gt; NorthwindDataContext&lt;br /&gt;        &lt;span&gt;Dim&lt;/span&gt; qry = &lt;span&gt;From&lt;/span&gt; c &lt;span&gt;In&lt;/span&gt; dbnorth.Customers _&lt;br /&gt;                  &lt;span&gt;Select&lt;/span&gt; c.CustomerID, c.ContactName, c.CompanyName, c.City&lt;br /&gt;        &lt;span&gt;Me&lt;/span&gt;.dgvCustomer.DataSource = qry&lt;br /&gt;&lt;br /&gt;    &lt;span&gt;End&lt;/span&gt; &lt;span&gt;Sub&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Run it, you&amp;#39;ll get the same column results from the select query above:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.netindonesia.net/blogs/eriawan/WindowsLiveWriter/LINQLambdaexp.0andwhattheheckoftheseguys_279/image_2.png"&gt;&lt;img src="http://geeks.netindonesia.net/blogs/eriawan/WindowsLiveWriter/LINQLambdaexp.0andwhattheheckoftheseguys_279/image_thumb.png" style="border-width:0px;" alt="image" width="633" border="0" height="396" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;What if I want to filter it? Hmm... Let&amp;#39;s just say I want to get data of customers in London. &lt;/p&gt;
&lt;p&gt;Change the code above to this:&lt;/p&gt;
&lt;p&gt;In C#: &lt;/p&gt;&lt;pre class="code"&gt;        &lt;span&gt;private&lt;/span&gt; &lt;span&gt;void&lt;/span&gt; Form1_Load(&lt;span&gt;object&lt;/span&gt; sender, &lt;span&gt;EventArgs&lt;/span&gt; e)&lt;br /&gt;        {&lt;br /&gt;            &lt;span&gt;NorthwindDataContext&lt;/span&gt; dbnorth = &lt;span&gt;new&lt;/span&gt; &lt;span&gt;NorthwindDataContext&lt;/span&gt;();&lt;br /&gt;            &lt;span&gt;var&lt;/span&gt; qry = &lt;span&gt;from&lt;/span&gt; c &lt;span&gt;in&lt;/span&gt; dbnorth.Customers&lt;br /&gt;                      &lt;span&gt;where&lt;/span&gt; c.City == &lt;span&gt;&amp;quot;London&amp;quot;&lt;br /&gt;&lt;/span&gt;                      &lt;span&gt;select&lt;/span&gt; &lt;span&gt;new&lt;/span&gt; { c.CustomerID, c.ContactName, c.CompanyName, c.City };&lt;br /&gt;            &lt;span&gt;this&lt;/span&gt;.dgvCustomer.DataSource = qry;&lt;br /&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;In VB:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;pre class="code"&gt;    &lt;span&gt;Private&lt;/span&gt; &lt;span&gt;Sub&lt;/span&gt; Form1_Load(&lt;span&gt;ByVal&lt;/span&gt; sender &lt;span&gt;As&lt;/span&gt; System.Object, &lt;span&gt;ByVal&lt;/span&gt; e &lt;span&gt;As&lt;/span&gt; System.EventArgs) &lt;span&gt;Handles&lt;/span&gt; &lt;span&gt;MyBase&lt;/span&gt;.Load&lt;br /&gt;        &lt;span&gt;Dim&lt;/span&gt; dbnorth &lt;span&gt;As&lt;/span&gt; NorthwindDataContext = &lt;span&gt;New&lt;/span&gt; NorthwindDataContext&lt;br /&gt;        &lt;span&gt;Dim&lt;/span&gt; qry = &lt;span&gt;From&lt;/span&gt; c &lt;span&gt;In&lt;/span&gt; dbnorth.Customers _&lt;br /&gt;                  &lt;span&gt;Where&lt;/span&gt; c.City = &lt;span&gt;&amp;quot;London&amp;quot;&lt;/span&gt; _&lt;br /&gt;                  &lt;span&gt;Select&lt;/span&gt; c.CustomerID, c.ContactName, c.CompanyName, c.City&lt;br /&gt;        &lt;span&gt;Me&lt;/span&gt;.dgvCustomer.DataSource = qry&lt;br /&gt;&lt;br /&gt;    &lt;span&gt;End&lt;/span&gt; &lt;span&gt;Sub&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;you&amp;#39;ll get this: &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.netindonesia.net/blogs/eriawan/WindowsLiveWriter/LINQLambdaexp.0andwhattheheckoftheseguys_279/image_4.png"&gt;&lt;img src="http://geeks.netindonesia.net/blogs/eriawan/WindowsLiveWriter/LINQLambdaexp.0andwhattheheckoftheseguys_279/image_thumb_1.png" style="border-width:0px;" alt="image" width="633" border="0" height="396" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Voila!&lt;/p&gt;
&lt;p&gt;More productive, right? I just create this sample code less than 5 minutes!&lt;/p&gt;
&lt;p&gt;As you see, the &amp;quot;select&amp;quot; is now keyword. So is &amp;quot;where&amp;quot; and &amp;quot;from&amp;quot;. But from comes before select, which is different from the original SQL query of SELECT.&lt;/p&gt;
&lt;p&gt;Why? Because SQL language is not quite natural in the way the ordinary compiler process. You can&amp;#39;t put the &amp;quot;select&amp;quot; first, since you have to know from what kind of set of data you want to manipulate or to select.&lt;/p&gt;
&lt;p&gt;The quick notion is: &lt;b&gt;&lt;i&gt;I have to know from what set of data I want to select, then select it&lt;/i&gt;&lt;/b&gt;. Not the way that SELECT SQL works. Because compiler can&amp;#39;t know at first the variables you want to select if you don&amp;#39;t define from what data first. Now, enter the world of &lt;b&gt;&lt;a href="http://en.wikipedia.org/wiki/Declarative_programming_language"&gt;Declarative Programming&lt;/a&gt;&lt;/b&gt;!&lt;/p&gt;
&lt;p&gt;Why? &lt;b&gt;&lt;i&gt;Because you think what you want to, not how it can be done.&lt;/i&gt;&lt;/b&gt; Declarative programming is everywhere, from WPF&amp;#39;s XAML, to XML Schema, and to quite old domain specific language such as Prolog and our old data centric language (and also domain specific language), SQL query.&lt;/p&gt;
&lt;p&gt;Quite funny, isn&amp;#39;t it? You&amp;#39;ve used SQL but you didn&amp;#39;t know what kind of taxonomy SQL query was.&lt;/p&gt;
&lt;p&gt;But don&amp;#39;t be happy soon, C# is not entirely Declarative Programming. It&amp;#39;s an imperative programming family member, same as VB.NET.&lt;/p&gt;
&lt;p&gt;See? This is why I told you up front, you have to know some concept first. And the depth doesn&amp;#39;t stop here. Let&amp;#39;s see how the code above is translated into, and I call it, &amp;quot;first phase&amp;quot;. But before that, enter another new cool features of C# 3.0 and VB 9.0: type inferencing.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Type inferencing&lt;/h3&gt;
&lt;p&gt;See this:&lt;/p&gt;&lt;pre class="code"&gt;            &lt;span&gt;var&lt;/span&gt; qry = &lt;span&gt;from&lt;/span&gt; c &lt;span&gt;in&lt;/span&gt; dbnorth.Customers&lt;br /&gt;                      &lt;span&gt;where&lt;/span&gt; c.City == &lt;span&gt;&amp;quot;London&amp;quot;&lt;br /&gt;&lt;/span&gt;                      &lt;span&gt;select&lt;/span&gt; &lt;span&gt;new&lt;/span&gt; { c.CustomerID, c.ContactName, c.CompanyName, c.City };&lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;You may wonder, is it still type safe? Variable qry has no type defined up front! If you debug and hover your cursor to qry variable, you&amp;#39;ll get IEnumerable. Actually, the code above says, &amp;quot;give variable qry the type of the right hand expression has&amp;quot;. So, qry has the type of IEnumerable.&lt;/p&gt;
&lt;p&gt;I can also create this variable x as Int32 using type inferencing:&lt;/p&gt;&lt;pre class="code"&gt;            &lt;span&gt;var&lt;/span&gt; x = 1;&lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;It&amp;#39;s using var and it functions the same as Dim in VB. VB also have it. But var looks like Javascript, and Javascript is dynamic language family member. Enter the world of &lt;b&gt;&lt;i&gt;dynamic language&lt;/i&gt;&lt;/b&gt;!&lt;/p&gt;
&lt;p&gt;But, again, it&amp;#39;s up to you to decide whether this is a good or bad news, since C# is not purely dynamic language. For me this fact can be understood perfectly, because C# is intended strongly typed at first, unlike Javascript.&lt;/p&gt;
&lt;p&gt;Now, the query code above is translated into this first phase:&lt;/p&gt;&lt;pre class="code"&gt;            &lt;span&gt;var&lt;/span&gt; qry = dbnorth.Customers&lt;br /&gt;                .Where(c =&amp;gt; c.City == &lt;span&gt;&amp;quot;London&amp;quot;&lt;/span&gt;)&lt;br /&gt;                .Select(c =&amp;gt; &lt;span&gt;new&lt;/span&gt; { c.CustomerID, c.ContactName, c.CompanyName, c.City });&lt;br /&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Or in VB:&lt;/p&gt;&lt;pre class="code"&gt;        &lt;span&gt;Dim&lt;/span&gt; qry = dbnorth.Customers _&lt;br /&gt;        .Where(&lt;span&gt;Function&lt;/span&gt;(c) c.City = &lt;span&gt;&amp;quot;London&amp;quot;&lt;/span&gt;) _&lt;br /&gt;        .Select(&lt;span&gt;Function&lt;/span&gt;(c) &lt;span&gt;New&lt;/span&gt; &lt;span&gt;With&lt;/span&gt; {c.CustomerID, c.ContactName, c.CompanyName, c.City})&lt;br /&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Have you seen this syntax above before? The &amp;quot;c=&amp;gt;&amp;quot;? &lt;/p&gt;
&lt;p&gt;In C#3.0 and VB 9.0, it is called Lambda Expressions. But VB is not taking the same syntax, it&amp;#39;s written as new Function which is then translated into Lambda function. VB programmer prefers syntax that&amp;#39;s more verbose.&lt;/p&gt;
&lt;p&gt;The idea of Lambda Expression itself was taken from a topic of &lt;a href="http://en.wikipedia.org/wiki/Lambda_expression"&gt;Lambda Calculus&lt;/a&gt;, from mathematic foundation. We now turn our journey to the world of exotic Lambda Calculus, but only as an overview in C# or VB view. Now, we&amp;#39;re now walking towards new world of Lambda Calculus.&lt;/p&gt;
&lt;h3&gt;Lambda Calculus (or Lambda Expression in C# 3.0 and VB 9.0)&lt;/h3&gt;
&lt;p&gt;Now, what is Lambda calculus anyway? It is simply a functional view of expressing your code. But in a deep glass magnifier view, it&amp;#39;s a formal system (as in Wikipedia) to investigate function applications and recursion.&lt;/p&gt;
&lt;p&gt;In C# and VB, it&amp;#39;s a functional way to express delegate and expression tree types.&lt;/p&gt;
&lt;p&gt;(To be continued..)&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fgeeks.netindonesia.net%2fblogs%2feriawan%2farchive%2f2008%2f03%2f22%2flinq-lambda-expressions-functional-programming-f-c-3-0-vb-9-0-and-what-the-heck-of-these-guys-are-related-part-one.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fgeeks.netindonesia.net%2fblogs%2feriawan%2farchive%2f2008%2f03%2f22%2flinq-lambda-expressions-functional-programming-f-c-3-0-vb-9-0-and-what-the-heck-of-these-guys-are-related-part-one.aspx" alt="kick it on DotNetKicks.com" border="0" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;

&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post: &lt;/strong&gt;&lt;a href="mailto:?body=Thought you might like this: http://geeks.netindonesia.net/blogs/eriawan/archive/2008/03/22/linq-lambda-expressions-functional-programming-f-c-3-0-vb-9-0-and-what-the-heck-of-these-guys-are-related-part-one.aspx&amp;amp;subject=LINQ, Lambda expressions, functional programming, F#, C# 3.0, VB 9.0 and what the heck of these guys are related? (part one)" target="_blank" title="Send via email"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Mail.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.facebook.com/sharer.php?u=http://geeks.netindonesia.net/blogs/eriawan/archive/2008/03/22/linq-lambda-expressions-functional-programming-f-c-3-0-vb-9-0-and-what-the-heck-of-these-guys-are-related-part-one.aspx&amp;amp;t=LINQ%2c+Lambda+expressions%2c+functional+programming%2c+F%23%2c+C%23+3.0%2c+VB+9.0+and+what+the+heck+of+these+guys+are+related%3f+(part+one)" target="_blank" title="Submit LINQ, Lambda expressions, functional programming, F#, C# 3.0, VB 9.0 and what the heck of these guys are related? (part one) to DotNetKicks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Facebook.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://del.icio.us/post?url=http://geeks.netindonesia.net/blogs/eriawan/archive/2008/03/22/linq-lambda-expressions-functional-programming-f-c-3-0-vb-9-0-and-what-the-heck-of-these-guys-are-related-part-one.aspx&amp;amp;title=LINQ%2c+Lambda+expressions%2c+functional+programming%2c+F%23%2c+C%23+3.0%2c+VB+9.0+and+what+the+heck+of+these+guys+are+related%3f+(part+one)" target="_blank" title="Submit LINQ, Lambda expressions, functional programming, F#, C# 3.0, VB 9.0 and what the heck of these guys are related? (part one) to del.icio.us"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Delicious.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.digg.com/submit?url=http://geeks.netindonesia.net/blogs/eriawan/archive/2008/03/22/linq-lambda-expressions-functional-programming-f-c-3-0-vb-9-0-and-what-the-heck-of-these-guys-are-related-part-one.aspx&amp;amp;phase=2" target="_blank" title="Submit LINQ, Lambda expressions, functional programming, F#, C# 3.0, VB 9.0 and what the heck of these guys are related? (part one) to digg.com"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Digg.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://geeks.netindonesia.net/blogs/eriawan/archive/2008/03/22/linq-lambda-expressions-functional-programming-f-c-3-0-vb-9-0-and-what-the-heck-of-these-guys-are-related-part-one.aspx&amp;amp;title=LINQ%2c+Lambda+expressions%2c+functional+programming%2c+F%23%2c+C%23+3.0%2c+VB+9.0+and+what+the+heck+of+these+guys+are+related%3f+(part+one)" target="_blank" title="Add LINQ, Lambda expressions, functional programming, F#, C# 3.0, VB 9.0 and what the heck of these guys are related? (part one) to Live Bookmarks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Live.16.gif" border="0"&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://geeks.netindonesia.net/aggbug.aspx?PostID=42966" width="1" height="1"&gt;</content><author><name>eriawan</name><uri>http://geeks.netindonesia.net/members/eriawan.aspx</uri></author><category term="Functional programming" scheme="http://geeks.netindonesia.net/blogs/eriawan/archive/tags/Functional+programming/default.aspx" /><category term="LINQ" scheme="http://geeks.netindonesia.net/blogs/eriawan/archive/tags/LINQ/default.aspx" /></entry><entry><title>There's got to be a way, not just a silent scream about our IT education</title><link rel="alternate" type="text/html" href="http://geeks.netindonesia.net/blogs/eriawan/archive/2008/03/04/there-s-got-to-be-a-way-not-just-a-silent-scream-about-our-it-education.aspx" /><id>http://geeks.netindonesia.net/blogs/eriawan/archive/2008/03/04/there-s-got-to-be-a-way-not-just-a-silent-scream-about-our-it-education.aspx</id><published>2008-03-04T00:40:00Z</published><updated>2008-03-04T00:40:00Z</updated><content type="html">&lt;p&gt;Yes. It is. I feel dizzy again thinking about what are our youngster wannabe geek doing and thinking today, either they&amp;#39;re still studying or being graduated.&lt;/p&gt;
&lt;p&gt;I&amp;#39;d experienced many things during my quite long &lt;a href="http://geeks.netindonesia.net/blogs/eriawan/archive/2008/02/28/finally-what-a-shame-for-me-my-late-chapters-on-project-otak-is-done.aspx" target="_blank"&gt;(more than 1 month) silence period&lt;/a&gt;. I was doing my coding partially outside Java, the Kalimantan island, while also helping my friends there. My friends are IT lecturers (focusing on software development concepts) from quite a reputable state university and also teaching at other private university as well. Not to mention they have a small software company (call it &amp;quot;micro ISV&amp;quot;, just like mine) that sells web solution based on ASP.NET 2.0. &lt;/p&gt;
&lt;h3&gt;Unspoken yet proven local heroes&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Note: I won&amp;#39;t mention their company name in here. Also they asked me not to tell their names. But you&amp;#39;ll find it on IBM&amp;#39;s GSSG website, and they&amp;#39;re one of a very rare IBM software development premier partner in Indonesia while also having IBM Rational certifications and MCP certifications in .NET.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I was eager to know many things about educations, especially education IT on Kalimantan. Yes, mostly people of Kalimantan have a warm welcome, comparing to Surabaya. But, I was shocked after visiting and helping them to interview candidates for software developers. Before, they told me, &amp;quot;Don&amp;#39;t expect much from fresh graduate locals and from Java graduates.&amp;quot; Huh? What&amp;#39;s up? They told me that I shouldn&amp;#39;t expect graduates to be a good junior software developer to pick. &lt;/p&gt;
&lt;p&gt;At first, I didn&amp;#39;t believe it. There is should be at least one. Can&amp;#39;t find just one? This is impossible.&lt;/p&gt;
&lt;p&gt;The truth is more an irony than just a sad fact.&lt;/p&gt;
&lt;p&gt;It took almost a week to interview about 30 candidates, but I can only help them for 2 days. Although it&amp;#39;s already advertised &amp;quot;looking for C# developer&amp;quot;, almost 30% of submitted applicants were failed; they didn&amp;#39;t know C# and basic OOP as well.&lt;/p&gt;
&lt;p&gt;The rest 70% was quite good at first. They knew basic C# 2.0 and .NET 2.0 concepts, including generics, delegates, using statement (as a deterministic object scope), and collections. But, little they know concepts of .NET CLR. There were fruitful debates at that time, between my friends and me. Finally they agreed to include design pattern and common coding best practices as a requirement. But again, they warned me, &amp;quot;You&amp;#39;ll &lt;strong&gt;&lt;em&gt;lose&lt;/em&gt;&lt;/strong&gt; many candidates. We won&amp;#39;t include that requirement now.&amp;quot; Please take note about the word &amp;quot;lose&amp;quot;. Lose here doesn&amp;#39;t mean that they&amp;#39;ll lose good candidates after applying, lose here they&amp;#39;ll lose candidates before applying after seeing the fact and yet they mumbled, &amp;quot;What? Design patterns? best practices? no. I don&amp;#39;t have that in university&amp;quot;. &lt;/p&gt;
&lt;h3&gt;Ironies&lt;/h3&gt;
&lt;p&gt;Other ironies comes in again after I met one of candidates at lunch and I was pretending to apply. He told me that most lecturers in his university always giving him doctrines about the best programming language, best OS, and also focusing to learn many programming languages instead of nurturing students to solving business problems, understanding the very basic software development concepts such as DBMS, SDLCs (such as waterfall, iterative, UP), programming paradigms (e.g. imperative programming, functional programming, declarative programming) and many more. He also told me that if he wants to propose .NET 3.0 study as its topic of his final assignment, he&amp;#39;ll be out of luck. The majority of his lecturers have rejected him for many non sense reasons such as &amp;quot;We don&amp;#39;t use that. What is WPF? No need to learn new things! Just stick to your study and get graduated fast!&amp;quot;&lt;/p&gt;
&lt;p&gt;Other candidate that also had lunch with me told me that they somehow got used to think that &lt;em&gt;every concept they&amp;#39;ve learned from their past universities were enough&lt;/em&gt;. No. It&amp;#39;s not enough. I calmly told and explained to him that what he&amp;#39;d learned mostly were not conceptual at all. I was having quite painful conversation, since he at first was defensive. After a long persuasion, he realized that he had to learn many basic things that makes a real concepts.&lt;/p&gt;
&lt;p&gt;After I discussed this with my friends, they told me that those reasons simply translated to: &amp;quot;&lt;em&gt;I don&amp;#39;t know that. Since I don&amp;#39;t know WPF and even .NET 3.0 and I won&amp;#39;t learn new things since I don&amp;#39;t have to. So you as a student simply get back to your chair and just finish your damn study just like others!&lt;/em&gt;&amp;quot;&lt;/p&gt;
&lt;p&gt;D&amp;#39;uh. I also remembered this bad mentality experience while I was consult my final assignment about 10 years ago. Now still happens.&lt;/p&gt;
&lt;h3&gt;Heroes and silent screamers&lt;/h3&gt;
&lt;p&gt;What about my friends as a lecturers? They have gone from &amp;quot;loud scream&amp;quot; to &amp;quot;silent scream&amp;quot;. They were known as many bright lecturers and also post graduate students (all of them have at least masters in software engineering and one PhD). Yes, now they&amp;#39;re not known from the outside world. But they&amp;#39;ve been struggling at the university senate level to insert and also assert basic software development concepts while at the same time facing the fact that most of their own colleagues (lecturers, deans) are not willing to shift from programming-language-mastering to instead of conceptual algorithm thinker and problem solver paradigm. They&amp;#39;re also always teaching and evangelizing students about the use of best practices, design patterns, and many more. Another best thing: they defend students that have good software developer potentials and have enormous passions of continuous learning and improvements.&lt;/p&gt;
&lt;p&gt;Openly against that? Not a chance, they said. Many useless arguments and reasons have been thrown at them. Not to mention threats in form of discipline sanctions because of having against the (bad) habits that have been working for so many years without complaints from students and alumnis.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s a very fond of them, since my friends love to teach, share, and discuss many things especially about advantages in .NET, software development, and modeling. This is why they&amp;#39;re also have quite heroic choices to keep struggling to educate others. Although they don&amp;#39;t get paid well by their current universities. They should.&lt;/p&gt;
&lt;p&gt;My heart was breaking and I&amp;#39;ve decided to help them personally and also having helps from friends under my company umbrella, RX Communica. &lt;/p&gt;
&lt;p&gt;My proposal to my friends are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Giving additional trainings and workshop about those concepts outside their universities&lt;/li&gt;
&lt;li&gt;Giving free ebooks such as project Otak as one of first means to accelerate learning programming in Indonesian language while also articulating and exercising other programming paradigms&lt;/li&gt;
&lt;li&gt;Incubating and sharing some software projects (including their own and jointly developed with RX Communica) to be developed by their potential students&lt;/li&gt;
&lt;li&gt;Continuously giving constructive critics and suggestion at higher education levels while also giving encouragement to see and understand wider perspective of software developments for almamaters, fellow lecturers, especially IT related lecturers&lt;/li&gt;&lt;/ul&gt;
&lt;h3&gt;Closing&lt;/h3&gt;
&lt;p&gt;What about us? You? Do we care about those who now screaming in silence? Especially for those who keep low profiles and have done many things to make their surroundings and students better.&lt;/p&gt;
&lt;p&gt;I do believe we all care. We do care. And by the way, do we have guts to scream in silence in our own local surroundings and our own almamater also? Thanks to them, I do have it now. :) &lt;/p&gt;
&lt;p&gt;But I believe we can construct a constructive and intelligent ways to handle this, instead of directly criticize them and hitting their academic pride. Gandhi has proven as one of the best silent screamers. Many other also.&lt;/p&gt;
&lt;p&gt;Have any suggestions? Please. you&amp;#39;re more than welcome. :)&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post: &lt;/strong&gt;&lt;a href="mailto:?body=Thought you might like this: http://geeks.netindonesia.net/blogs/eriawan/archive/2008/03/04/there-s-got-to-be-a-way-not-just-a-silent-scream-about-our-it-education.aspx&amp;amp;subject=There's got to be a way, not just a silent scream about our IT education" target="_blank" title="Send via email"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Mail.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.facebook.com/sharer.php?u=http://geeks.netindonesia.net/blogs/eriawan/archive/2008/03/04/there-s-got-to-be-a-way-not-just-a-silent-scream-about-our-it-education.aspx&amp;amp;t=There%27s+got+to+be+a+way%2c+not+just+a+silent+scream+about+our+IT+education" target="_blank" title="Submit There's got to be a way, not just a silent scream about our IT education to DotNetKicks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Facebook.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://del.icio.us/post?url=http://geeks.netindonesia.net/blogs/eriawan/archive/2008/03/04/there-s-got-to-be-a-way-not-just-a-silent-scream-about-our-it-education.aspx&amp;amp;title=There%27s+got+to+be+a+way%2c+not+just+a+silent+scream+about+our+IT+education" target="_blank" title="Submit There's got to be a way, not just a silent scream about our IT education to del.icio.us"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Delicious.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.digg.com/submit?url=http://geeks.netindonesia.net/blogs/eriawan/archive/2008/03/04/there-s-got-to-be-a-way-not-just-a-silent-scream-about-our-it-education.aspx&amp;amp;phase=2" target="_blank" title="Submit There's got to be a way, not just a silent scream about our IT education to digg.com"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Digg.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://geeks.netindonesia.net/blogs/eriawan/archive/2008/03/04/there-s-got-to-be-a-way-not-just-a-silent-scream-about-our-it-education.aspx&amp;amp;title=There%27s+got+to+be+a+way%2c+not+just+a+silent+scream+about+our+IT+education" target="_blank" title="Add There's got to be a way, not just a silent scream about our IT education to Live Bookmarks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Live.16.gif" border="0"&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://geeks.netindonesia.net/aggbug.aspx?PostID=41004" width="1" height="1"&gt;</content><author><name>eriawan</name><uri>http://geeks.netindonesia.net/members/eriawan.aspx</uri></author><category term="education side of software development" scheme="http://geeks.netindonesia.net/blogs/eriawan/archive/tags/education+side+of+software+development/default.aspx" /></entry><entry><title>Finally... (what a shame for me!) My late chapters on Project Otak is done.</title><link rel="alternate" type="text/html" href="http://geeks.netindonesia.net/blogs/eriawan/archive/2008/02/28/finally-what-a-shame-for-me-my-late-chapters-on-project-otak-is-done.aspx" /><id>http://geeks.netindonesia.net/blogs/eriawan/archive/2008/02/28/finally-what-a-shame-for-me-my-late-chapters-on-project-otak-is-done.aspx</id><published>2008-02-28T07:31:32Z</published><updated>2008-02-28T07:31:32Z</updated><content type="html">&lt;p&gt;Yes, what a shame. I&amp;#39;m too late submitting it (here&amp;#39;s my participations on project otak). Many thanks to Agus Kurniawan, for his patience to always reminding me. Also I welcome critics, suggestions, and rants.&lt;/p&gt; &lt;p&gt;Now, I&amp;#39;ve come home from finishing jobs outside island of Java. I&amp;#39;m ready to participate again in this blog, emails, mailing list.&lt;/p&gt; &lt;p&gt;Guys, please forgive me for my prolonged silence.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post: &lt;/strong&gt;&lt;a href="mailto:?body=Thought you might like this: http://geeks.netindonesia.net/blogs/eriawan/archive/2008/02/28/finally-what-a-shame-for-me-my-late-chapters-on-project-otak-is-done.aspx&amp;amp;subject=Finally... (what a shame for me!) My late chapters on Project Otak is done." target="_blank" title="Send via email"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Mail.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.facebook.com/sharer.php?u=http://geeks.netindonesia.net/blogs/eriawan/archive/2008/02/28/finally-what-a-shame-for-me-my-late-chapters-on-project-otak-is-done.aspx&amp;amp;t=Finally...+(what+a+shame+for+me!)+My+late+chapters+on+Project+Otak+is+done." target="_blank" title="Submit Finally... (what a shame for me!) My late chapters on Project Otak is done. to DotNetKicks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Facebook.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://del.icio.us/post?url=http://geeks.netindonesia.net/blogs/eriawan/archive/2008/02/28/finally-what-a-shame-for-me-my-late-chapters-on-project-otak-is-done.aspx&amp;amp;title=Finally...+(what+a+shame+for+me!)+My+late+chapters+on+Project+Otak+is+done." target="_blank" title="Submit Finally... (what a shame for me!) My late chapters on Project Otak is done. to del.icio.us"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Delicious.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.digg.com/submit?url=http://geeks.netindonesia.net/blogs/eriawan/archive/2008/02/28/finally-what-a-shame-for-me-my-late-chapters-on-project-otak-is-done.aspx&amp;amp;phase=2" target="_blank" title="Submit Finally... (what a shame for me!) My late chapters on Project Otak is done. to digg.com"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Digg.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://geeks.netindonesia.net/blogs/eriawan/archive/2008/02/28/finally-what-a-shame-for-me-my-late-chapters-on-project-otak-is-done.aspx&amp;amp;title=Finally...+(what+a+shame+for+me!)+My+late+chapters+on+Project+Otak+is+done." target="_blank" title="Add Finally... (what a shame for me!) My late chapters on Project Otak is done. to Live Bookmarks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Live.16.gif" border="0"&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://geeks.netindonesia.net/aggbug.aspx?PostID=40377" width="1" height="1"&gt;</content><author><name>eriawan</name><uri>http://geeks.netindonesia.net/members/eriawan.aspx</uri></author></entry><entry><title>Readable, lean and mean codes are necessary</title><link rel="alternate" type="text/html" href="http://geeks.netindonesia.net/blogs/eriawan/archive/2007/11/19/readable-lean-and-mean-codes-are-necessary.aspx" /><id>http://geeks.netindonesia.net/blogs/eriawan/archive/2007/11/19/readable-lean-and-mean-codes-are-necessary.aspx</id><published>2007-11-19T08:54:00Z</published><updated>2007-11-19T08:54:00Z</updated><content type="html">&lt;p&gt;Hi guys!&lt;/p&gt;
&lt;p&gt;I know most of you are using VS 2005 (or even VS 2008) and creating best applications. VS 2005 is fun to use and harness, but it has many good best practices in its own code generators. Take for example, the Windows Forms code generator.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.netindonesia.net/blogs/eriawan/WindowsLiveWriter/Readableleanandmeancodesarenecessary_DC45/vs2005_formdesigner.jpg"&gt;&lt;img style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height="274" alt="vs2005_formdesigner" src="http://geeks.netindonesia.net/blogs/eriawan/WindowsLiveWriter/Readableleanandmeancodesarenecessary_DC45/vs2005_formdesigner_thumb.jpg" width="453" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;It&amp;#39;s quite neat, isn&amp;#39;t it? Yes, VS 2005 has done this for us. Even since VS 2002, the first VS .NET release.&lt;/p&gt;
&lt;p&gt;This idea promotes cleaner and readable code. I bet many of you write code like this:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;pre class="code"&gt;    &lt;span&gt;public&lt;/span&gt; &lt;span&gt;partial&lt;/span&gt; &lt;span&gt;class&lt;/span&gt; &lt;span&gt;FrmUser&lt;/span&gt; : &lt;span&gt;csMaintenanceForm
&lt;/span&gt;    {

        &lt;span&gt;///&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;lt;summary&amp;gt;
&lt;/span&gt;        &lt;span&gt;///&lt;/span&gt;&lt;span&gt; Default constructor
&lt;/span&gt;        &lt;span&gt;///&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;lt;/summary&amp;gt;
&lt;/span&gt;        &lt;span&gt;public&lt;/span&gt; FrmUser()
        {
            &lt;span&gt;this&lt;/span&gt;.bizUser = &lt;span&gt;new&lt;/span&gt; &lt;span&gt;csUserBusiness&lt;/span&gt;();
            &lt;span&gt;this&lt;/span&gt;.RegisterPrimaryBizObj(&lt;span&gt;this&lt;/span&gt;.bizUser);

            InitializeComponent();
            &lt;span&gt;this&lt;/span&gt;.bizUser.LoadAllData();

        }

        &lt;span&gt;protected&lt;/span&gt; &lt;span&gt;csUserBusiness&lt;/span&gt; bizUser;

        &lt;span&gt;private&lt;/span&gt; &lt;span&gt;void&lt;/span&gt; SleepForAWhile(&lt;span&gt;int&lt;/span&gt; msec)
        {
            System.Threading.&lt;span&gt;Thread&lt;/span&gt;.Sleep(msec);
        }
    }&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;Why don&amp;#39;t you reorganize it into this:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;pre class="code"&gt;    &lt;span&gt;public&lt;/span&gt; &lt;span&gt;partial&lt;/span&gt; &lt;span&gt;class&lt;/span&gt; &lt;span&gt;FrmUser&lt;/span&gt; : &lt;span&gt;csMaintenanceForm
&lt;/span&gt;    {

&lt;span&gt;        #region&lt;/span&gt; Constructors

        &lt;span&gt;///&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;lt;summary&amp;gt;
&lt;/span&gt;        &lt;span&gt;///&lt;/span&gt;&lt;span&gt; Default constructor
&lt;/span&gt;        &lt;span&gt;///&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;lt;/summary&amp;gt;
&lt;/span&gt;        &lt;span&gt;public&lt;/span&gt; FrmUser()
        {
            &lt;span&gt;this&lt;/span&gt;.bizUser = &lt;span&gt;new&lt;/span&gt; &lt;span&gt;csUserBusiness&lt;/span&gt;();
            &lt;span&gt;this&lt;/span&gt;.RegisterPrimaryBizObj(&lt;span&gt;this&lt;/span&gt;.bizUser);

            InitializeComponent();
            &lt;span&gt;this&lt;/span&gt;.bizUser.LoadAllData();

        }

&lt;span&gt;        #endregion

&lt;/span&gt;        &lt;span&gt;protected&lt;/span&gt; &lt;span&gt;csUserBusiness&lt;/span&gt; bizUser;

&lt;span&gt;        #region&lt;/span&gt; Methods

        &lt;span&gt;private&lt;/span&gt; &lt;span&gt;void&lt;/span&gt; SleepForAWhile(&lt;span&gt;int&lt;/span&gt; msec)
        {
            System.Threading.&lt;span&gt;Thread&lt;/span&gt;.Sleep(msec);
        }

&lt;span&gt;        #endregion

&lt;/span&gt;    }&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;And make it look like this (after being collapsed by &amp;quot;Ctrl+M,CTRL+O&amp;quot;) 
&lt;p&gt;&lt;a href="http://geeks.netindonesia.net/blogs/eriawan/WindowsLiveWriter/Readableleanandmeancodesarenecessary_DC45/vs2005_codereorganized.jpg"&gt;&lt;img style="BORDER-RIGHT:0px;BORDER-TOP:0px;BORDER-LEFT:0px;BORDER-BOTTOM:0px;" height="69" alt="vs2005_codereorganized" src="http://geeks.netindonesia.net/blogs/eriawan/WindowsLiveWriter/Readableleanandmeancodesarenecessary_DC45/vs2005_codereorganized_thumb.jpg" width="240" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;For complex code, I use this arrangement (from first to last): &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Constructors&lt;/li&gt;
&lt;li&gt;Properties&lt;/li&gt;
&lt;li&gt;Methods&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Why? These are my reasons/rationales:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I put constructors first, since it’s cleaner to know class constructors first and it’s called first time when an object is instantiated. &lt;/li&gt;
&lt;li&gt;Properties come before methods, because we then want to know what are the object’s attributes are. &lt;br /&gt;And then what the object do (the object’s operations in OOP terms), and this can mean methods and event handlers. &lt;/li&gt;
&lt;li&gt;Then, all of the implementation from interfaces is grouped last. This idea comes from VS itself, since VS 2003. &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Those rationales come from this simple sequence of job interview questions: 
&lt;p&gt;&lt;strong&gt;&lt;em&gt;“Hey, I just get to know you. How do I call you? (Constructors) What are your traits and biodata? (Properties) What can you do? (Methods and interfaces implementations)”&lt;/em&gt;&lt;/strong&gt; 
&lt;p&gt;Voila! It’s quite simple, in my opinion. 
&lt;p&gt;Comments are welcome! :)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Eriawan&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post: &lt;/strong&gt;&lt;a href="mailto:?body=Thought you might like this: http://geeks.netindonesia.net/blogs/eriawan/archive/2007/11/19/readable-lean-and-mean-codes-are-necessary.aspx&amp;amp;subject=Readable, lean and mean codes are necessary" target="_blank" title="Send via email"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Mail.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.facebook.com/sharer.php?u=http://geeks.netindonesia.net/blogs/eriawan/archive/2007/11/19/readable-lean-and-mean-codes-are-necessary.aspx&amp;amp;t=Readable%2c+lean+and+mean+codes+are+necessary" target="_blank" title="Submit Readable, lean and mean codes are necessary to DotNetKicks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Facebook.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://del.icio.us/post?url=http://geeks.netindonesia.net/blogs/eriawan/archive/2007/11/19/readable-lean-and-mean-codes-are-necessary.aspx&amp;amp;title=Readable%2c+lean+and+mean+codes+are+necessary" target="_blank" title="Submit Readable, lean and mean codes are necessary to del.icio.us"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Delicious.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.digg.com/submit?url=http://geeks.netindonesia.net/blogs/eriawan/archive/2007/11/19/readable-lean-and-mean-codes-are-necessary.aspx&amp;amp;phase=2" target="_blank" title="Submit Readable, lean and mean codes are necessary to digg.com"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Digg.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://geeks.netindonesia.net/blogs/eriawan/archive/2007/11/19/readable-lean-and-mean-codes-are-necessary.aspx&amp;amp;title=Readable%2c+lean+and+mean+codes+are+necessary" target="_blank" title="Add Readable, lean and mean codes are necessary to Live Bookmarks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Live.16.gif" border="0"&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://geeks.netindonesia.net/aggbug.aspx?PostID=24154" width="1" height="1"&gt;</content><author><name>eriawan</name><uri>http://geeks.netindonesia.net/members/eriawan.aspx</uri></author><category term=".NET in development" scheme="http://geeks.netindonesia.net/blogs/eriawan/archive/tags/.NET+in+development/default.aspx" /><category term="Personal of me" scheme="http://geeks.netindonesia.net/blogs/eriawan/archive/tags/Personal+of+me/default.aspx" /><category term="moi..." scheme="http://geeks.netindonesia.net/blogs/eriawan/archive/tags/moi_2E002E002E00_/default.aspx" /><category term="visual studio" scheme="http://geeks.netindonesia.net/blogs/eriawan/archive/tags/visual+studio/default.aspx" /></entry><entry><title>Cool VS SDK addition from codeplex: VSIPFactory - A Software Factory for Visual Studio Extensibility - Home</title><link rel="alternate" type="text/html" href="http://geeks.netindonesia.net/blogs/eriawan/archive/2007/08/13/Cool-VS-SDK-addition-from-codeplex_3A00_-VSIPFactory-_2D00_-A-Software-Factory-for-Visual-Studio-Extensibility-_2D00_-Home.aspx" /><id>http://geeks.netindonesia.net/blogs/eriawan/archive/2007/08/13/Cool-VS-SDK-addition-from-codeplex_3A00_-VSIPFactory-_2D00_-A-Software-Factory-for-Visual-Studio-Extensibility-_2D00_-Home.aspx</id><published>2007-08-13T09:38:43Z</published><updated>2007-08-13T09:38:43Z</updated><content type="html">&lt;p&gt;Check this out:&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.codeplex.com/vsipfactory"&gt;VSIPFactory - A Software Factory for Visual Studio Extensibility - Home&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Now, VS SDK has its own software factory too! :)&lt;/p&gt; &lt;p&gt;Don&amp;#39;t forget to keep up with this MSDN blog:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/jackgr/"&gt;Jack Greenfield&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Knowing .NET is not enough, knowing VS 2005 and its SDK is quite geeky enough, isn&amp;#39;t it? :)&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post: &lt;/strong&gt;&lt;a href="mailto:?body=Thought you might like this: http://geeks.netindonesia.net/blogs/eriawan/archive/2007/08/13/Cool-VS-SDK-addition-from-codeplex_3A00_-VSIPFactory-_2D00_-A-Software-Factory-for-Visual-Studio-Extensibility-_2D00_-Home.aspx&amp;amp;subject=Cool VS SDK addition from codeplex: VSIPFactory - A Software Factory for Visual Studio Extensibility - Home" target="_blank" title="Send via email"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Mail.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.facebook.com/sharer.php?u=http://geeks.netindonesia.net/blogs/eriawan/archive/2007/08/13/Cool-VS-SDK-addition-from-codeplex_3A00_-VSIPFactory-_2D00_-A-Software-Factory-for-Visual-Studio-Extensibility-_2D00_-Home.aspx&amp;amp;t=Cool+VS+SDK+addition+from+codeplex%3a+VSIPFactory+-+A+Software+Factory+for+Visual+Studio+Extensibility+-+Home" target="_blank" title="Submit Cool VS SDK addition from codeplex: VSIPFactory - A Software Factory for Visual Studio Extensibility - Home to DotNetKicks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Facebook.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://del.icio.us/post?url=http://geeks.netindonesia.net/blogs/eriawan/archive/2007/08/13/Cool-VS-SDK-addition-from-codeplex_3A00_-VSIPFactory-_2D00_-A-Software-Factory-for-Visual-Studio-Extensibility-_2D00_-Home.aspx&amp;amp;title=Cool+VS+SDK+addition+from+codeplex%3a+VSIPFactory+-+A+Software+Factory+for+Visual+Studio+Extensibility+-+Home" target="_blank" title="Submit Cool VS SDK addition from codeplex: VSIPFactory - A Software Factory for Visual Studio Extensibility - Home to del.icio.us"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Delicious.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.digg.com/submit?url=http://geeks.netindonesia.net/blogs/eriawan/archive/2007/08/13/Cool-VS-SDK-addition-from-codeplex_3A00_-VSIPFactory-_2D00_-A-Software-Factory-for-Visual-Studio-Extensibility-_2D00_-Home.aspx&amp;amp;phase=2" target="_blank" title="Submit Cool VS SDK addition from codeplex: VSIPFactory - A Software Factory for Visual Studio Extensibility - Home to digg.com"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Digg.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://geeks.netindonesia.net/blogs/eriawan/archive/2007/08/13/Cool-VS-SDK-addition-from-codeplex_3A00_-VSIPFactory-_2D00_-A-Software-Factory-for-Visual-Studio-Extensibility-_2D00_-Home.aspx&amp;amp;title=Cool+VS+SDK+addition+from+codeplex%3a+VSIPFactory+-+A+Software+Factory+for+Visual+Studio+Extensibility+-+Home" target="_blank" title="Add Cool VS SDK addition from codeplex: VSIPFactory - A Software Factory for Visual Studio Extensibility - Home to Live Bookmarks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Live.16.gif" border="0"&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://geeks.netindonesia.net/aggbug.aspx?PostID=21032" width="1" height="1"&gt;</content><author><name>eriawan</name><uri>http://geeks.netindonesia.net/members/eriawan.aspx</uri></author><category term="Software Factory" scheme="http://geeks.netindonesia.net/blogs/eriawan/archive/tags/Software+Factory/default.aspx" /></entry><entry><title>C# 3.0: The Evolution Of LINQ And Its Impact On The Design Of C# -- MSDN Magazine, June 2007</title><link rel="alternate" type="text/html" href="http://geeks.netindonesia.net/blogs/eriawan/archive/2007/07/16/C_2300_-3.0_3A00_-The-Evolution-Of-LINQ-And-Its-Impact-On-The-Design-Of-C_2300_-_2D002D00_-MSDN-Magazine_2C00_-June-2007.aspx" /><id>http://geeks.netindonesia.net/blogs/eriawan/archive/2007/07/16/C_2300_-3.0_3A00_-The-Evolution-Of-LINQ-And-Its-Impact-On-The-Design-Of-C_2300_-_2D002D00_-MSDN-Magazine_2C00_-June-2007.aspx</id><published>2007-07-16T06:40:00Z</published><updated>2007-07-16T06:40:00Z</updated><content type="html">&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/msdnmag/issues/07/06/csharp30/default.aspx"&gt;C# 3.0: The Evolution Of LINQ And Its Impact On The Design Of C# -- MSDN Magazine, June 2007&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I know it&amp;#39;s rather stale, but see for your self. :)&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post: &lt;/strong&gt;&lt;a href="mailto:?body=Thought you might like this: http://geeks.netindonesia.net/blogs/eriawan/archive/2007/07/16/C_2300_-3.0_3A00_-The-Evolution-Of-LINQ-And-Its-Impact-On-The-Design-Of-C_2300_-_2D002D00_-MSDN-Magazine_2C00_-June-2007.aspx&amp;amp;subject=C# 3.0: The Evolution Of LINQ And Its Impact On The Design Of C# -- MSDN Magazine, June 2007" target="_blank" title="Send via email"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Mail.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.facebook.com/sharer.php?u=http://geeks.netindonesia.net/blogs/eriawan/archive/2007/07/16/C_2300_-3.0_3A00_-The-Evolution-Of-LINQ-And-Its-Impact-On-The-Design-Of-C_2300_-_2D002D00_-MSDN-Magazine_2C00_-June-2007.aspx&amp;amp;t=C%23+3.0%3a+The+Evolution+Of+LINQ+And+Its+Impact+On+The+Design+Of+C%23+--+MSDN+Magazine%2c+June+2007" target="_blank" title="Submit C# 3.0: The Evolution Of LINQ And Its Impact On The Design Of C# -- MSDN Magazine, June 2007 to DotNetKicks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Facebook.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://del.icio.us/post?url=http://geeks.netindonesia.net/blogs/eriawan/archive/2007/07/16/C_2300_-3.0_3A00_-The-Evolution-Of-LINQ-And-Its-Impact-On-The-Design-Of-C_2300_-_2D002D00_-MSDN-Magazine_2C00_-June-2007.aspx&amp;amp;title=C%23+3.0%3a+The+Evolution+Of+LINQ+And+Its+Impact+On+The+Design+Of+C%23+--+MSDN+Magazine%2c+June+2007" target="_blank" title="Submit C# 3.0: The Evolution Of LINQ And Its Impact On The Design Of C# -- MSDN Magazine, June 2007 to del.icio.us"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Delicious.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.digg.com/submit?url=http://geeks.netindonesia.net/blogs/eriawan/archive/2007/07/16/C_2300_-3.0_3A00_-The-Evolution-Of-LINQ-And-Its-Impact-On-The-Design-Of-C_2300_-_2D002D00_-MSDN-Magazine_2C00_-June-2007.aspx&amp;amp;phase=2" target="_blank" title="Submit C# 3.0: The Evolution Of LINQ And Its Impact On The Design Of C# -- MSDN Magazine, June 2007 to digg.com"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Digg.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://geeks.netindonesia.net/blogs/eriawan/archive/2007/07/16/C_2300_-3.0_3A00_-The-Evolution-Of-LINQ-And-Its-Impact-On-The-Design-Of-C_2300_-_2D002D00_-MSDN-Magazine_2C00_-June-2007.aspx&amp;amp;title=C%23+3.0%3a+The+Evolution+Of+LINQ+And+Its+Impact+On+The+Design+Of+C%23+--+MSDN+Magazine%2c+June+2007" target="_blank" title="Add C# 3.0: The Evolution Of LINQ And Its Impact On The Design Of C# -- MSDN Magazine, June 2007 to Live Bookmarks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Live.16.gif" border="0"&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://geeks.netindonesia.net/aggbug.aspx?PostID=20735" width="1" height="1"&gt;</content><author><name>eriawan</name><uri>http://geeks.netindonesia.net/members/eriawan.aspx</uri></author></entry><entry><title>Making your ASP.NET page to be protected from browser's back button?</title><link rel="alternate" type="text/html" href="http://geeks.netindonesia.net/blogs/eriawan/archive/2007/07/11/Making-your-ASP.NET-page-to-be-protected-from-browser_2700_s-back-button_3F00_.aspx" /><id>http://geeks.netindonesia.net/blogs/eriawan/archive/2007/07/11/Making-your-ASP.NET-page-to-be-protected-from-browser_2700_s-back-button_3F00_.aspx</id><published>2007-07-11T07:41:00Z</published><updated>2007-07-11T07:41:00Z</updated><content type="html">&lt;p&gt;From all I&amp;#39;ve read from many web sites (unfortunately not in codeproject), you can make your ASP.NET pages protected from user&amp;#39;s misbehavior such as pressing browser&amp;#39;s Back button while your data entry is not yet saved, or you want to ensure the&amp;nbsp;security of transactional data, in such as online banking.&lt;/p&gt;&lt;p&gt;But most of them are also giving you confusing or misleading information. Fo example, you have to put the code at the right event to do this. For example, in Page_Load, and this is the safest bet. Also from what I know, some websites give you &amp;quot;Page is expired&amp;quot; message. If you search this using Google, many has just given you example using &lt;font face="Courier New" size="2"&gt;Response.AppendHeader&lt;/font&gt; with &lt;font face="Courier New" size="2"&gt;Pragma&lt;/font&gt; and &lt;font face="Courier New" size="2"&gt;no-cache&lt;/font&gt; parameters, but this sample isn&amp;#39;t enough for other browser such as FireFox. After some experiments, I found&amp;nbsp; a simple one.&lt;/p&gt;&lt;p&gt;This is the code:&lt;/p&gt;&lt;pre class="code"&gt;        &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Page_Load(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; sender, &lt;span style="color:#2b91af;"&gt;EventArgs&lt;/span&gt; e)
        {
            &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.Response.Expires = 0;
            &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.Response.AppendHeader(&lt;span style="color:#a31515;"&gt;&amp;quot;Pragma&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;no-cache&amp;quot;&lt;/span&gt;);
            &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.Response.Cache.SetNoStore();
        }
&lt;/pre&gt;&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;The code above has some drawbacks:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;It doesn&amp;#39;t check whether you should make it expire longer or not. It should be long enough if you predict that not all of your audience has quite fast bandwidth. The fact is, &lt;strong&gt;&lt;em&gt;always assume that you have slow bandwidth in Indonesia&lt;/em&gt;&lt;/strong&gt;.&lt;/li&gt;&lt;li&gt;The forward button (after pressing back button) will give you the same &amp;quot;Page is expired&amp;quot;. This can be quite confusing.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Is there any solution better than this? Please let me know. :)&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post: &lt;/strong&gt;&lt;a href="mailto:?body=Thought you might like this: http://geeks.netindonesia.net/blogs/eriawan/archive/2007/07/11/Making-your-ASP.NET-page-to-be-protected-from-browser_2700_s-back-button_3F00_.aspx&amp;amp;subject=Making your ASP.NET page to be protected from browser's back button?" target="_blank" title="Send via email"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Mail.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.facebook.com/sharer.php?u=http://geeks.netindonesia.net/blogs/eriawan/archive/2007/07/11/Making-your-ASP.NET-page-to-be-protected-from-browser_2700_s-back-button_3F00_.aspx&amp;amp;t=Making+your+ASP.NET+page+to+be+protected+from+browser%27s+back+button%3f" target="_blank" title="Submit Making your ASP.NET page to be protected from browser's back button? to DotNetKicks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Facebook.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://del.icio.us/post?url=http://geeks.netindonesia.net/blogs/eriawan/archive/2007/07/11/Making-your-ASP.NET-page-to-be-protected-from-browser_2700_s-back-button_3F00_.aspx&amp;amp;title=Making+your+ASP.NET+page+to+be+protected+from+browser%27s+back+button%3f" target="_blank" title="Submit Making your ASP.NET page to be protected from browser's back button? to del.icio.us"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Delicious.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.digg.com/submit?url=http://geeks.netindonesia.net/blogs/eriawan/archive/2007/07/11/Making-your-ASP.NET-page-to-be-protected-from-browser_2700_s-back-button_3F00_.aspx&amp;amp;phase=2" target="_blank" title="Submit Making your ASP.NET page to be protected from browser's back button? to digg.com"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Digg.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://geeks.netindonesia.net/blogs/eriawan/archive/2007/07/11/Making-your-ASP.NET-page-to-be-protected-from-browser_2700_s-back-button_3F00_.aspx&amp;amp;title=Making+your+ASP.NET+page+to+be+protected+from+browser%27s+back+button%3f" target="_blank" title="Add Making your ASP.NET page to be protected from browser's back button? to Live Bookmarks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Live.16.gif" border="0"&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://geeks.netindonesia.net/aggbug.aspx?PostID=20637" width="1" height="1"&gt;</content><author><name>eriawan</name><uri>http://geeks.netindonesia.net/members/eriawan.aspx</uri></author><category term=".NET in development" scheme="http://geeks.netindonesia.net/blogs/eriawan/archive/tags/.NET+in+development/default.aspx" /><category term="ASP.NET" scheme="http://geeks.netindonesia.net/blogs/eriawan/archive/tags/ASP.NET/default.aspx" /></entry><entry><title>Heh. A new build of Windows Live Writer! I can post some formatted C# and VB.NET too!</title><link rel="alternate" type="text/html" href="http://geeks.netindonesia.net/blogs/eriawan/archive/2007/06/05/Heh.-A-new-build-of-Windows-Live-Writer_2100_-I-can-post-some-formatted-C_2300_-and-VB.NET-too_2100_.aspx" /><id>http://geeks.netindonesia.net/blogs/eriawan/archive/2007/06/05/Heh.-A-new-build-of-Windows-Live-Writer_2100_-I-can-post-some-formatted-C_2300_-and-VB.NET-too_2100_.aspx</id><published>2007-06-05T21:00:00Z</published><updated>2007-06-05T21:00:00Z</updated><content type="html">&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="wlWriterSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:72fdd96f-d6a4-4fa1-881e-a3710019b41f" style="margin:0px;padding:0px;display:inline;"&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/windows%20live%20writer" rel="tag"&gt;windows live writer&lt;/a&gt;&lt;/div&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Have you guys downloaded new build of Windows Live Writer? Although still in Beta stage, I consider it&amp;#39;s quite nearly complete and can be more fun and productive to use. Oh, the version and build number at the time of this writing is 1.0 (12.0.1183.516).&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;I admit, I&amp;#39;m still a new user of Windows Live Writer, but I like the ease of use of the UI and I can easily save drafts for later postings. The last feature I mention is my favorite one, since sometimes I can&amp;#39;t go directly write and edit blogs directly on this site and on my &lt;a href="http://erikuma.spaces.live.com/"&gt;other Spaces Live blogs&lt;/a&gt;. Supports for more blog types (not just Wordpress, Spaces Live, Blogger&amp;nbsp;and Community Server) is added in this release, and they surely fix some nasty Wordpress blog submit bugs.&lt;/p&gt; &lt;p&gt;What also excites me, now I can harness many kinds of Windows Live Writer plugins at &lt;a href="http://gallery.live.com"&gt;Live Gallery&lt;/a&gt;. Yup, one of the nice feature is copying source code from Visual Studio IDE and get formatted! Like this one:&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System.Text;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;namespace&lt;/span&gt; ConsoleApplication1&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Program&lt;br /&gt;&lt;/span&gt;    {&lt;br /&gt;        &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Main(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;[] args)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515;"&gt;&amp;quot;Hello world!&amp;quot;&lt;/span&gt;);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Cool, isn&amp;#39;t it? :)&lt;/p&gt;
&lt;p&gt;Download the latest &lt;a href="http://writer.live.com/"&gt;Windows Live Writer&lt;/a&gt;&amp;nbsp;immediately!&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post: &lt;/strong&gt;&lt;a href="mailto:?body=Thought you might like this: http://geeks.netindonesia.net/blogs/eriawan/archive/2007/06/05/Heh.-A-new-build-of-Windows-Live-Writer_2100_-I-can-post-some-formatted-C_2300_-and-VB.NET-too_2100_.aspx&amp;amp;subject=Heh. A new build of Windows Live Writer! I can post some formatted C# and VB.NET too!" target="_blank" title="Send via email"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Mail.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.facebook.com/sharer.php?u=http://geeks.netindonesia.net/blogs/eriawan/archive/2007/06/05/Heh.-A-new-build-of-Windows-Live-Writer_2100_-I-can-post-some-formatted-C_2300_-and-VB.NET-too_2100_.aspx&amp;amp;t=Heh.+A+new+build+of+Windows+Live+Writer!+I+can+post+some+formatted+C%23+and+VB.NET+too!" target="_blank" title="Submit Heh. A new build of Windows Live Writer! I can post some formatted C# and VB.NET too! to DotNetKicks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Facebook.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://del.icio.us/post?url=http://geeks.netindonesia.net/blogs/eriawan/archive/2007/06/05/Heh.-A-new-build-of-Windows-Live-Writer_2100_-I-can-post-some-formatted-C_2300_-and-VB.NET-too_2100_.aspx&amp;amp;title=Heh.+A+new+build+of+Windows+Live+Writer!+I+can+post+some+formatted+C%23+and+VB.NET+too!" target="_blank" title="Submit Heh. A new build of Windows Live Writer! I can post some formatted C# and VB.NET too! to del.icio.us"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Delicious.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.digg.com/submit?url=http://geeks.netindonesia.net/blogs/eriawan/archive/2007/06/05/Heh.-A-new-build-of-Windows-Live-Writer_2100_-I-can-post-some-formatted-C_2300_-and-VB.NET-too_2100_.aspx&amp;amp;phase=2" target="_blank" title="Submit Heh. A new build of Windows Live Writer! I can post some formatted C# and VB.NET too! to digg.com"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Digg.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://geeks.netindonesia.net/blogs/eriawan/archive/2007/06/05/Heh.-A-new-build-of-Windows-Live-Writer_2100_-I-can-post-some-formatted-C_2300_-and-VB.NET-too_2100_.aspx&amp;amp;title=Heh.+A+new+build+of+Windows+Live+Writer!+I+can+post+some+formatted+C%23+and+VB.NET+too!" target="_blank" title="Add Heh. A new build of Windows Live Writer! I can post some formatted C# and VB.NET too! to Live Bookmarks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Live.16.gif" border="0"&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://geeks.netindonesia.net/aggbug.aspx?PostID=18839" width="1" height="1"&gt;</content><author><name>eriawan</name><uri>http://geeks.netindonesia.net/members/eriawan.aspx</uri></author><category term="Personal of me" scheme="http://geeks.netindonesia.net/blogs/eriawan/archive/tags/Personal+of+me/default.aspx" /><category term="moi..." scheme="http://geeks.netindonesia.net/blogs/eriawan/archive/tags/moi_2E002E002E00_/default.aspx" /></entry></feed>