<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>AJ's blog</title>
	<atom:link href="http://ajdotnet.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://ajdotnet.wordpress.com</link>
	<description>Thoughts and informations I think worthwhile to share...</description>
	<lastBuildDate>Mon, 22 Jun 2009 19:56:52 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<image>
		<url>http://www.gravatar.com/blavatar/e3d62c21bef499236be83d5bda37b578?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>AJ's blog</title>
		<link>http://ajdotnet.wordpress.com</link>
	</image>
			<item>
		<title>Heute mal drei Kreuze&#8230;</title>
		<link>http://ajdotnet.wordpress.com/2009/06/22/heute-mal-drei-kreuze/</link>
		<comments>http://ajdotnet.wordpress.com/2009/06/22/heute-mal-drei-kreuze/#comments</comments>
		<pubDate>Mon, 22 Jun 2009 18:39:11 +0000</pubDate>
		<dc:creator>ajdotnet</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>

		<guid isPermaLink="false">http://ajdotnet.wordpress.com/?p=270</guid>
		<description><![CDATA[Note: Since this post is about German politics, it’s consequently in German.
You may find a similar obituary here. Background information can be found here.
Am 18.06.2009 hat die Bundesregierung das
“Gesetz zur Erschwerung des Zugangs zu kinderpornografischen Inhalten in Kommunikationsnetzen”
verabschiedet. Dieses Gesetz soll Opfern von Kinderpornographie helfen, indem der (zufällige) Zugriff auf entsprechende Seiten im Web durch [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ajdotnet.wordpress.com&blog=305378&post=270&subd=ajdotnet&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><blockquote><p>Note: Since this post is about German politics, it’s consequently in German.<br />
You may find a similar obituary <a href="http://drop.io/i51wnes/asset/rip5-eng-png" target="_blank">here</a>. Background information can be found <a href="http://netzpolitik.org/2009/the-dawning-of-internet-censorship-in-germany/" target="_blank">here</a>.</p></blockquote>
<p>Am 18.06.2009 hat die Bundesregierung das</p>
<p align="center">“<strong>Gesetz zur Erschwerung des Zugangs zu kinderpornografischen Inhalten in Kommunikationsnetzen</strong>”</p>
<p>verabschiedet. Dieses Gesetz soll Opfern von Kinderpornographie helfen, indem der (zufällige) Zugriff auf entsprechende Seiten im Web durch eine Internetsperre (soll heißen, die Umleitung auf eine Hinweisseite auf Basis von DNS) unterbindet. Die Diskussion um dieses Thema und die gesetzliche Verankerung ist ein Trauerspiel sondergleichen und veranlasst mich zu dieser virtuellen Todesanzeige.</p>
<p> </p>
<p align="center"><em><strong><span style="font-size:small;">Wir tragen also zu Grabe…</span></strong></em></p>
<p align="center"> </p>
<p align="center"><img style="margin:0 0 5px;" src="http://ajdotnet.files.wordpress.com/2009/06/kreuz.jpg" alt="" /> <br />
<em><strong>Demokratie und Rechtsstaatlichkeit.</strong></em></p>
<p align="center">Im gleichen Jahr, in dem wir den 60. Geburtstag des Grundgesetzes feiern, wird ein Gesetz verabschiedet, das demokratischen Grundsätzen, der Rechtsstaatlichkeit und dem Föderalismus Hohn spricht.<br />
Das Prinzip der Gewaltenteilung – eine der Säulen unserer Gesellschaft – gilt nicht mehr. Eine Polizeibehörde wird Ermittler, Ankläger, Richter und vollzugsverantwortlich. Eine öffentliche Kontrolle, wie sie selbst bei den Geheimdiensten für notwendig erachtet wird, gibt es nicht. Der faule Kompromiss nachträglicher Kontrollen ist ein reiner Verwaltungsakt und somit kaum geeignet, Grundrechtsprinzipien aufrecht zu erhalten.</p>
<p align="center"> </p>
<p align="center"><img style="margin:0 0 5px;" src="http://ajdotnet.files.wordpress.com/2009/06/kreuz.jpg" alt="" /> <br />
<strong>Die <em>Erinnerung an missbrauchte Kinder</em></strong></p>
<p align="center">Dank Sichtschutz dürfen sie bald wieder im Verborgenen leiden.</p>
<p align="center">Wäre es um die Opfer gegangen hätte man die Seiten abgeschaltet. So wie es Carechild, AK Zensur und Jugenschutz.net gezeigt haben. Die Seiten <em>sind</em> und <em>waren </em>aus Sperrlisten bekannt – getan hat das BKA offensichtlich nichts, genauso wenig wie das Bundesfamilienministerium. Und sie taten nicht nur <em>vor </em>der Diskussion nichts (für diesen Zeitraum hätten sie immerhin technische oder personelle Unfähigkeit ins Feld führen können). Sie taten auch <em>während </em>der Diskussion nichts, obwohl ihnen die Möglichkeiten deutlich aufgezeigt wurden.<br />
<em>War es politisch nicht opportun der Argumentation der Regierung durch Abschaltung den Boden zu entziehen?</em></p>
<p align="center">Wer dachte, es gibt nichts widerwärtigeres als Kinderschändung, der wird mit dieser Instrumentalisierung derselben zur Selbstdarstellung und zu parteipolitischen Zwecken (fast) eines Besseren belehrt.</p>
<p align="center"> </p>
<p align="center"><img style="margin:0 0 5px;" src="http://ajdotnet.files.wordpress.com/2009/06/kreuz.jpg" alt="" /><br />
<strong>Jede Form von <em>politischem Anstand</em></strong></p>
<p align="center">Die Bundesfamilienministerin als Vorreiterin, die Minister für Inneres, Justiz und Wirtschaft im Gefolge – ein nicht unerheblicher Anteil unserer gewählten Regierung –, dazu jede Menge parlamentarisches Fußvolk. Und gemeinsam lassen sie ein Feuerwerk an frech ausgedachten Behauptungen, bewussten Falschinformationen und offenen Lügen los. Wer dennoch dagegen argumentiert, der wird in die Nähe von Kinderschändern gerückt oder zum Internet-Anarchisten abgestempelt, der auf dem Rücken missbrauchter Kinder einer fragwürdigen Utopie nachhängt.</p>
<p align="center">Und <em>dieser</em> Regierung soll ich glauben, dass ein Gesetz, dass den Aufbau einer Zensurinfrastruktur nach sich zieht, <em>nicht </em>in andere Bereiche ausgedehnt werden wird?</p>
<p align="center"> </p>
<p align="center">***********************</p>
<p align="center"> </p>
<p>PS: Ich habe lange überlegt, ob ich diesen Beitrag tatsächlich veröffentlichen soll. Dann habe ich misch dabei erwischt, den Artikel daraufhin Korrektur zu lesen, ob er womöglich strafrechtlich relevante Aussagen enthält. Wenn die Schere im Kopf am Schneiden ist&#8230;</p>
<p>PPS: Ich habe auf Links verzichtet. Nicht weil ich die Aussagen nicht belegen kann oder will, sondern schlicht weil es einfach zu viele sind. Daher hier nur folgende Verweise:</p>
<ul>
<li>“Gutachten: BKA könnte mehr zum Löschen von Kinderpornos beitragen” (<a href="http://www.heise.de/ct/Gutachten-BKA-koennte-mehr-zum-Loeschen-von-Kinderpornos-beitragen--/news/meldung/140695" target="_blank">heise</a>) betrachtet nur einen Teilaspekt, hat aber eine Linkliste am Ende, die u.a. auf sehr häufig zitierte grundlegende Heise-Artikel zum Thema verweist.</li>
<li>Solange es verfügbar ist bietet das Forum zur “Petition: Internet &#8211; Keine Indizierung und Sperrung von Internetseiten” (<a href="https://epetitionen.bundestag.de/index.php?action=petition;sa=details;petition=3860" target="_blank">Online-Petition beim Petitionsausschuss des Deutschen Bundestages</a>) jede Menge Meinungsäußerungen, Hinweise auf Informationen und insgesamt ein Bild, wie es um die Stimmung der Teilnehmer bestellt ist.</li>
<li>netzpolitik.org ist eine gute Adresse um auf dem Laufenden zu bleiben. Zum Thema gibt es dort die “Kommentierte Zensursula – Linkliste” (<a href="http://netzpolitik.org/2009/kommentierte-zensursula-linkliste/" target="_blank">netzpolitik.org</a>), die hier stellvertretend für viele weitere im Netz steht.</li>
</ul>
<p>PPPS: Stellvertretend für die Opfer: <a title="http://mogis.wordpress.com/" href="http://mogis.wordpress.com/" target="_blank">MissbrauchsOpfer Gegen InternetSperren</a>.</p>
<p><strong>In Trauer,<br />
AJ.NET</strong></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ajdotnet.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ajdotnet.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ajdotnet.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ajdotnet.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ajdotnet.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ajdotnet.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ajdotnet.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ajdotnet.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ajdotnet.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ajdotnet.wordpress.com/270/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ajdotnet.wordpress.com&blog=305378&post=270&subd=ajdotnet&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ajdotnet.wordpress.com/2009/06/22/heute-mal-drei-kreuze/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/03b347f75b708670587fdbae73778116?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ajdotnet</media:title>
		</media:content>

		<media:content url="http://ajdotnet.files.wordpress.com/2009/06/kreuz.jpg" medium="image" />

		<media:content url="http://ajdotnet.files.wordpress.com/2009/06/kreuz.jpg" medium="image" />

		<media:content url="http://ajdotnet.files.wordpress.com/2009/06/kreuz.jpg" medium="image" />
	</item>
		<item>
		<title>Visual Studio 2010 Architecture Edition</title>
		<link>http://ajdotnet.wordpress.com/2009/03/29/visual-studio-2010-architecture-edition/</link>
		<comments>http://ajdotnet.wordpress.com/2009/03/29/visual-studio-2010-architecture-edition/#comments</comments>
		<pubDate>Sun, 29 Mar 2009 16:04:17 +0000</pubDate>
		<dc:creator>ajdotnet</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[.NET Framework]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Design Time]]></category>
		<category><![CDATA[Software Architecture]]></category>
		<category><![CDATA[Software Developers]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://ajdotnet.wordpress.com/?p=258</guid>
		<description><![CDATA[Today I’d like to share another left over from the SDX Talk I mentioned earlier: Basically some screenshots from Visual Studio 2010 Architecture Edition (VSArch from now on). Don’t expect something fancy if you already know VSArch, I just couldn’t find all that much information on the Web beyond the two screenshots on the Microsoft [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ajdotnet.wordpress.com&blog=305378&post=258&subd=ajdotnet&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Today I’d like to share another left over from the SDX Talk I mentioned <a href="http://ajdotnet.wordpress.com/2009/03/21/going-parallel/" target="_blank">earlier</a>: Basically some screenshots from <strong><em>Visual Studio 2010 Architecture Edition</em></strong> (<em>VSArch </em>from now on). Don’t expect something fancy if you already know VSArch, I just couldn’t find all that much information on the Web beyond the <a href="http://www.microsoft.com/visualstudio/en-us/products/2010/default.mspx" target="_blank">two screenshots</a> on the Microsoft site.</p>
<p>The main new things within VSArch include the <em>Architecture Explorer</em>, <em>UML Support</em>, and the <em>Layer Diagram</em>.</p>
<p><strong>Architecture Explorer</strong></p>
<p><em>Note: To make the following more tangible I loaded a sample project I use regularly as test harness and took respective screenshots while I analyzed it. Click the images for a larger view…</em></p>
<p>The Architecture Explorer is about getting a better view into existing code. Whether you join a project that is under way, whether you have lost control over your code, or whether you just need to spice up your documentation. Architecture Explorer helps you by visualizing your solution artifacts and dependencies. Artifacts include the classical code artifacts (classes, interfaces, etc.), as well as whole assemblies, files, and namespaces.</p>
<p>Architecture Explorer lets you select those artifacts, display graphs with dependencies, and even navigate along those dependencies and in and out of detail levels.</p>
<p>The following screenshot shows VSArch. The docked pane on the bottom contains the Architecture Explorer that acts as “navigation and control center”. This is where you select your artifacts and visualizations. It could certainly use some improvement from a usability perspective, but it does the job anyway.</p>
<p><a href="http://ajdotnet.files.wordpress.com/2009/03/vsarch_assemblies.jpg" target="image"><img src="http://ajdotnet.files.wordpress.com/2009/03/vsarch_assemblies_small.jpg" alt="vsarch_assemblies.jpg" /></a></p>
<p>The screenshot shows two different visualizations of the assembly dependencies in my solution, a matrix view and a directed graph. Just to stress the fact: This was generated out of the solution, by analyzing the project dependencies.</p>
<p>The next screenshot shows a mixture of various artifacts, including classes, interfaces, even files, across parts of or the whole solution.</p>
<p><a href="http://ajdotnet.files.wordpress.com/2009/03/vsarch_artifacts.jpg" target="image"><img src="http://ajdotnet.files.wordpress.com/2009/03/vsarch_artifacts_small.jpg" alt="vsarch_artifacts.jpg" /></a></p>
<p>Depending on what filters you set, this graph could give you a high level overview of certain artifacts and their dependencies. For example you could easily spot hot spots, like the one class your whole system depends upon. Or make sure the dependencies are nicely managed via interfaces and find undue relationships. Even spot unreferenced and therefore dead graphs.</p>
<p>Once you go one level deeper, you may want to cluster the artifacts by some category.</p>
<p><a href="http://ajdotnet.files.wordpress.com/2009/03/vsarch_relationship.jpg" target="image"><img src="http://ajdotnet.files.wordpress.com/2009/03/vsarch_relationship_small.jpg" alt="vsarch_relationship.jpg" /></a></p>
<p>The image shows again artifacts and their dependencies, but this time grouped by the project to which they belong. It also shows what kind of relationship a line represents and lets you navigate along that dependency.</p>
<p>The Architecture Explorer should help getting a better understanding of your code. It helps you to detect <a href="http://en.wikipedia.org/wiki/Code_smells" target="_blank">code smells</a> or may guide your refactoring.</p>
<p><strong>UML Support</strong></p>
<p>Yes, UML like in, well <a href="http://en.wikipedia.org/wiki/Unified_Modeling_Language" target="_blank">UML</a>. Not extensively, but it includes activity diagram, component diagram, (logical) class diagram, sequence diagram, and use case diagram. I didn’t spend much time investigating them, just drew some diagrams in order to take the screen shots. Generally I can say that Microsoft can draw boxes and lines (big surprise here) but there is a lingering feeling that those diagram editors may not be finished yet (again, hardly surprising on a CTP).</p>
<p>Creating a new diagram is easy enough. Just create a new project of type “Modeling Project” and add an item:</p>
<p><a href="http://ajdotnet.files.wordpress.com/2009/03/vsarch_dialog.jpg" target="image"><img src="http://ajdotnet.files.wordpress.com/2009/03/vsarch_dialog_small.jpg" alt="vsarch_dialog.jpg" /></a></p>
<p>Everything starts with a use case, so here is our <strong>use case diagram</strong>:</p>
<p><a href="http://ajdotnet.files.wordpress.com/2009/03/vsarch_usecase.jpg" target="image"><img src="http://ajdotnet.files.wordpress.com/2009/03/vsarch_usecase_small.jpg" alt="vsarch_usecase.jpg" /></a></p>
<p>One can draw the diagram as he likes. As you can see from the context menu, there is something being worked on. Namely the “Link to Artifacts” entry shows the Architecture Explorer, yet I couldn’t quite figure out what’s behind this. Also note the validate entries which didn’t do very much, but we’ll see them later in the Layer Diagram.</p>
<p>Next on the list is <strong>activity diagram</strong>s:</p>
<p><a href="http://ajdotnet.files.wordpress.com/2009/03/vsarch_activity.jpg" target="image"><img src="http://ajdotnet.files.wordpress.com/2009/03/vsarch_activity_small.jpg" alt="vsarch_activity.jpg" /></a></p>
<p>Works as expected, no surprises, no hidden gems that I’ve found.</p>
<p>The same is true for the <strong>component diagram</strong>:</p>
<p><a href="http://ajdotnet.files.wordpress.com/2009/03/vsarch_component.jpg" target="image"><img src="http://ajdotnet.files.wordpress.com/2009/03/vsarch_component_small.jpg" alt="vsarch_component.jpg" /></a></p>
<p>Just a diagram, no surprises.</p>
<p>The <strong>logical class diagram </strong>gets more interesting:</p>
<p><a href="http://ajdotnet.files.wordpress.com/2009/03/vsarch_logicalclass.jpg" target="image"><img src="http://ajdotnet.files.wordpress.com/2009/03/vsarch_logicalclass_small.jpg" alt="vsarch_logicalclass.jpg" /></a></p>
<p>As you can see, it contains very .NETy stuff like enumerations. It also has these menu entries that hint on more to come in the future &#8212; right now the selected menu entry brings up the error message asking for a stereotype, yet I didn’t even find a way to set those. Also the editor may still need some work, e.g. one cannot drag classes in and out of packages.</p>
<p>As a side note: The relation between this logical class diagram and the already existing class diagram escapes me. At least they are a little redundant.</p>
<p>Next on the list is the <strong>sequence diagram</strong>. Rather than drawing one myself I reverse engineered the existing code:</p>
<p><a href="http://ajdotnet.files.wordpress.com/2009/03/vsarch_sequence.jpg" target="image"><img src="http://ajdotnet.files.wordpress.com/2009/03/vsarch_sequence_small.jpg" alt="vsarch_sequence.jpg" /></a></p>
<p>Quite nice and again, used this way it can help you documenting or just plain understanding existing code.</p>
<blockquote><p>Note: If you want to try that yourself, the CTP has a bug: You need to have a modeling project and at least one diagram before the menu entry “Generate Sequence Diagram” appears. And while you will be presented with a dialog asking what call depth to analyze, it usually works only for one level.</p></blockquote>
<p><strong>Layer Diagram.</strong></p>
<p>Now for the most dreadfully looking diagram (though Microsoft has a <a href="http://www.microsoft.com/visualstudio/en-us/content/images/screencap3.png" target="_blank">more colorful one</a> on its site…): Some boring connected blocks, meant to represent the layers of your architecture.</p>
<p><a href="http://ajdotnet.files.wordpress.com/2009/03/vsarch_layer.jpg" target="image"><img src="http://ajdotnet.files.wordpress.com/2009/03/vsarch_layer_small.jpg" alt="vsarch_layer.jpg" /></a></p>
<p>Actually this is one of the most interesting features for any architect and dev lead: <em>It’s a living beast! <img src='http://s.wordpress.com/wp-includes/images/smilies/face-devilish.png' alt=':evil:' class='wp-smiley' /> </em> </p>
<p>You can add assemblies as well as other artifacts to the bleak boxes. Afterwards you can actually validate whether the dependencies between those artifacts match or violate the dependencies implied by the diagram. In the screenshot you can see that I deliberately misplaced an assembly and consequently got a respective error. Using this feature an architect can ensure that all layer related architectural decisions are honored during development.</p>
<p><strong>To conclude… </strong></p>
<p>The Architecture Explorer is certainly a worthwhile feature and I also like the validation feature of the Layer Diagram. That’s certainly something new and not to be found in other products.</p>
<p>Generating sequence diagrams is nice but it remains to be seen whether this will allow roundtrip engineering. The logical class diagram doesn’t yet meet my expectations and it’s not quite clear to me how it will evolve. The other diagrams? Well, they just work. However in this group is nothing exciting for you if you already have another modeling tool like <a href="http://www.sparxsystems.com/products/ea/index.html" target="_blank">Enterprise Architect</a> (no advertising intended, just happens to be the one I’ve used recently…). And a dedicated tool probably will provide a more complete UML coverage. UML 2.0 has <a href="http://en.wikipedia.org/wiki/Unified_Modeling_Language#Diagrams_overview" target="_blank">13 types of diagrams</a>, including state diagrams, which is in my opinion the biggest gap in VSArch UML support.</p>
<p>Anyway, if that caught your attention and your interested in more details there are two options: One, <a href="http://www.microsoft.com/visualstudio/en-us/products/2010/default.mspx" target="_blank">download the CTP</a> and try for yourself. Two, if you want it more condensed and avoid the hassle with a VPC, watch a video with VSArch at work. For that there are two links I can provide:</p>
<ol>
<li>Peter Provost’s talk at the PDC. Go to the <a href="https://sessions.microsoftpdc.com/public/timeline.aspx" target="_blank">timeline on the PDC site</a>, search for TL15 and you should find “TL15 Architecture without Big Design Up Front”, which is about VSArch, despite the title. His talk was the role model for my analysis of VSArch, yet seeing it live could still give better insights.</li>
<li><a href="http://channel9.msdn.com/posts/VisualStudio/Visual-Studio-Team-System-2010-Week-on-Channel-9/" target="_blank">Visual Studio Team System 2010 Week on Channel 9</a> has a bunch of videos, especially the “Architecture Day” ones. “top down” and “bottom up” show VSArch at work.</li>
</ol>
<p>The final question however will be if all those features are compelling enough to actually <em>buy </em>the … <a href="http://www.microsoft.com/visualstudio/en-us/products/teamsystem/default.mspx#compare_products" target="_blank">Visual Studio Team Suite</a> (i.e. the “you get everything” package). Why not the Architecture Edition? Well, if you are a developer as well as an architect, the Architecture Edition lacks too much in the other areas. Given that there is usually quite a monetary gap between dev edition and team suite, that gap might very well be used to buy a 3rd party UML tool instead… .</p>
<p><span style="color:#008000;">That’s all for now folks,<br />
<strong>AJ.NET</strong></span><br />
<a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fajdotnet.wordpress.com%2f2009%2f03%2f29%2fvisual-studio-2010-architecture-edition%2f"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fajdotnet.wordpress.com%2f2009%2f03%2f29%2fvisual-studio-2010-architecture-edition%2f" border="0" alt="kick it on DotNetKicks.com" /></a></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ajdotnet.wordpress.com/258/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ajdotnet.wordpress.com/258/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ajdotnet.wordpress.com/258/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ajdotnet.wordpress.com/258/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ajdotnet.wordpress.com/258/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ajdotnet.wordpress.com/258/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ajdotnet.wordpress.com/258/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ajdotnet.wordpress.com/258/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ajdotnet.wordpress.com/258/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ajdotnet.wordpress.com/258/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ajdotnet.wordpress.com&blog=305378&post=258&subd=ajdotnet&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ajdotnet.wordpress.com/2009/03/29/visual-studio-2010-architecture-edition/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/03b347f75b708670587fdbae73778116?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ajdotnet</media:title>
		</media:content>

		<media:content url="http://ajdotnet.files.wordpress.com/2009/03/vsarch_assemblies_small.jpg" medium="image">
			<media:title type="html">vsarch_assemblies.jpg</media:title>
		</media:content>

		<media:content url="http://ajdotnet.files.wordpress.com/2009/03/vsarch_artifacts_small.jpg" medium="image">
			<media:title type="html">vsarch_artifacts.jpg</media:title>
		</media:content>

		<media:content url="http://ajdotnet.files.wordpress.com/2009/03/vsarch_relationship_small.jpg" medium="image">
			<media:title type="html">vsarch_relationship.jpg</media:title>
		</media:content>

		<media:content url="http://ajdotnet.files.wordpress.com/2009/03/vsarch_dialog_small.jpg" medium="image">
			<media:title type="html">vsarch_dialog.jpg</media:title>
		</media:content>

		<media:content url="http://ajdotnet.files.wordpress.com/2009/03/vsarch_usecase_small.jpg" medium="image">
			<media:title type="html">vsarch_usecase.jpg</media:title>
		</media:content>

		<media:content url="http://ajdotnet.files.wordpress.com/2009/03/vsarch_activity_small.jpg" medium="image">
			<media:title type="html">vsarch_activity.jpg</media:title>
		</media:content>

		<media:content url="http://ajdotnet.files.wordpress.com/2009/03/vsarch_component_small.jpg" medium="image">
			<media:title type="html">vsarch_component.jpg</media:title>
		</media:content>

		<media:content url="http://ajdotnet.files.wordpress.com/2009/03/vsarch_logicalclass_small.jpg" medium="image">
			<media:title type="html">vsarch_logicalclass.jpg</media:title>
		</media:content>

		<media:content url="http://ajdotnet.files.wordpress.com/2009/03/vsarch_sequence_small.jpg" medium="image">
			<media:title type="html">vsarch_sequence.jpg</media:title>
		</media:content>

		<media:content url="http://ajdotnet.files.wordpress.com/2009/03/vsarch_layer_small.jpg" medium="image">
			<media:title type="html">vsarch_layer.jpg</media:title>
		</media:content>

		<media:content url="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fajdotnet.wordpress.com%2f2009%2f03%2f29%2fvisual-studio-2010-architecture-edition%2f" medium="image">
			<media:title type="html">kick it on DotNetKicks.com</media:title>
		</media:content>
	</item>
		<item>
		<title>Being parallel?</title>
		<link>http://ajdotnet.wordpress.com/2009/03/27/being-parallel/</link>
		<comments>http://ajdotnet.wordpress.com/2009/03/27/being-parallel/#comments</comments>
		<pubDate>Fri, 27 Mar 2009 14:40:10 +0000</pubDate>
		<dc:creator>ajdotnet</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[.NET Framework]]></category>
		<category><![CDATA[Software Architecture]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[manycore; parallel]]></category>

		<guid isPermaLink="false">http://ajdotnet.wordpress.com/?p=231</guid>
		<description><![CDATA[As a follow-up to the last post, I’d like to review one question I got after the talks I held. That one was particularly interesting, because it highlights a certain aspect of the changes that we have to face with multiple cores and some misconceptions some people might have:
Doesn’t today’s multithreaded software profit from more [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ajdotnet.wordpress.com&blog=305378&post=231&subd=ajdotnet&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>As a follow-up to <a href="http://ajdotnet.wordpress.com/2009/03/21/going-parallel/" target="_blank">the last post</a>, I’d like to review one question I got after the talks I held. That one was particularly interesting, because it highlights a certain aspect of the changes that we have to face with multiple cores and some misconceptions some people might have:</p>
<p><strong>Doesn’t today’s multithreaded software profit from more cores <em>automatically</em>?</strong></p>
<p>The answer is a definite <em>yes and no</em>. <span style="text-decoration:underline;">Server software</span> like IIS or SQL Server has always been optimized for throughput (performance only secondary) and as long as the processing is CPU bound it will certainly put more cores to good use. That should result in better throughput (i.e. more requests handled at the same time), but not necessarily in better performance (i.e. the time to complete one request).</p>
<p>The more interesting observation however is on the client: <span style="text-decoration:underline;">Client applications</span> follow different use cases for multithreading, actually mainly two of them:</p>
<ol>
<li><strong>Avoid blocking of some task </strong>while processing something else. Examples include keeping the Windows UIs responsive (i.e. work around the UI’s thread affinity), Windows Services (their <a href="http://msdn.microsoft.com/en-us/library/ms685149.aspx" target="_blank">service control handler</a> is invoked by the SCM and <a href="http://ajdotnet.wordpress.com/2007/10/14/hosting-wf/" target="_blank">has to return</a> in a certain amount of time).</li>
<li>Be able to spend processing time on something valuable while <strong>one task is blocked waiting for something </strong>to happen. Blocking regularly happens during some kind of I/O, especially network calls. This is the „call WebService asynchronously and do something worthwhile until the call returns“ scenario.</li>
</ol>
<p>Just different sides of the same coin actually. Please note that neither use case has been about <em>actual </em>performance, as in doing things really faster. The first one is about <em>perceived </em>performance by reducing latency for some favored task, the second one improves performance, albeit not by doing things faster but by avoiding unnecessary wait times. Anyway, this works quite well even (or rather especially) on single core machines.</p>
<p>Let’s dig deeper into an example: Say a lengthy CPU intensive calculation is triggered by a button. The time spend on updating the UI and doing the calculation is denoted in the following picture, the red line represents the executing thread:</p>
<p><img src="http://ajdotnet.files.wordpress.com/2009/03/mt1.jpg" alt="" /></p>
<p>The calculation is done on the UI thread, giving it peek performance, but at the same time freezing the UI until the calculation has finished. The typical “optimization” is putting the calculation on a second thread, e.g. using the <a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx" target="_blank">BackgroundWorker</a> component. That way, the UI keeps updating itself rather than degenerating to one of those white and unresponsive windows:</p>
<p><img src="http://ajdotnet.files.wordpress.com/2009/03/mt2.jpg" alt="" /></p>
<p>The UI and the calculation run on different threads (yet still on one core), thus the UI can update itself even during the calculation is still running. However, now it has to deal with that intermediary state (denoted by the striped blocks). And every time the UI thread uses the core, that time is lost to the calculation, so the time to completion will actually be longer than with A.</p>
<p><em>Now switch gears to our new, say quad core, machine…</em></p>
<p>What happens on a quad core is that both tasks now get executed in parallel:</p>
<p><img src="http://ajdotnet.files.wordpress.com/2009/03/mt3.jpg" alt="" /></p>
<p>As you can see, actual processing time is now back to the same it was with A, yet it manages to avoid freezing the UI as in B; again at the expense of having to deal with the intermediary state. However that’s about as good as it becomes. But the application doesn’t get faster, neither will a third or fourth core be utilized at all (other than ensuring that other applications can run there rather then interfering with the cores we just occupied).</p>
<p>So, while the potential in “classical multithreading” lies in <em>shifting </em>or <em>arranging </em>calculations of disparate tasks, the potential of parallelism with many cores lies in doing <em>more </em>calculations of CPU bound tasks <em>at the same time</em>. Like so:</p>
<p><img src="http://ajdotnet.files.wordpress.com/2009/03/mt4.jpg" alt="" /></p>
<p>This time the calculation has been split into parts and been distributed on different threads on top of the UI thread. This eventually caused better performance than A. However this is not the way today’s multithreaded applications are written, because on a single core it actually leads to worse performance, due to <a href="http://msdn.microsoft.com/en-us/library/ms682453.aspx" target="_blank">memory pressure</a> if used excessively, thread context switches, synchronization and contention, etc..</p>
<p><strong><span style="text-decoration:underline;">The verdict…</span></strong></p>
<p>Today&#8217;s multithreaded client software may profit from more cores, but to a far lower degree than one might think at first. And what’s more: It might even stop running altogether because <em>actual </em>parallelism opens the door for error conditions that were simply theoretical threats on a single core system but become a reality on multi cores. Something like accessing some memory while another core is still in the middle of an instruction doing the same.</p>
<p><strong>PS: And by the way: the future is now! </strong></p>
<p>I just started in a new project and got my new machine last week: An <a href="http://search.hp.com/query.html?cc=us&amp;lang=en&amp;qt=hp+xw6600&amp;la=en" target="_blank">HP wx6600</a>, with 2 quad cores @ 3GHz, 4GB <img src='http://s.wordpress.com/wp-includes/images/smilies/face-smile-big.png' alt=':grin:' class='wp-smiley' /> </p>
<p>This is a task manager screenshot, showing 8 nice little cores, sitting under my desk, waiting for me to send them on one or the other errand…</p>
<p><img src="http://ajdotnet.files.wordpress.com/2009/03/taskmgr_hp.jpg" alt="" /></p>
<p>A single core is such a lonesome entity… <img src='http://s.wordpress.com/wp-includes/images/smilies/face-wink.png' alt=';-)' class='wp-smiley' /> </p>
<p><span style="color:#008000;">That’s all for now folks,<br />
<strong>AJ.NET</strong></span><br />
<a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fajdotnet.wordpress.com%2f2009%2f03%2f27%2fbeing-parallel%2f"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fajdotnet.wordpress.com%2f2009%2f03%2f27%2fbeing-parallel%2f" border="0" alt="kick it on DotNetKicks.com" /></a></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ajdotnet.wordpress.com/231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ajdotnet.wordpress.com/231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ajdotnet.wordpress.com/231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ajdotnet.wordpress.com/231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ajdotnet.wordpress.com/231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ajdotnet.wordpress.com/231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ajdotnet.wordpress.com/231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ajdotnet.wordpress.com/231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ajdotnet.wordpress.com/231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ajdotnet.wordpress.com/231/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ajdotnet.wordpress.com&blog=305378&post=231&subd=ajdotnet&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ajdotnet.wordpress.com/2009/03/27/being-parallel/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/03b347f75b708670587fdbae73778116?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ajdotnet</media:title>
		</media:content>

		<media:content url="http://ajdotnet.files.wordpress.com/2009/03/mt1.jpg" medium="image" />

		<media:content url="http://ajdotnet.files.wordpress.com/2009/03/mt2.jpg" medium="image" />

		<media:content url="http://ajdotnet.files.wordpress.com/2009/03/mt3.jpg" medium="image" />

		<media:content url="http://ajdotnet.files.wordpress.com/2009/03/mt4.jpg" medium="image" />

		<media:content url="http://ajdotnet.files.wordpress.com/2009/03/taskmgr_hp.jpg" medium="image" />

		<media:content url="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fajdotnet.wordpress.com%2f2009%2f03%2f27%2fbeing-parallel%2f" medium="image">
			<media:title type="html">kick it on DotNetKicks.com</media:title>
		</media:content>
	</item>
		<item>
		<title>Going parallel&#8230;</title>
		<link>http://ajdotnet.wordpress.com/2009/03/21/going-parallel/</link>
		<comments>http://ajdotnet.wordpress.com/2009/03/21/going-parallel/#comments</comments>
		<pubDate>Sat, 21 Mar 2009 16:46:47 +0000</pubDate>
		<dc:creator>ajdotnet</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[.NET Framework]]></category>
		<category><![CDATA[Software Architecture]]></category>
		<category><![CDATA[Software Developers]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://ajdotnet.wordpress.com/?p=216</guid>
		<description><![CDATA[The so-called „many core shift“ is happening. It’s not a thing of the future, it’s not „just around the corner“, it has already begun. And it will change our developers’ life.
Last week we had some customer events, containing some talks about PDC and other stuff and how it will affect the near term future. Among [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ajdotnet.wordpress.com&blog=305378&post=216&subd=ajdotnet&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>The so-called „<a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=633F9F08-AAD9-46C4-8CAE-B204472838E1&amp;displaylang=en" target="_blank">many core shift</a>“ is happening. It’s not a thing of the future, it’s not „just around the corner“, it has already begun. And it will change our developers’ life.</p>
<p>Last week <a href="http://www.sdx-ag.de/" target="_blank">we</a> had some customer events, containing some talks about PDC and other stuff and how it will affect the near term future. Among other things I tried to describe the many core shift as well as its consequences. Curiously the audience was largely aware of the facts, yet the consequences had yet escaped the vast majority. So let me try to repeat the gist and see whether this is maybe a common symptom&#8230;</p>
<p><strong>What’s the many core shift, anyway?</strong></p>
<p><a href="http://en.wikipedia.org/wiki/Moores_law" target="_blank">Moore’s Law</a> states that the number of transistors on an integrated circuits doubles every two years. Until not long ago, and accompanied by more complex designs and higher clock speeds, that meant faster CPUs. This was sometimes called the „free lunch for developers“, because if one happened to write a slow application… not that anyone ever would <img src='http://s.wordpress.com/wp-includes/images/smilies/face-wink.png' alt=';-)' class='wp-smiley' />  , all he had to do was wait two years and it ran twice as fast.</p>
<p>However this evolution has reached its physical limits (clock speed, power consumption, etc.). Yet, still the number doubles… .<br />
So instead of building faster and more complex CPUs, the manufacturers started placing <em>more </em>CPUs, read cores, on a chip. It started 2006 with <a href="http://ajdotnet.wordpress.com/2006/07/15/intels-core-2-extreme-core-2-duo-the-empire-strikes-back/" target="_blank">Intel’s dual cores</a>, today you won’t find a single core desktop machine anymore. High end consumer machines come with quad cores, and servers with 16 cores (delivered as 4 quad cores). Have a look at the extrapolation:</p>
<p><img class="alignnone size-full wp-image-214" title="cores" src="http://ajdotnet.files.wordpress.com/2009/03/cores.jpg?w=610&#038;h=431" alt="cores" width="610" height="431" /></p>
<p>The “lower” line shows cores on a CPU, starting 2006 with 2 cores, while the steeper one assumes 4 CPU sockets. And just in case the conclusion escaped you: Five years from now we will have between 32 and 128 cores. And remember, we are talking “consumer grade stuff”, that is <em>the box under <span style="text-decoration:underline;">your</span> desk</em>, not something special! Impressive?</p>
<p><strong>So that’s the many core shift. But what does it mean?</strong></p>
<p>Well, it probably means that today’s software runs a bit faster. Not much, mind you, certainly not the 32 times faster a 64 core machine is supposed to be compared to my dual core. Why is that? Well, have a look at the following task manager of a 64 core machine:</p>
<p><img class="alignnone size-full wp-image-215" title="taskmgr_64" src="http://ajdotnet.files.wordpress.com/2009/03/taskmgr_64.jpg?w=614&#038;h=508" alt="taskmgr_64" width="614" height="508" /><br />
(<em>That’s a fake of course, but have a look at </em><a href="http://blogs.technet.com/markrussinovich/archive/2008/07/21/3092070.aspx" target="_blank"><em>Marks’s blog</em></a><em> for a real one.</em>)</p>
<p>Now look at your own desktop and count the open applications. Outlook, Word, perhaps PowerPoint, Internet Explorer, Acrobat Reader? OK, say half a dozen applications, add 10 more for the OS stuff actually doing something. That’s 16 applications, using the upper row of cores, perhaps even to 100% and yearning for more, while the other 3 rows just sit there and twiddle their thumbs. That sad truth is: <em>Most of today’s applications simply are not capable of employing these cores appropriately.</em> Consequence: In order to leverage these cores <strong><span style="text-decoration:underline;">we have to change the way we write our software!</span></strong></p>
<p>Two questions come to mind: Do we actually <em>need </em>that kind of processing power? And if so, how do we <em>open it up</em>?</p>
<p><strong>Seriously, does the average user need 64 cores?</strong></p>
<p>Well, yes he does. If for no other reason, he did need the increase in processing power during the last years, why should that change?</p>
<p>So, what does he need it for? Gamers are always at the forefront of processing power demand. We have the generally increasing demand in UI technology: 3D, animations, visual effects are becoming mainstream with windows, WPF and <a href="http://silverlight.net/" target="_blank">Silverlight</a>. The trend to digital photography has had its effect on the demand for graphics software. On my dual core, <a href="http://www.dxo.com/" target="_blank">DXO</a> needs about 1 hour per 150 pictures, so there’s certainly room for improvement (I brought 2500 pics from my last vacation in <a href="http://en.wikipedia.org/wiki/Tanzania" target="_blank">Tanzania</a>. Do the math <img src='http://s.wordpress.com/wp-includes/images/smilies/face-wink.png' alt=';-)' class='wp-smiley' />  ). Background encryption, compression, virus scanning, etc. also add up.</p>
<p>Even if you are an “ordinary business user”: Word just sits and waits for your input most of the time? Well, open a non trivial 100 page document and see how long Word takes for pagination, spell checking, or updating the TOC. Change the formatting and watch again. So while Word mostly does nothing exciting, there are „burst times“ when it could really need those cores.</p>
<p>And I did not even mention Visual Studio and the compiler yet&#8230;</p>
<p><strong>How do I, Joe Developer, put 64 cores to good use?<br />
</strong>And how do I make sure the app doesn’t degrade on an old dual core beyond reasonable limits?</p>
<p>Here we are right at the center of the problem: <a href="http://en.wikipedia.org/wiki/Multithreading" target="_blank">Multithreading</a> is not exactly something new, we’ve had that for <a href="http://en.wikipedia.org/wiki/Os/2" target="_blank">more than 20 years</a> on PC’s now. So why do I even have to ask that question? It’s because we didn’t actually use multithreading within our applications if we didn’t have to. Because it’s laborious, error prone, awkward. You have to deal with thread synchronization, race conditions, dead locks, error management, communication between threads. You can’t debug it, tracing doesn’t help very much either. In short: <em>It’s a pain in the &#8230;</em>, well.</p>
<p>So let’s face it:<em> Most developers have avoided multithreading altogether (perhaps the lucky ones). And those who did do multithreading probably did it just for optimizations in very distinct areas. </em></p>
<p>But what we need to leverage those cores is quite the opposite: <em>We need multithreading to become mainstream</em>, kind of ubiquitous. For that it needs to be easier to employ parallelism. Complexity has to be pushed out of our code into the platform. Somewhat like nobody thinks any longer about virtual memory (while some of us are <a href="http://en.wikipedia.org/wiki/VZ200" target="_blank">old enough</a> to remember the days of physical addressing).</p>
<p>In other words: <em>In order to deal with the parallelization demands, we need new patterns, libraries, and tools. </em></p>
<p>Microsoft is going to give us a first delivery on that with the next <a href="http://www.microsoft.com/visualstudio/en-us/products/2010/default.mspx" target="_blank">Visual Studio 2010</a> and .NET wave. Optimized runtimes (e.g. the thread pool), better tools (e.g. the debugger) and not the least, new libraries, introducing new patterns (e.g. <a href="http://msdn.microsoft.com/en-us/magazine/cc163340.aspx" target="_blank">Task Parallel Library</a>). There’s more in the unmanaged world (e.g. <a href="http://msdn.microsoft.com/en-us/magazine/dd434652.aspx" target="_blank">Parallel Patterns Library</a>), more on the server side (<a href="http://www.microsoft.com/ccrdss/" target="_blank">CCR</a>), more on the language front (<a href="http://msdn.microsoft.com/en-us/fsharp/default.aspx" target="_blank">F#</a>), more in the research area (<a href="http://blogs.msdn.com/stmteam/default.aspx" target="_blank">transactional memory</a>).<br />
Microsoft even devoted a whole “<a href="http://msdn.microsoft.com/en-us/concurrency/default.aspx" target="_blank">developer center</a>” to parallel computing (look there for more details). And quite rightly so, because there is no single solution to parallelization, it comes in different flavors (e.g. data parallelism vs. task based parallelism) and we can expect further developments in this area in the future.</p>
<p>Also it’s noteworthy that the OSes, namely Windows Server 2008 R2 and Windows 7 which share the same kernel, can manage 256 cores. Compared to <a href="http://technet.microsoft.com/en-us/windowsserver/bb430827.aspx" target="_blank">what they supported before</a> this is quite a jump.</p>
<p><strong>Conclusion</strong></p>
<p>So, parallelization is here to stay and we are going to have to deal with it. If anything, the trend is going to accelerate. It’s reasonable to assume that eventually processor manufacturers will trade single core performance for number of cores, i.e. put more but less capable cores on a chip, in order to save power consumption (green IT and mobility being two other major trends).</p>
<p>Looking even further, the many core shift may reach a break even where standard desktop systems will cease to profit from additional cores (how parallel can you become after all?), the problems of memory access may limit the amount of cores. Asynchronous multi cores may evolve, e.g. having cores optimized for certain tasks…</p>
<p>See, there’s a lot to look forward to. Our profession certainly remains interesting <img src='http://s.wordpress.com/wp-includes/images/smilies/face-smile.png' alt=':-)' class='wp-smiley' /> </p>
<p>PS: See <a href="http://ajdotnet.wordpress.com/2009/03/27/being-parallel/">Being Parallel?</a> for some thoughts on whether today&#8217;s multithreaded client software will profit from additional cores&#8230;</p>
<p><span style="color:#008000;">That’s all for now folks,<br />
<strong>AJ.NET</strong></span><br />
<a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fajdotnet.wordpress.com%2f2009%2f03%2f21%2fgoing-parallel%2f"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fajdotnet.wordpress.com%2f2009%2f03%2f21%2fgoing-parallel%2f" border="0" alt="kick it on DotNetKicks.com" /></a></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ajdotnet.wordpress.com/216/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ajdotnet.wordpress.com/216/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ajdotnet.wordpress.com/216/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ajdotnet.wordpress.com/216/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ajdotnet.wordpress.com/216/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ajdotnet.wordpress.com/216/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ajdotnet.wordpress.com/216/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ajdotnet.wordpress.com/216/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ajdotnet.wordpress.com/216/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ajdotnet.wordpress.com/216/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ajdotnet.wordpress.com&blog=305378&post=216&subd=ajdotnet&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ajdotnet.wordpress.com/2009/03/21/going-parallel/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/03b347f75b708670587fdbae73778116?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ajdotnet</media:title>
		</media:content>

		<media:content url="http://ajdotnet.files.wordpress.com/2009/03/cores.jpg" medium="image">
			<media:title type="html">cores</media:title>
		</media:content>

		<media:content url="http://ajdotnet.files.wordpress.com/2009/03/taskmgr_64.jpg" medium="image">
			<media:title type="html">taskmgr_64</media:title>
		</media:content>

		<media:content url="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fajdotnet.wordpress.com%2f2009%2f03%2f21%2fgoing-parallel%2f" medium="image">
			<media:title type="html">kick it on DotNetKicks.com</media:title>
		</media:content>
	</item>
		<item>
		<title>Explaining Azure&#8230;</title>
		<link>http://ajdotnet.wordpress.com/2008/12/20/explaining-azure/</link>
		<comments>http://ajdotnet.wordpress.com/2008/12/20/explaining-azure/#comments</comments>
		<pubDate>Sat, 20 Dec 2008 19:51:50 +0000</pubDate>
		<dc:creator>ajdotnet</dc:creator>
				<category><![CDATA[Azure]]></category>
		<category><![CDATA[Software Architecture]]></category>
		<category><![CDATA[Software Developers]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://ajdotnet.wordpress.com/?p=197</guid>
		<description><![CDATA[&#8230; is something I did explicitly not want to do!
Not that it is not necessary to do so. It&#8217;s just that I expected a lot of bloggers, especially from Microsoft itself, trying to spread the news and foster understanding of what is ahead of us. Well, the Microsoft folks became kind of hushed, as if [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ajdotnet.wordpress.com&blog=305378&post=197&subd=ajdotnet&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>&#8230; is something I did explicitly <em>not </em>want to do!</p>
<p>Not that it is not necessary to do so. It&#8217;s just that I expected a lot of bloggers, especially from Microsoft itself, trying to spread the news and foster understanding of what is ahead of us. Well, the Microsoft folks became kind of hushed, as if ducking down and counting the shrapnels after having thrown the bomb at the PDC. So I changed my mind&#8230;</p>
<p><em>Preface&#8230;</em></p>
<p>Given what Microsoft unveiled at the PDC &#8212; A new vision, a new strategy, a new technology stack, and a mish mash of existing, sometimes overlapping, not yet consistent, much less complete applications and services &#8212; it&#8217;s no wonder that it took me some time to grasp the idea. And when I thought I might have understood the gist I was still, well, unsure of whether I had gotten it all right.<br />
The breakthrough came at the <a href="http://www.microsoftpdc.com/Agenda/UnSessions.aspx#ask-the-experts" target="_blank">ask-the-experts</a>. More to the point I had the chance to talk to <a href="http://blogs.msdn.com/oriamiga/" target="_blank">Ori Amiga</a> (the guy that did the “BB04 Live Services: A Lap around the Live Framework and Mesh Services” <a href="https://sessions.microsoftpdc.com/public/timeline.aspx" target="_blank">talk</a>). Other than joking about the various ways to pronounce “Azure” and the fact that Americans always manage to get it wrong (sorry guys <img src='http://s.wordpress.com/wp-includes/images/smilies/face-wink.png' alt=';-)' class='wp-smiley' />  &#8212; and sorry Ori, hope I didn’t give you away too badly <img src='http://s.wordpress.com/wp-includes/images/smilies/face-surprise.png' alt=':o' class='wp-smiley' /> ) ), this little chat really turned “suspected functionality” into “understood technology” (at least I do hope so&#8230;).</p>
<p>Explaining Azure worked not on explaining the ever present <a href="http://ajdotnet.files.wordpress.com/2008/11/azure-services-platform.gif" target="_blank">Azure picture</a> as is. It worked on <em>developing </em>the pieces of the picture, bit by bit, and relating it to other concepts. And since I worked for me, I thought I might share the gist of that conversation in much the same style, hoping I&#8217;m providing new insights rather than reiterating already available information. Actually I&#8217;m going to use the very sheet of paper we (mostly Ori) drew throughout said discussion. </p>
<p><em>Enough of the preliminaries, here we go…</em></p>
<p>First of all, keep in mind that there’s two Azures: <em>Windows Azure </em>and the <em>Azure Services Platform</em>. They are not the same and neither presents the full picture. I&#8217;ll try to dissect that picture layer by layer, like a cream gateau&#8230;</p>
<p><strong>It starts with the cake bottom: <span style="text-decoration:underline;">Windows Azure</span> </strong></p>
<p>Windows Azure is the basic “infrastructure” (to avoid the term “Operating System” for now) to run applications on, highlighted in the following picture in red:</p>
<p align="center"><a href="http://ajdotnet.files.wordpress.com/2008/12/azure1windows-azure.jpg" target="_blank"><img style="border-width:0;" src="http://ajdotnet.files.wordpress.com/2008/12/azure1windows-azure-thumb.jpg?w=660&#038;h=394" border="0" alt="azure.1.windows_azure" width="660" height="394" /></a></p>
<p>That includes computing capabilities, basic storage, management of applications (i.e. deployment, including upgrading), and operations (e.g. handling failures). These concepts are abstractions from the underlying OS (Windows 2008 actually), machines, and storage devices.</p>
<p>The terms to think of are <em>service instances </em>rather than processes or (virtual) machines. This is similar to the way virtual memory abstracts physical memory. While any memory access obviously has to happen on physical memory, the virtual memory manager is free to relocate it, even to swap it out to disk. This not only makes applications independent of the amount of physical memory, it also optimizes resource usage, allowing other applications to use the memory my application has claimed but does not access at the moment.</p>
<p>Yet, while Microsoft Azure is one level of abstraction above the machine’s OS, it has similar concepts (highlighted in the above picture in blue):</p>
<ul>
<li>computing ~ job scheduling, etc. (NT Kernel);</li>
<li>storage ~ file system (NTFS);</li>
<li>management ~ application installer;</li>
<li>operations ~ task manager, event manager, etc..</li>
</ul>
<p>Thus it is quite feasible to call Windows Azure an <em>Operating System </em>for the datacenter (or for the cloud if you’re a marketing guy), even if that may not match exactly what you learned in university about <a href="http://en.wikipedia.org/wiki/Operating_system" target="_blank">operating systems</a>.</p>
<p><em>The implications of </em><a href="http://msdn.microsoft.com/en-us/library/dd179441.aspx" target="_blank"><em>deploying</em></a><em> an application to Windows Azure (i.e. how the application has to be </em><a href="http://msdn.microsoft.com/en-us/library/dd179341.aspx" target="_blank"><em>built</em></a><em> and how the fabric manages it) is actually quite interesting &#8230; but a whole new blog post, thus I will skip that for now.</em></p>
<p><strong>Let’s move on to the second layer of the cake: <span style="text-decoration:underline;">The Azure Services Platform</span> </strong></p>
<p>A barebone OS like Windows Azure would be of limited use if it were not completed with other general purpose services. Which services exactly that includes may be debatable, yet, again, the similarity with our local environment may help depicting the features we as developers have come to expect from the platform we are developing on: database service, user accounts, IPC, etc..</p>
<p>Again, the following picture highlights the services in red and similarities in blue:</p>
<p align="center"><a href="http://ajdotnet.files.wordpress.com/2008/12/azure2azure-services-platform.jpg" target="_blank"><img style="border-width:0;" src="http://ajdotnet.files.wordpress.com/2008/12/azure2azure-services-platform-thumb.jpg?w=660&#038;h=394" border="0" alt="azure.2.azure_services_platform" width="660" height="394" /></a></p>
<p>Microsoft decided that the following services may be good ones to start with:</p>
<ul>
<li>.NET Services: basic infrastructure services for application security (access control), application communication (Service Bus), and workflow (three guesses&#8230;?).</li>
<li>SQL Services: database related stuff; not exactly a SQL Server, but aspiring to be&#8230;</li>
<li>Live Services: All around social applications (community, devices, etc.)</li>
<li><em>Core application services: This is a set of higher level application services, such as SharePoint Services and CRM Services (explicitly not including the UI!). In my opinion they are there because they were readily available, not because they are particularly necessary. </em></li>
</ul>
<p>Oh, and not to forget the reoccurring three dots in the PDC slides; those dots tell us that these are not closed and sealed sets. Actually Microsoft said that every major server application will eventually be made available on Azure.</p>
<p><strong>Now for the chocolate and the cream: the <span style="text-decoration:underline;">applications</span> running on the Azure Services Platform</strong></p>
<p>While Ori included the application layer in the platform, any PDC slide puts it on top:</p>
<p align="center"><a href="http://ajdotnet.files.wordpress.com/2008/12/azure3applications.jpg" target="_blank"><img style="border-width:0;" src="http://ajdotnet.files.wordpress.com/2008/12/azure3applications-thumb.jpg?w=660&#038;h=394" border="0" alt="azure.3.applications" width="660" height="394" /></a></p>
<p>Where you put the label is of no consequence anyway, because this is no more than a logical hierarchy. However, please don&#8217;t misinterpret this hierarchy by assuming that those applications have to run on Azure and only applications running on Azure can leverage the Azure services! Au contraire!</p>
<p>If you have an application deployed on Azure it is (technically speaking) no different from other services. The difference only lies in the purpose, or the consumer if you wish. And still applications and services are free to call <em>any </em>services, not just those running on Azure. Likewise if your application is running on your local machine or network it can use services deployed on Azure to store data or integrate with whatever, that&#8217;s fine as well. Actually the best example for this flexibility is coming from Microsoft itself: Live Mesh.</p>
<p><strong>The cherry on the cream: <span style="text-decoration:underline;">Live Mesh</span></strong></p>
<p>Technically speaking the Live Mesh Desktop and Live Services are just another set of applications and services running on the Azure Services Platform, complemented with applications running somewhere else and using those services. This limited view however would miss much of the capabilities of Live Mesh, and the way it enhances the platform.</p>
<p align="center"><a href="http://ajdotnet.files.wordpress.com/2008/12/azure4live-mesh.jpg" target="_blank"><img style="border-width:0;" src="http://ajdotnet.files.wordpress.com/2008/12/azure4live-mesh-thumb.jpg?w=660&#038;h=394" border="0" alt="azure.4.live_mesh" width="660" height="394" /></a></p>
<p>Live Mesh aims no less than to <em>connect people, devices, and applications</em>. Live Services contains services for identity (LiveID), presence, etc., and Mesh Services to maintain users, devices, applications, and &#8212; a corner stone &#8212; synchronization. The resource model organizes mesh objects (data, news, etc.) in feeds and entries, which in turn are subject to synchronization among the applications being “deployed” to Live Mesh. “Deploying” an application means either actual deployment on Azure, or storing it for (seamless) installation on your local device, via Live Mesh Client, offline capable if built to be.</p>
<p>Still with me? Well, to make this mess, pardon <em>mesh</em>, a little more tangible, let’s recap the example of Ori’s talk (<a href="http://mschnlnine.vo.llnwd.net/d1/pdc08/PPTX/BB04.pptx" target="_blank">PPTX</a> <a href="http://mschnlnine.vo.llnwd.net/d1/pdc08/WMV/BB04.wmv" target="_blank">WMV</a>, <em>images taken from there</em>):</p>
<p><a href="http://ajdotnet.files.wordpress.com/2008/12/livemesh-app.jpg" target="_blank"><br />
<img style="border-right:0;border-top:0;border-left:0;border-bottom:0;margin:0 5px 5px 0;" src="http://ajdotnet.files.wordpress.com/2008/12/livemesh-app-thumb.jpg?w=244&#038;h=145" border="0" alt="livemesh_app" width="244" height="145" align="left" /></a></p>
<p><a href="http://ajdotnet.files.wordpress.com/2008/12/livemesh-mobile2.jpg" target="_blank"><br />
<img style="border:0;margin:0 0 5px 5px;" src="http://ajdotnet.files.wordpress.com/2008/12/livemesh-mobile-thumb2.jpg?w=129&#038;h=244" border="0" alt="livemesh_mobile" width="129" height="244" align="right" /></a></p>
<p>He had his media center PC connected to the Live Mesh, advertising its meta data, like favorites, recordings, etc.. That information was synchronized to the Live Desktop (running in the browser), so he could pick a TV show there and “start” recording. (Actually that “start” was some little piece of data, synchronized back to the media center PC which in turn did, surprise!, start recording.) He then started a locally installed application that showed the TV guide and had the typical red recording sign right at the respective TV show. That application was offline capable, so he could have planed his TV recordings on the airplane and have it synchronized when he gets back online. Finally he also showed the same TV Guide on his mobile phone simulation.<br />
The only thing missing was integration with other people, but I think it was in a key note where they showed an application that allowed sharing of film critics with some friends.<br />
All in all, <em>that’s what I call ubiquitous computing!</em></p>
<p><strong>Spicing the cake: <span style="text-decoration:underline;">Developer tools</span></strong></p>
<p>This part is actually not in the picture, but it’s no less essential: Where does your application or 3<sup>rd</sup> party code fit in? How does it get there? Those parts in red may be <em>your </em>application or service:</p>
<p align="center"><a href="http://ajdotnet.files.wordpress.com/2008/12/azure5development.jpg" target="_blank"><img style="border-width:0;" src="http://ajdotnet.files.wordpress.com/2008/12/azure5development-thumb.jpg?w=660&#038;h=394" border="0" alt="azure.5.development" width="660" height="394" /></a></p>
<p>It’s actually quite easy: You can write applications that run on Azure and provide services (just like the basic services Microsoft provides), or an UI (just like Microsoft&#8217;s applications). You can access any of those services from the cloud or your local application, no matter whether Microsoft provided it or someone else. And you can Mesh-enable any of these applications and services as you like. <em>This is an open platform! </em></p>
<p>Also Microsoft provides a simulated local environment for Azure, called <a href="http://msdn.microsoft.com/en-us/library/dd179455.aspx" target="_blank">development fabric</a>, along with Visual Studio integration. Thus it is possible to develop your application locally, test it locally, and only afterwards deploy it to the cloud.<br />
Regarding Live Mesh Matthias has more information on <a href="http://www.leading-edge-dev.de/?p=111" target="_blank">developing with Live Framework</a>.</p>
<p><em>Postscript&#8230;</em></p>
<p>That&#8217;s it. You can find the complete untampered drawing <a href="http://ajdotnet.files.wordpress.com/2008/12/azure_by_ori.jpg" target="_blank">here</a>. That scrawl at the bottom of the drawing is actually Ori&#8217;s signature, but you should attribute any error, misunderstanding and adverse opinion in this post to me.</p>
<p>Finally two links for some alternate explanations (already repeated a thousand times over, but what the heck, they’re good):</p>
<ul>
<li>&#8220;Manuvir Das: Introducing Windows Azure&#8221;: Manuvir explains a little deeper how Windows Azure works.<br />
<a href="http://channel9.msdn.com/posts/Charles/Manuvir-Das-Introducing-Windows-Azure/" target="_blank">http://channel9.msdn.com/posts/Charles/Manuvir-Das-Introducing-Windows-Azure/</a></li>
<li>&#8220;Windows Azure (aka “Red Dog”) explained in 145 seconds&#8221;: funny and enlightening (presented on a site you might find interesting as well)<br />
<a title="http://www.azurejournal.com/2008/11/windows-azure-aka-red-dog-explained-in-145-seconds/" href="http://www.azurejournal.com/2008/11/windows-azure-aka-red-dog-explained-in-145-seconds/" target="_blank">http://www.azurejournal.com/2008/11/windows-azure-aka-red-dog-explained-in-145-seconds/</a></li>
</ul>
<p><span style="color:#008000;">That&#8217;s all for now folks,<br />
<strong>AJ.NET</strong></span><br />
<a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fajdotnet.wordpress.com%2f2008%2f12%2f20%2fexplaining-azure%2f"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fajdotnet.wordpress.com%2f2008%2f12%2f20%2fexplaining-azure%2f" border="0" alt="kick it on DotNetKicks.com" /></a></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ajdotnet.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ajdotnet.wordpress.com/197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ajdotnet.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ajdotnet.wordpress.com/197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ajdotnet.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ajdotnet.wordpress.com/197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ajdotnet.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ajdotnet.wordpress.com/197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ajdotnet.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ajdotnet.wordpress.com/197/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ajdotnet.wordpress.com&blog=305378&post=197&subd=ajdotnet&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ajdotnet.wordpress.com/2008/12/20/explaining-azure/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
<enclosure url="http://mschnlnine.vo.llnwd.net/d1/pdc08/WMV/BB04.wmv" length="117636563" type="video/x-ms-wmv" />
	
		<media:content url="http://0.gravatar.com/avatar/03b347f75b708670587fdbae73778116?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ajdotnet</media:title>
		</media:content>

		<media:content url="http://ajdotnet.files.wordpress.com/2008/12/azure1windows-azure-thumb.jpg" medium="image">
			<media:title type="html">azure.1.windows_azure</media:title>
		</media:content>

		<media:content url="http://ajdotnet.files.wordpress.com/2008/12/azure2azure-services-platform-thumb.jpg" medium="image">
			<media:title type="html">azure.2.azure_services_platform</media:title>
		</media:content>

		<media:content url="http://ajdotnet.files.wordpress.com/2008/12/azure3applications-thumb.jpg" medium="image">
			<media:title type="html">azure.3.applications</media:title>
		</media:content>

		<media:content url="http://ajdotnet.files.wordpress.com/2008/12/azure4live-mesh-thumb.jpg" medium="image">
			<media:title type="html">azure.4.live_mesh</media:title>
		</media:content>

		<media:content url="http://ajdotnet.files.wordpress.com/2008/12/livemesh-app-thumb.jpg" medium="image">
			<media:title type="html">livemesh_app</media:title>
		</media:content>

		<media:content url="http://ajdotnet.files.wordpress.com/2008/12/livemesh-mobile-thumb2.jpg" medium="image">
			<media:title type="html">livemesh_mobile</media:title>
		</media:content>

		<media:content url="http://ajdotnet.files.wordpress.com/2008/12/azure5development-thumb.jpg" medium="image">
			<media:title type="html">azure.5.development</media:title>
		</media:content>

		<media:content url="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fajdotnet.wordpress.com%2f2008%2f12%2f20%2fexplaining-azure%2f" medium="image">
			<media:title type="html">kick it on DotNetKicks.com</media:title>
		</media:content>
	</item>
		<item>
		<title>About Azure&#8230;</title>
		<link>http://ajdotnet.wordpress.com/2008/11/16/about-azure/</link>
		<comments>http://ajdotnet.wordpress.com/2008/11/16/about-azure/#comments</comments>
		<pubDate>Sun, 16 Nov 2008 16:48:27 +0000</pubDate>
		<dc:creator>ajdotnet</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[.NET Framework]]></category>
		<category><![CDATA[Azure]]></category>
		<category><![CDATA[Software Architecture]]></category>
		<category><![CDATA[Software Developers]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://ajdotnet.wordpress.com/?p=180</guid>
		<description><![CDATA[ This post (and probably some more) is about coming to grips with Microsoft&#8217;s latest announcement at the PDC: Windows Azure and the Azure Services Platform. Matter of fact, I’m constantly turning this thing over and over, trying to discuss it with various different people, trying to think different scenarios through, and I’m constantly adjusting [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ajdotnet.wordpress.com&blog=305378&post=180&subd=ajdotnet&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><a href="http://ajdotnet.files.wordpress.com/2008/11/ray-ozzie-pdc-keynote.jpg"><img style="border-width:0;margin:0 0 5px 5px;" src="http://ajdotnet.files.wordpress.com/2008/11/ray-ozzie-pdc-keynote-thumb.jpg?w=244&#038;h=177" border="0" alt="Ray Ozzie, Keynote PDC 2008" width="244" height="177" align="right" /></a> This post (and probably some more) is about coming to grips with Microsoft&#8217;s latest announcement at the PDC: Windows Azure and the Azure Services Platform. Matter of fact, I’m constantly turning this thing over and over, trying to discuss it with various different people, trying to think different scenarios through, and I’m constantly adjusting my perception. Frankly, if anybody tells you he has understood what is ahead of us, who says he knows how all that stuff will evolve, you’ve met a fool.</p>
<p><em>Now for this fool’s current view… </em></p>
<p>I&#8217;ll not try to explain it in technical details (not this time anyway, start at <a href="http://www.microsoft.com/azure/" target="_blank">here</a> or <a href="http://en.wikipedia.org/wiki/Windows_Azure" target="_blank">here</a> to come up to speed — anyway, there are probably books being written about it right now). And I&#8217;m certainly not going to join the debate, whether Azure is an operating system or not.</p>
<blockquote><p>I was still at the PDC when I started a Google search to see what reactions Azure triggered. <em>That</em> particular question was a predominant topic — and utterly without any consequence. (I couldn’t find that again though, it’s buried under millions of near identical pages describing Azure.)</p></blockquote>
<p>So let&#8217;s talk about what Azure is about. For me, for you, for the companies we work for, for the industry.</p>
<p><strong>Hailstorm — or what Azure is <em>not</em>&#8230;</strong></p>
<p>When I first heard about some of the Azure stuff I immediate thought &#8220;Wait, didn&#8217;t they announce something very similar in 2001? Called <a href="http://www.microsoft.com/presspass/features/2001/mar01/03-19hailstorm.mspx" target="_blank">Hailstorm</a> a.k.a .NET Building Blocks a.k.a. <a href="http://www.watchit.com/PGDSCR.cfm?c_acronym=MSMS" target="_blank">My Services</a>?&#8221;. It turns out that I was not the only one with this particular <a href="http://www.google.com/search?hl=en&amp;q=hailstorm+azure" target="_blank">déjà-vu</a>&#8230;</p>
<p>Taking a closer look, however, there are some significant differences in strategy between Hailstorm and Azure: Hailstorm was about Microsoft providing services to manage your <em>data</em>. Azure is about providing a platform for your <em>services</em>. In other words: With Hailstorm Microsoft said &#8220;give us your data and identity, keep the apps&#8221;, with Azure they say &#8220;give us your apps, you may keep the data and the identity (or you may choose to let us handle that as well)&#8221;. This is certainly a noteworthy change in attitude.</p>
<p>There&#8217;s another thing that changed since 2001. In 2001 Hailstorm was a new approach. It was visionary. It was the first time that someone asked me to let him manage my identity, appointments, even my wallet! And it was the evil empire that asked this very question&#8230; .<br />
Today, hosting providers are a common thing and trusting Google or online communities with personal information is quite normal. Going even further, Amazon already offers a service platform with <a href="http://aws.amazon.com/" target="_blank">AWS</a>, based on virtual machines (EC2), storage (S3 and SimpleDB), and a queuing service (SQS) as messaging bus. <a href="http://code.google.com/appengine/" target="_blank">Google App Engine</a> provides scalable application hosting (Python apps) and complements that with their identity system (<a href="http://code.google.com/appengine/kb/general.html#auth" target="_blank">Google Accounts</a>). So, the good news for Microsoft is that they are for once not the bad guys. Of course, Microsoft being Microsoft, that probably only means that they will be accused of being the copycat again&#8230; .</p>
<p><strong>What Azure may eventually become&#8230;</strong></p>
<p>Still, what’s the big deal about Azure? I mean, doesn&#8217;t my hosting provider offer virtual or dedicated servers? Aren&#8217;t there enough storage offerings, many of them for <a href="http://lifehacker.com/5064688/online-storage-feature+by+feature-comparison-chart" target="_blank">free</a>? Aren&#8217;t there Internet communities, online applications, service providers, &#8230;?</p>
<p><a href="http://ajdotnet.files.wordpress.com/2008/11/azure-services-platform.gif"><img style="border-width:0;margin:0 0 5px 5px;" src="http://ajdotnet.files.wordpress.com/2008/11/azure-services-platform-thumb.gif?w=244&#038;h=116" border="0" alt="Azure Services Platform" width="244" height="116" align="right" /></a> Well, looking at Azure piece by piece, there’s nothing new, nothing especially exciting. But take a step back and look at the big picture, at the strategy. With Azure&#8230;</p>
<p><strong>Microsoft becomes a <em>service</em> hoster and operator</strong>. Not just a <em>server</em> hoster. They don’t stop at booting a VM. They <em>operate</em> your applications, load balance them, restart them on failures, scale them, provision them, provide an upgrade mechanism that doesn’t disrupt 24/7.</p>
<p><strong>Microsoft becomes an application service provider as well as a<em> service </em>provider</strong>. They do not stop at providing fully fledged business applications like CRM or other. They offer basic infrastructure services like SQL Data Services or Workflow Services. You could even build your own CRM System, run it on Azure, competing with Microsoft’s CRM — and Microsoft couldn’t do anything about it (for if they would, that would put them out of business at the speed of light).</p>
<p><strong>Microsoft becomes a service integrator</strong>. They don’t stop at getting applications <em>into</em> the cloud. They offer bridges to your company’s private network. Using Access Control you can leverage your local AD to control security. Using Service Bus you can integrate with any application on premise or in the cloud, even let business partners integrate with you.</p>
<p><strong><a href="http://ajdotnet.files.wordpress.com/2008/11/life-mesh.gif"><img style="border-width:0;margin:0 0 5px 5px;" src="http://ajdotnet.files.wordpress.com/2008/11/life-mesh-thumb.gif?w=244&#038;h=160" border="0" alt="Life Mesh &quot;ZEN&quot;" width="244" height="160" align="right" /></a> Microsoft becomes a device integrator</strong>. They don’t stop at central storage or some device specific app for synchronizing contacts and appointments. The let you sync any application data on any Live enabled device on the fly, including handling offline cases.</p>
<p><strong>Microsoft becomes a <em>people</em> integrator</strong>. They don’t stop at providing some social application. They allow you to collaborate with other people within your own application. &#8220;People&#8221; being users authenticated by your AD, LiveID, OpenID, and probably any other well-known ID provider. All based on &#8220;claims&#8221; in order to build trust between app and user.</p>
<p>And most important: <strong><span style="text-decoration:underline;">They do all this at once!</span></strong> Putting it all together Microsoft offers a far more complete, comprehensive, and concrete vision of what the hazy term &#8220;<a href="http://en.wikipedia.org/wiki/Cloud_computing" target="_blank">cloud computing</a>&#8221; means than anybody else out there. It&#8217;s the vision of interconnected, intertwined applications, devices, networks, &#8230; the next level of <a href="http://en.wikipedia.org/wiki/Ubiquitous_computing" target="_blank">ubiquitous computing</a>.</p>
<p>OK, I may have been carried away. Currently Azure is rudimentary, not yet version 1 (and we know what <em>version 1 </em>usually means at Microsoft) and many questions remain unanswered. I cannot help but think that the mixture of various existing apps and services with hosting and a big bunch of announcements, all wrapped up in a nice <a href="http://www.itworld.com/saas/56780/oops-microsoft-forgets-trademark-windows-azure" target="_blank">name</a>, is more like a stew, thrown together but not yet readily cooked.</p>
<p>But then I might not. After all, <a href="http://www.microsoft.com/presspass/exec/ozzie/10-27PDC08dayone.mspx" target="_blank">Ray Ozzie said it loud and clear</a>:</p>
<blockquote><p>&#8220;[…] the systems that we&#8217;re building right now for cloud-based computing are setting the stage for the next 50 years of systems, both outside and inside the enterprise.&#8221;</p></blockquote>
<p>and</p>
<blockquote><p>&#8220;[..] we&#8217;re betting on Azure ourselves, and as the system scales out, we&#8217;ll be bringing more and more of our own key apps and key services onto Windows Azure because it will be our highest scale, highest availability, most economical, and most environmentally sensitive way of hosting services in the cloud.&#8221;</p></blockquote>
<p><em>That&#8217;s </em>what I call an announcement.</p>
<p><strong>Does Azure stand a chance?</strong></p>
<p><a href="http://en.wikipedia.org/wiki/Cloud_computing" target="_blank">Cloud computing</a> and <a href="http://en.wikipedia.org/wiki/Software_as_a_service" target="_blank">Software-as-a-Service</a> is widely seen as a coming trend, Azure or not. Microsoft is entering this market with vision, data centers, and service offerings. <em>And </em>a huge developer community and tooling support. This <em>will</em> change the IT industry and not many companies will be able to compete with that.</p>
<p>But a small statistic may be funny:</p>
<p>Google search for „Windows 7“: about 35,000,000 hits<br />
Google search for „Windows Azure“: about 1,830,000 hits<br />
Google search for „Amazon AWS“: about 13,000,000 hits<br />
(measured 12. Nov.´08; add one for this post <img src='http://s.wordpress.com/wp-includes/images/smilies/face-wink.png' alt=';-)' class='wp-smiley' />  )</p>
<p>That&#8217;s 20 times more hits for Windows 7 than for Azure. Quite a poor result for the thing that denotes a <a href="http://www.microsoft.com/presspass/exec/ozzie/10-27PDC08dayone.mspx" target="_blank">change in strategy</a> for the worlds biggest software company, the thing that Microsoft is betting its future on.<br />
On the other hand, 2 million hits is &#8220;not too shabby&#8221; just two weeks after its announcement on the PDC. And it starts to shine if compared to the mere 7 times more hits for Amazon&#8217;s AWS, the offering that&#8217;s probably the most similar to Azure and one that dates back to <a href="http://aws.amazon.com/about-aws/whats-new/2004/" target="_blank">2004</a>(!).</p>
<p>My opinion? Don&#8217;t expect Azure to play a big role next year or the year after. But then, don&#8217;t expect it to play <em>no </em>role in 10 years.</p>
<p><span style="color:#008000;">That&#8217;s all for now folks,<br />
<strong>AJ.NET</strong></span><br />
<a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fajdotnet.wordpress.com%2f2008%2f11%2f16%2fabout-azure%2f"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fajdotnet.wordpress.com%2f2008%2f11%2f16%2fabout-azure%2f" border="0" alt="kick it on DotNetKicks.com" /></a></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ajdotnet.wordpress.com/180/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ajdotnet.wordpress.com/180/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ajdotnet.wordpress.com/180/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ajdotnet.wordpress.com/180/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ajdotnet.wordpress.com/180/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ajdotnet.wordpress.com/180/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ajdotnet.wordpress.com/180/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ajdotnet.wordpress.com/180/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ajdotnet.wordpress.com/180/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ajdotnet.wordpress.com/180/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ajdotnet.wordpress.com&blog=305378&post=180&subd=ajdotnet&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ajdotnet.wordpress.com/2008/11/16/about-azure/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/03b347f75b708670587fdbae73778116?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ajdotnet</media:title>
		</media:content>

		<media:content url="http://ajdotnet.files.wordpress.com/2008/11/ray-ozzie-pdc-keynote-thumb.jpg" medium="image">
			<media:title type="html">Ray Ozzie, Keynote PDC 2008</media:title>
		</media:content>

		<media:content url="http://ajdotnet.files.wordpress.com/2008/11/azure-services-platform-thumb.gif" medium="image">
			<media:title type="html">Azure Services Platform</media:title>
		</media:content>

		<media:content url="http://ajdotnet.files.wordpress.com/2008/11/life-mesh-thumb.gif" medium="image">
			<media:title type="html">Life Mesh &#34;ZEN&#34;</media:title>
		</media:content>

		<media:content url="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fajdotnet.wordpress.com%2f2008%2f11%2f16%2fabout-azure%2f" medium="image">
			<media:title type="html">kick it on DotNetKicks.com</media:title>
		</media:content>
	</item>
		<item>
		<title>LINQ 2 SQL &#8212; Less is More (More or Less)</title>
		<link>http://ajdotnet.wordpress.com/2008/07/26/linq-2-sql-less-is-more-more-or-less/</link>
		<comments>http://ajdotnet.wordpress.com/2008/07/26/linq-2-sql-less-is-more-more-or-less/#comments</comments>
		<pubDate>Sat, 26 Jul 2008 12:21:55 +0000</pubDate>
		<dc:creator>ajdotnet</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[.NET Framework]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[LINQ]]></category>
		<category><![CDATA[Software Architecture]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://ajdotnet.wordpress.com/?p=167</guid>
		<description><![CDATA[Some time ago I promised some additional thoughts about how LINQ 2 SQL affects (web) application architectures. Well, here we go&#8230;
There are two defining characteristics of LINQ 2 SQL that may affect the architecture of a web application:

The DataContext class, being &#8220;the main entry point for the LINQ to SQL framework.&#8221; (as the documentation states.)
The [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ajdotnet.wordpress.com&blog=305378&post=167&subd=ajdotnet&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Some time ago I <a href="http://ajdotnet.wordpress.com/2008/04/20/linq-to-sql-reality-check/">promised</a> some additional thoughts about how LINQ 2 SQL affects (web) application architectures. Well, here we go&#8230;</p>
<p>There are two defining characteristics of LINQ 2 SQL that may affect the architecture of a web application:</p>
<ol>
<li>The <em>DataContext </em>class, being &#8220;the main entry point for the LINQ to SQL framework.&#8221; (as the documentation <a href="http://msdn.microsoft.com/en-us/library/system.data.linq.datacontext.aspx" target="_blank">states</a>.)</li>
<li>The way code generation works.</li>
</ol>
<p>While the first point affects what features of LINQ 2 SQL we are able to use in web applications, the second one affects the application architecture.</p>
<p>Note: if you need to catch up with LINQ 2 SQL have a look at the <a href="http://ajdotnet.wordpress.com/2008/04/20/linq-to-sql-reality-check/">my earlier post</a>.</p>
<p><strong>DataContext Effects </strong></p>
<p>In this post I&#8217;ll focus on the <em>DataContext </em>class generated by LINQ 2 SQL.</p>
<p>The <em>DataContext </em>class is not only an anchor to access the tables, views, and stored procedures. It also offers more interesting features like change tracking, maintaining object identities, optimistic concurrency, and deferred loading. Consequently this is what most people I talked to attributed to LINQ 2 SQL: The possibility of reading some data, manipulating it, and call <em>SubmitChanges</em>, while LINQ 2 SQL handles all the gory details of mapping the data, efficiently talking to the database (including load on demand), dealing with concurrent changes, and so on.</p>
<p>This read/manipulate/submit approach is what the documentation <a href="http://msdn.microsoft.com/en-us/library/system.data.linq.datacontext.aspx" target="_blank">describes </a>as being &#8220;designed to last for one &#8216;unit of work&#8217;.&#8221; And in case the consequence escaped you: This this implies a statefull programming model. The very <em>DataContext </em>instance that was used to read the data has to be available until every potential change or deferred access has been settled.</p>
<p>This does generally not agree with web applications, as read/manipulate/submit regularly spans several requests: The data is read, presented to the user, and then the request dies, and in a stateless scenario the <em>DataContext </em>as well. The next request comes in, say an update request, but there is no <em>DataContext </em>available, carrying information about the data that was read before. In order to work with the laid out programming model, one would have to create a new <em>DataContext</em>, reread the data, and then apply the changes and submit them. With optimistic locking being the first victim, because for that the information from the previous request is mandatory. And delayed loading degenerates to &#8220;optional loading&#8221;, because either you need the data (no benefit in delaying then) or you don&#8217;t.</p>
<p>How about maintaining the <em>DataContext </em>instance across requests? No way either; since it is not serializable, you can&#8217;t put it into the session. (And that&#8217;s just a technical reason, whether one should do that even if it were possible is a different matter altogether.)</p>
<p>To make a long story short, let me rephrase and emphasize the first sentence:<br />
<span style="text-decoration:underline;"><em><strong>For web applications</strong> the generated </em>DataContext </span><em><span style="text-decoration:underline;">class is <strong>only </strong>an anchor to access the tables, views, and stored procedures.</span> </em></p>
<p>BTW: Services are frequently bound to be stateless, too. Thus the same reasoning applies to them as well. Additionally they face another problem: They hand out the entities and get fresh ones from the outside world via serialization. Thereby they are removed from the DataContext, which is kind of <a href="http://www.west-wind.com/weblog/posts/162336.aspx" target="_blank">unforgiving</a>.</p>
<p><strong>Less is More</strong></p>
<p>Now we have concluded that the statefull approach doesn&#8217;t work. Reverting to a stateless employment of LINQ 2 SQL however leaves out a lot and raises the question whether there is something left at all. Well, there certainly is. We still have code generation for entity classes (based on tables and views) and for stored procedures and functions.</p>
<p>May web applications are really quite simple in that they are mainly &#8220;browsers over a (one) data store&#8221;. The complexity of those kind of applications lies more in sophisticated presentation rather than coding the business logic. In this scenario, and to really benefit from the productiveness of LINQ 2 SQL, I have had good experience using LINQ 2 SQL with just two simple tweaks:</p>
<ul>
<li><strong>Limited number of result set types (i.e. the set of columns):<br />
</strong>Rather than having my SELECTs (e.g. in stored procedures) produce different projections (i.e. tailored to the particular stored procedures task), I let them produce the same set of columns if they work on the same table. This way I will get a <em>Customer </em>entity and respective instances rather than a <em>CustomerWithAddress</em>, <em>CustomerWithRating</em>, <em>CustomerWithName</em>, <em>CustomerWithAllInfo</em>, &#8230; . And if I get that customer, I can always be sure it&#8217;s not some half filled entity.</li>
<li><strong>Explicit result set types: </strong><br />
It&#8217;s quite common to work on JOINed data. LINQ 2 SQL handles this quite well and will figure out the entity type even for stored procedures as &#8220;auto-generated type&#8221;. In order to make this type explicit in the database I would define a view containing the JOIN and have the stored procedure work against this view. And of course I use the view to generate a respective entity with LINQ 2 SQL. </li>
<li>I also refrain from having stored procedures return more than one result set or varying result set types depending on some condition. (I don&#8217;t consider this to be a tweak, because I would do that anyway.)</li>
</ul>
<blockquote><p>Of course the database may need some tuning, as some of these tweaks may hurt the performance. But <a href="http://ajdotnet.wordpress.com/2006/10/10/optimize-it/">optimization when optimization is due</a>&#8230; . And while I like the stored procedure approach, those tweaks will also work with free statements in code.</p></blockquote>
<p>These tweaks are not meant as rules but as guidelines. Feel free to break them at leisure <img src='http://s.wordpress.com/wp-includes/images/smilies/face-wink.png' alt=';-)' class='wp-smiley' />  , their intention is merrily to support the LINQ 2 SQL code generation. <em>However&#8230; </em>I experienced that the define-your-entities-and-the-operations-on-top approach caused more OO-like thinking than the traditional define-your-operations-and-let-them-return-the-result-at-hand approach.</p>
<p>So, after dragging and dropping the tables, views, and stored procedures LINQ 2 SQL will happily generated the respective classes and methods. Getting type safe data and DB access was never easier.</p>
<p>If you are in the &#8220;use CRUD statements to access the database&#8221; camp, the usual round trip for an update would be: read the data that is to be changed, change it, submit changes. Like this:</p>
<blockquote><p><span style="color:#0000ff;">using</span> (MyDataContext dc = <span style="color:#0000ff;">new</span> MyDataContext())<br />
{<br />
    <span style="color:#0000ff;">var </span>customer = (<span style="color:#0000ff;">from</span> c <span style="color:#0000ff;">in</span> dc.Customer <span style="color:#0000ff;">where</span> c.ID == id <span style="color:#0000ff;">select</span> c).First();<br />
    customer.Name = <span style="color:#800000;">&#8220;new name&#8221;</span>;<br />
    dc.SubmitChanges();<br />
}</p></blockquote>
<p>Compared to ADO.NET this still eases db access a lot.</p>
<p>If you follow the &#8220;use stored procedures to access the database&#8221; approach it gets even simpler:</p>
<blockquote><p><span style="color:#0000ff;">using</span> (MyDataContext dc = <span style="color:#0000ff;">new</span> MyDataContext())<br />
{<br />
    dc.ChangeCustomerName(id, name);<br />
}</p></blockquote>
<p>This is kind of &#8220;anti-sophisticated&#8221; but quite efficient. And it allows to do concurrency in stored procedures if you maintain the version field on the client and provide it during the update call. I found this to be much more concise and better suited to the way web applications work.</p>
<p>One word of warning (or rather a disclaimer if you like): This works for <em>me</em>. And it works for a certain kind of web applications. And it only works because I&#8217;m willing to trade some academic architectural demands for the <a href="http://en.wikipedia.org/wiki/KISS_principle" target="_blank">KISS</a> principle, productivity, and maintainability. So please don&#8217;t follow this advice blindly.</p>
<p>Oh, by the way: I used this approach in a project using an Oracle database as well. Writing a simple code generator that read the system tables and generated wrappers around stored procedures was no rocket science, the only caveat was dealing with REF CURSORs.</p>
<p>The next post will take a closer look at LINQ 2 SQL code generation and how it affects the architecture.</p>
<p><span style="color:#008000;">That&#8217;s all for now folks,<br />
<strong>AJ.NET</strong></span><br />
<a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fajdotnet.wordpress.com%2f2008%2f07%2f26%2flinq-2-sql-less-is-more-more-or-less%2f"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fajdotnet.wordpress.com%2f2008%2f07%2f26%2flinq-2-sql-less-is-more-more-or-less%2f" border="0" alt="kick it on DotNetKicks.com" /></a></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/ajdotnet.wordpress.com/167/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/ajdotnet.wordpress.com/167/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ajdotnet.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ajdotnet.wordpress.com/167/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ajdotnet.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ajdotnet.wordpress.com/167/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ajdotnet.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ajdotnet.wordpress.com/167/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ajdotnet.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ajdotnet.wordpress.com/167/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ajdotnet.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ajdotnet.wordpress.com/167/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ajdotnet.wordpress.com&blog=305378&post=167&subd=ajdotnet&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ajdotnet.wordpress.com/2008/07/26/linq-2-sql-less-is-more-more-or-less/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/03b347f75b708670587fdbae73778116?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ajdotnet</media:title>
		</media:content>

		<media:content url="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fajdotnet.wordpress.com%2f2008%2f07%2f26%2flinq-2-sql-less-is-more-more-or-less%2f" medium="image">
			<media:title type="html">kick it on DotNetKicks.com</media:title>
		</media:content>
	</item>
		<item>
		<title>Working for SDX (a.k.a. My latest project&#8230;)</title>
		<link>http://ajdotnet.wordpress.com/2008/07/13/working-for-sdx-aka-my-latest-project/</link>
		<comments>http://ajdotnet.wordpress.com/2008/07/13/working-for-sdx-aka-my-latest-project/#comments</comments>
		<pubDate>Sun, 13 Jul 2008 14:04:59 +0000</pubDate>
		<dc:creator>ajdotnet</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[SDX]]></category>
		<category><![CDATA[Software Developers]]></category>

		<guid isPermaLink="false">http://ajdotnet.wordpress.com/?p=164</guid>
		<description><![CDATA[Advertisement warning!
 
I&#8217;ve said it in an earlier post: I like working for SDX. In fact my work has become even more challenging due to a changed job description (with the unfortunate side effect that I have less time to spend on this blog). Anyway, we are looking for people (don&#8217;t look at the date [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ajdotnet.wordpress.com&blog=305378&post=164&subd=ajdotnet&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><em>Advertisement warning!</em></p>
<p><em><a href="http://www.sdx-ag.de/" target="_blank"><img style="margin:0 0 5px 5px;" src="http://ajdotnet.files.wordpress.com/2007/01/sdxlogo.gif?w=92&amp;h=28" alt="" align="right" /></a> </em></p>
<p>I&#8217;ve said it in an <a href="http://ajdotnet.wordpress.com/2006/08/11/why-i-like-working-for-sdx/">earlier post</a>: I like working for SDX. In fact my work has become even more challenging due to a changed job description (with the unfortunate side effect that I have less time to spend on this blog). Anyway, we are looking for people (don&#8217;t look at the date of the post; if you are reading this in a year the statement will still be true). Well, here&#8217;s a short description of my latest project to give you an idea on some of the work we do for our customers&#8230;</p>
<blockquote><p>I just completed a pilot study for one of our major customers, running about 3/4 of a year. Starting point was a system consisting of a non-trivial database and of two VB6/ActiveX/DHTML applications. Initially created a decade ago as replacement for a simple MS Access application, it had grown organically into a multi-purpose-application and a very vital, central data pool for &#8220;quite a few&#8221; stakeholders.</p>
<p>Since Microsoft has decommissioned VB6, the customer decided to do a VB6-to-.NET migration. My job as responsible architect was designing the target architecture, and coming up with a migration path that supported parallel operations of old and new world during the anticipated two years time the migration would take.</p>
<p>Of course in a decade the world has changed, so has the business and the way software has to be built to honor that. Globalization, European Union, changed customer&#8217;s perceptions, constantly changing demands, the way software is built, maintained, and operated.<br />
So the job quickly grew to include a new domain model, adjusted business processes, better business alignment. So far the demands.</p>
<p>The agreed on strategy we came up with is an ecosystem of applications. One core application implements the main parts of a new domain data model, ensures consistency and &#8212; essential in any distributed system and surprisingly difficult to achieve at times &#8212; provides stable identifiers. Circled around this core application is a number of other mutually independent applications. (The possibility to do this of course relies on the business requirements being mutually independent.)</p>
<p>This approach is driven by</p>
<ul>
<li>the separation of the monolith in as many as possible disparate applications (pardon the exaggeration, but it <em>is </em>a fair number),</li>
<li>defined ways of interaction between these applications (including off-the-shelf-software),</li>
<li>and providing a sound basis to support building the custom-made family members.</li>
</ul>
<p>This strategy provides the flexibility to build each application according to demand of specific stakeholders, even allowing for contradicting business demands of different departments. The set of applications can change in the future to address changed needs. Future technology changes can be applied in small steps (lessening the chance that will build the next Moloch). Maintenance should get better, because each application is less complex (simpler architecture, less business functions). <em>And </em>it conforms with <a href="http://www.objectwatch.com/white_papers.htm#SIP" target="_blank">Roger Sessions</a> works on complexity of software systems.</p>
<p>Of course, a small but rigid set of rules and governance has to be implemented to ensure peaceful coexistence and avoid &#8220;chaotic growth&#8221; of our application family in the future. Especially the growth of interdependencies between the applications has to be watched carefully.</p>
<p>Next steps will be applying for the budget at the top management and then hopefully building that system. Of course with my and SDX participation <img src='http://s.wordpress.com/wp-includes/images/smilies/face-wink.png' alt=';-)' class='wp-smiley' />  .</p></blockquote>
<p>Now, if that sounds like a challenging and interesting project; if you happen to be willing to work in the Rhein/Main area, Germany; if you could envision yourself working for the same company as I do <img src='http://s.wordpress.com/wp-includes/images/smilies/face-wink.png' alt=';-)' class='wp-smiley' />  &#8230; (not necessarily in that project!). Well then pay a look at <a title="http://www.sdx-ag.de/jobs.aspx" href="http://www.sdx-ag.de/jobs.aspx">http://www.sdx-ag.de/jobs.aspx</a> (German language skills mandatory!).</p>
<p><span style="color:#008000;">That&#8217;s all for now folks,<br />
<strong>AJ.SDX</strong></span></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/ajdotnet.wordpress.com/164/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/ajdotnet.wordpress.com/164/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ajdotnet.wordpress.com/164/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ajdotnet.wordpress.com/164/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ajdotnet.wordpress.com/164/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ajdotnet.wordpress.com/164/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ajdotnet.wordpress.com/164/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ajdotnet.wordpress.com/164/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ajdotnet.wordpress.com/164/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ajdotnet.wordpress.com/164/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ajdotnet.wordpress.com/164/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ajdotnet.wordpress.com/164/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ajdotnet.wordpress.com&blog=305378&post=164&subd=ajdotnet&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ajdotnet.wordpress.com/2008/07/13/working-for-sdx-aka-my-latest-project/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/03b347f75b708670587fdbae73778116?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ajdotnet</media:title>
		</media:content>

		<media:content url="http://ajdotnet.files.wordpress.com/2007/01/sdxlogo.gif?w=92&#38;h=28" medium="image" />
	</item>
		<item>
		<title>Rants and rails</title>
		<link>http://ajdotnet.wordpress.com/2008/07/06/rants-and-rails/</link>
		<comments>http://ajdotnet.wordpress.com/2008/07/06/rants-and-rails/#comments</comments>
		<pubDate>Sun, 06 Jul 2008 16:12:38 +0000</pubDate>
		<dc:creator>ajdotnet</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[.NET Framework]]></category>
		<category><![CDATA[Software Architecture]]></category>
		<category><![CDATA[Software Developers]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://ajdotnet.wordpress.com/?p=163</guid>
		<description><![CDATA[Something is going on out there&#8230;
While I still work on LINQ 2 SQL some people started an open discussion, rant, or rail (depending on one&#8217;s view and taken offense) about the upcoming Entity Framework.
In all frankness, an &#8220;ADO .NET Entity Framework Vote of No Confidence&#8221; (VoNC from now on, see here) is certainly capable to [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ajdotnet.wordpress.com&blog=305378&post=163&subd=ajdotnet&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Something is going on out there&#8230;</p>
<p>While I still work on LINQ 2 SQL some people started an open discussion, rant, or rail (depending on one&#8217;s view and taken offense) about the upcoming Entity Framework.</p>
<p>In all frankness, an &#8220;ADO .NET Entity Framework <em>Vote of No Confidence</em>&#8221; (<em>VoNC </em>from now on, see <a href="http://efvote.wufoo.com/forms/ado-net-entity-framework-vote-of-no-confidence/" target="_blank">here</a>) is certainly capable to triggering off some very strong reactions.</p>
<blockquote><p>What I disagree with is the way in which it&#8217;s presented. The language of &#8220;Vote of No Confidence&#8221; is intended to start a fight and is long hand for &#8220;You suck&#8221;. [...]</p>
<p>I&#8217;m not upset that people are giving feedback. I want them to give feedback. But here&#8217;s the deal &#8211; do it in a grown up way. My way or the highway doesn&#8217;t sit well with anyone on the receiving end. There&#8217;s a WIDE path between being constructively critical and downright offensive.</p>
<p>(Josh Holmes, <a href="http://www.joshholmes.com/2008/06/26/RantingAndRavingOrGettingResults.aspx" target="_blank">Ranting and Raving or Getting Results?</a>)</p></blockquote>
<p>Also quite funny: While the VoNC has probably been popularized by <a href="http://blogs.zdnet.com/microsoft/?p=1457" target="_blank">Mary-Jo Foley</a>, she instantly got her &#8230; <em>feedback </em>&#8230;. from one of the VoNC&#8217;s authors:</p>
<blockquote><p>The signatories list represents leading developers, architects, and practice leads within the Microsoft community. The representation of the signatories as testers is misleading and inaccurate.</p>
<p>We would appreciate an immediate retraction and correction of this misrepresentation.</p>
<p>(Scott Bellware, MVP, see <a href="http://talkback.zdnet.com/5208-12558-0.html?forumID=1&amp;threadID=49048&amp;messageID=917057&amp;start=-9986" target="_blank">here</a>)</p></blockquote>
<p>Seems people got a little testy. Anyway, Scott also points out &#8220;the history of the feedback and relationship between the community of experts and the Entity Framework team going back to April of 2007&#8243;, which raises the question why they still had to publish the VoNC in the first place, <em>despite </em>that relationship.</p>
<p>Given all that, Microsoft&#8217;s <a href="http://blogs.msdn.com/timmall/archive/2008/06/24/vote-of-no-confidence.aspx" target="_blank">response</a> was a fine example of &#8220;cooling things down&#8221; and trying to focus in the facts. Well, essentially Tim more or less tells us that all the VoNC asked for will be kind of there in EF v2.</p>
<p>But already the VoNC is experiencing string headwind. Most is aimed at the, well, call it <em>appearance</em>, of the VoNC and a nice listing can be found <a href="http://oakleafblog.blogspot.com/2008/06/current-commentary-about-adonet-entity.html" target="_blank">here</a>. There is even an &#8220;An Open Letter to the ALT.NET Community&#8221; (see <a href="http://www.codethinked.com/post/2008/06/An-Open-Letter-to-the-ALTNET-Community.aspx" target="_blank">here</a>).</p>
<p><strong>My opinion?</strong></p>
<p>Thought I would spare you? Silly you <img src='http://s.wordpress.com/wp-includes/images/smilies/face-wink.png' alt=';-)' class='wp-smiley' /> </p>
<p>What instantly caught my attention, if just because it was the first point made in the VoNC, was the statement that &#8220;entities are more significantly behavioral objects from the perspective of entity-oriented applications&#8221; and the claim that this is a &#8220;key architectural enabler and distinction&#8221;.</p>
<p>Having some experience with EJB those statements vividly reminded me of entity beans. I have expressed my opinion on the notion of &#8220;intelligent data objects&#8221; (for lack of a better term) more than half a decade ago:</p>
<blockquote><p>My opinion is that the support of <strong>statefull </strong><strong>components</strong> (i.e. entity beans) in J2EE is one of its biggest weaknesses. Not because it&#8217;s technically bad but it leads to wrong architectural <strong>design</strong> decisions [...]<br />
(microsoft.public.dotnet.general, 4/9/2001, see <a href="http://groups.google.de/group/microsoft.public.dotnet.general/browse_thread/thread/ed870968ecee090b/2e8ed39189742006?hl=de&amp;lnk=gst&amp;q=OO+design+with+statefull+data+components+alexander#2e8ed39189742006" target="_blank">here</a>)</p></blockquote>
<p>The reasons for this opinion in 2001 (scalability, reliability, etc.) are still valid. Additionally there are a bunch of other reasons: Trends to lightweight architectures have prospered in Java and even affected .NET (back then, <em>DataSets</em> were the means of choice, today entity classes are very common). The Service notion put emphasis on data shape and operations <em>on </em>that data. Business process engines move data from system to system, shaping and reshaping it along the way. In the distributed, sometimes disconnected world that our enterprise environments have become I could build cases against behavioral objects around security, maintenance, outsourcing scenarios, versioning, testing (which is ironically so favored in the VoNC), software complexity, future safety, and so on.</p>
<p>The VoNC seems to imply that if you don&#8217;t have &#8220;behavioral objects from the perspective of entity-oriented applications&#8221;, then you are stuck with &#8220;data objects from the perspective of data storage and data storage technologies&#8221; (as I read it more or less simple mappings from database tables to objects). Well, correct me if I&#8217;m wrong, but <em>data can be reshaped without putting behavior in it</em>. That&#8217;s exactly what I expect from an ORM tool like EF.</p>
<p>I&#8217;ll stop before I get carried away. Much to my own relief, I&#8217;m not the only one having these reservations, though: <a href="http://codebetter.com/blogs/ian_cooper/archive/2008/06/26/the-criticism-of-the-entity-framework-is-not-just-around-domain-driven-design.aspx" target="_blank">Ian</a> noted the similarity with EJB as well and got deeper in this topic. <a href="http://neverindoubtnet.blogspot.com/2008/06/rejoinder-1-to-of-no-confidence-in.html" target="_blank">Ward</a> makes a good point on the issues of &#8220;Persistence Ignorance&#8221; which I share and thus won&#8217;t reiterate here.</p>
<p><strong>Where are we?</strong></p>
<p>As I see it, the ongoing discussions are circling around the issue on whether entities should follow the data centric pattern of <a href="http://en.wikipedia.org/wiki/Value_object" target="_blank">value objects</a>, or whether they should be complemented with behavior to become <a href="http://en.wikipedia.org/wiki/Business_object_%28computer_science%29" target="_blank">business objects</a>. That is largely a matter of taste.</p>
<p>On the other hand, the discussion is somewhat misleading. The topic has got nothing to do with <a href="http://en.wikipedia.org/wiki/Domain_model" target="_blank">domain models</a>, which in itself is agnostic of those two approaches. And the VoNC&#8217;s reference to the <a href="http://en.wikipedia.org/wiki/Anemic_Domain_Model" target="_blank">anemic domain model</a> (i.e. a domain model based on value objects) only muddies the water. The very verdict that this is an anti-pattern, and a horrific one at that, is due to a <a href="http://www.martinfowler.com/bliki/AnemicDomainModel.html" target="_blank">judgment by Martin Fowler</a> and only justified by the fact that it violates OO principles (which is obvious) and people think (yes, they do, according to Martin) that value objects are real objects. No wonder the VoNC calls this a &#8220;degraded architecture&#8221;.</p>
<p>So, two opposing forces, standing in muddied water, and Microsoft caught between them. The PDC is going to be interesting&#8230; <img src='http://s.wordpress.com/wp-includes/images/smilies/face-smile-big.png' alt=':-D' class='wp-smiley' /> </p>
<p>BTW: Please note that I never said, Microsoft should not do what the VoNC asks for. There are bright people among the signatories and they should not be ignored. Microsoft as tool vendor should provide a tool than can be used in <em>any </em>architecture.</p>
<p><span style="color:#008000;">That&#8217;s all for now folks,<br />
<strong>AJ.NET</strong></span></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/ajdotnet.wordpress.com/163/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/ajdotnet.wordpress.com/163/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ajdotnet.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ajdotnet.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ajdotnet.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ajdotnet.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ajdotnet.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ajdotnet.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ajdotnet.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ajdotnet.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ajdotnet.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ajdotnet.wordpress.com/163/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ajdotnet.wordpress.com&blog=305378&post=163&subd=ajdotnet&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ajdotnet.wordpress.com/2008/07/06/rants-and-rails/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/03b347f75b708670587fdbae73778116?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ajdotnet</media:title>
		</media:content>
	</item>
		<item>
		<title>I can&#8217;t help but notice&#8230;</title>
		<link>http://ajdotnet.wordpress.com/2008/04/27/i-cant-help-but-notice/</link>
		<comments>http://ajdotnet.wordpress.com/2008/04/27/i-cant-help-but-notice/#comments</comments>
		<pubDate>Sun, 27 Apr 2008 14:28:36 +0000</pubDate>
		<dc:creator>ajdotnet</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[.NET Framework]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[LINQ]]></category>
		<category><![CDATA[Software Architecture]]></category>
		<category><![CDATA[Software Developers]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://ajdotnet.wordpress.com/?p=162</guid>
		<description><![CDATA[&#8230; that functional programming might be the next big shift in general purpose development paradigms.
The other day I realized a trend that may be decisive for the evolution of our development environment in general: Functional Programming! It is not that I did not see the symptoms. It is just that it took that long to [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ajdotnet.wordpress.com&blog=305378&post=162&subd=ajdotnet&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>&#8230; that <strong>functional programming </strong>might be the next big shift in general purpose development paradigms.</p>
<p>The other day I realized a trend that may be decisive for the evolution of our development environment in general: Functional Programming! It is not that I did not see the symptoms. It is just that it took that long to realize the breadth of it. (I&#8217;m in <a href="http://blogs.msdn.com/somasegar/archive/2007/10/17/f-a-functional-programming-language.aspx" target="_blank">good company</a>, though.)</p>
<p><strong>Yesterday&#8230;</strong></p>
<p>&#8230; it started quite unobtrusive. </p>
<p>We got <strong>generics </strong>and with them (hardly mentioned as more than syntactic sugar) <strong>type inference</strong>. </p>
<blockquote><p>In retrospect it even seems misleading that generics were discussed as something akin to C++ templates. The <a href="http://msdn2.microsoft.com/en-us/library/sbh15dya(VS.80).aspx" target="_blank">technical differences</a> may seem superfluous at first, yet some advanced techniques with templates, orthogonal libraries such as STL (only recently available as <a href="http://blogs.msdn.com/nikolad/archive/2006/06/16/STLCLR-Intro.aspx" target="_blank">STL/CLR</a> for managed code) and <a href="http://en.wikipedia.org/wiki/Template_metaprogramming" target="_blank">template meta-programming</a> have never been broadly considered for generics. Rather type inference plays a major role with generics, effectively pushing the burden of type safety from developer to compiler.</p>
</blockquote>
<p>We got <a href="http://msdn2.microsoft.com/en-us/library/0yw3tz5k(VS.80).aspx" target="_blank"><strong>anonymous methods</strong></a>, which was at that time hardly worth the effort and not at all a justified language change &#8212; if looked at in isolation.</p>
<p>We got <a href="http://msdn2.microsoft.com/en-us/library/dscyy5s0.aspx" target="_blank"><strong>iterators</strong></a>, which was again a feature no one had missed, much less asked for.</p>
<p>Several features, seemingly unrelated, some rather tiny unmotivated additions to the language.</p>
<p><strong>Today (the obvious)&#8230;</strong></p>
<p>&#8230; we have LINQ. </p>
<p>LINQ has been <a href="http://blogs.msdn.com/danielfe/archive/2005/09/13/464904.aspx" target="_blank">introduced at the PDC 05</a> by Anders Hejlsberg et al. as <a href="http://msdn2.microsoft.com/en-us/library/bb308959.aspx" target="_blank">kind of</a> &#8220;complied SQL statements&#8221;, &#8220;type safe SQL&#8221;, and &#8220;unified query language&#8221;, thus the name of course. </p>
<blockquote><p>The language features that make up LINQ rely on the above language features. And with LINQ those pieces suddenly fall into shape. Type inference for anonymous types and together with generics as general foundation, anonymous methods for lambdas, iterators for deferred execution. A concise system.</p>
</blockquote>
<p>And this is how LINQ is seen by many people: <em>Type safe queries</em>. Something to replace ugly ADO.NET code over SQL strings with beautiful and compiler checked C# statements. Who can blame them, that&#8217;s how it got introduced.</p>
<p>What those people miss is the less obvious force behind LINQ. It&#8217;s functional programming, as Anders itself <a href="http://blogs.msdn.com/charlie/archive/2007/01/26/anders-hejlsberg-on-linq-and-functional-programming.aspx" target="_blank">explains</a> &#8212; not the other way round, as presented in <a href="http://msdn.microsoft.com/msdnmag/issues/07/06/CSharp30/" target="_blank">&#8220;The Evolution Of LINQ And Its Impact On The Design Of C#&#8221;</a>.</p>
<blockquote><p>It&#8217;s not that the trend to functional programming is kept secretly. Matter of fact, the term is mentioned quite frequently in relation to LINQ. And there&#8217;s other evidence, like the new .NET language <a href="http://research.microsoft.com/fsharp/" target="_blank">F#</a>, incidentally written by <a href="http://research.microsoft.com/~dsyme/" target="_blank">Don Syme</a>, the man who built generics for .NET. And there&#8217;s enough <a href="http://blogs.msdn.com/search/SearchResults.aspx?q=functional+programming&amp;o=Relevance" target="_blank">bloggers out there</a>, talking about the topic. <br />It&#8217;s more that the average corporate developer, the kind that has more than enough to do getting his job done, is not directly exposed to this information. Therefore he picks up only occasional hints at best, not connected, not nearly enough to identify a larger trend. Many of them may not even be aware about the degree to which they have already exposed to functional programming bits and pieces.</p>
</blockquote>
<p><strong>Today (the not so obvious)&#8230;</strong></p>
<p>&#8230; there is a lot of talk around functional programming going on in the blog sphere. Some examples:</p>
<p>Regarding lambdas have a look at <a href="http://blogs.msdn.com/wesdyer/archive/tags/Functional+Programming/default.aspx" target="_blank">Wes&#8217; blog</a> to learn about currying, continuations, monads. Other bloggers have written about other language features (e.g. <a href="http://ajdotnet.wordpress.com/2008/03/21/using-extension-methods-for-fluent-interfaces/">extension methods</a>). Luca tries to <a href="http://blogs.msdn.com/lucabol/archive/2008/04/01/a-c-library-to-write-functional-code-part-i-background.aspx" target="_blank">bring F# features to C#</a>.</p>
<p>Also there has been a lot of noise around one of the tenets of functional programming: immutable data types. Just as we got new collection classes with generics, we may get immutable ones sometime in the future.</p>
<blockquote><p>If you like to read up on immutable data types, Roy has compiled a list of <a href="http://weblogs.asp.net/bleroy/archive/2008/01/16/immutability-in-c.aspx" target="_blank">related blog posts</a>; I found Erics <a href="http://blogs.msdn.com/ericlippert/archive/2007/11/13/immutability-in-c-part-one-kinds-of-immutability.aspx" target="_blank">series</a> to be the best, as he addresses not only the purpose but also the feasibility (consider the insolence, a list that does not change, how can that be feasible?). And he addresses null values (not exactly part of the functional universe) better than the others. </p>
</blockquote>
<p>Another interesting application is <a href="http://www.clariusconsulting.net/blogs/kzu/archive/category/1062.aspx" target="_blank">MoQ</a> (if not by itself, then as an example for the functional approach), a LINQ based mock framework. It may serve as indication that even stuff that is not directly related to functional programming may come in a functional shape.</p>
<p><strong>Tomorrow&#8230;</strong></p>
<p>&#8230; &#8212; and this is strictly a personal guess &#8212; the trend will continue. If anything it will diverge in different areas. Functional programming in general and F# idioms in particular may contribute to our languages, the patterns we use, and the libraries. F# may not only be the first functional language to decisively <a href="http://msdn2.microsoft.com/en-us/magazine/cc164244.aspx" target="_blank">enter the .NET environment</a>, it may be the very first functional language with at least the potential to become a <a href="http://www.amazon.com/Expert-F-Experts-Voice-Net/dp/1590598504/ref=pd_bbs_sr_1?ie=UTF8&amp;s=books&amp;qid=1209298946&amp;sr=8-1" target="_blank">mainstream language</a>.&nbsp; </p>
<p>The driving force behind this is something that Anders hinted at it in his interview above, and that Pat Helland <a href="http://blogs.msdn.com/pathelland/archive/2008/01/11/pdf-version-of-the-slides-for-the-irresistible-forces-meet-the-movable-objects.aspx" target="_blank">pointed out</a> quite clearly at the TechEd: <em>The future is parallel</em>. And functional programming is so much more suited to parallel processing than imperative programming. Matter of fact, <a href="http://msdn2.microsoft.com/en-us/magazine/cc163329.aspx" target="_blank">Parallel LINQ (PLINQ)</a> is already working in that direction. </p>
<p><strong>Right now&#8230;</strong></p>
<p>&#8230; that&#8217;s enough gazing in the crystal ball. What&#8217;s the consequence (provided you share my view)? Today probably nothing. None of <em>my </em>daily work is affected, beyond using LINQ as a nice tool. Tomorrow perhaps still nothing, as I may be totally wrong. All I can recommend is this: Try to see the bigger picture behind LINQ and keep watching for the trend. For if it&#8217;s the other way round, you may be tomorrows next VB guy, like the one in the next cubicle that never mastered inheritance and exceptions.</p>
<blockquote><p>As an afterthought: I&#8217;m not aware that this functional programming trend happened somewhere outside the Microsoft space. This is contrary to the dynamic languages trend. And I&#8217;m honestly not sure what the implication is.</p>
</blockquote>
<p><font color="#008000">That&#8217;s all for now folks,<br /><strong>AJ.NET</strong></font></p>
<p><a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fajdotnet.wordpress.com%2f2008%2f04%2f27%2fi-cant-help-but-notice%2f"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fajdotnet.wordpress.com%2f2008%2f04%2f27%2fi-cant-help-but-notice%2f" border="0" alt="kick it on DotNetKicks.com" /></a></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/ajdotnet.wordpress.com/162/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/ajdotnet.wordpress.com/162/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ajdotnet.wordpress.com/162/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ajdotnet.wordpress.com/162/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ajdotnet.wordpress.com/162/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ajdotnet.wordpress.com/162/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ajdotnet.wordpress.com/162/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ajdotnet.wordpress.com/162/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ajdotnet.wordpress.com/162/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ajdotnet.wordpress.com/162/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ajdotnet.wordpress.com/162/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ajdotnet.wordpress.com/162/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ajdotnet.wordpress.com&blog=305378&post=162&subd=ajdotnet&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ajdotnet.wordpress.com/2008/04/27/i-cant-help-but-notice/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/03b347f75b708670587fdbae73778116?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ajdotnet</media:title>
		</media:content>

		<media:content url="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fajdotnet.wordpress.com%2f2008%2f04%2f27%2fi-cant-help-but-notice%2f" medium="image">
			<media:title type="html">kick it on DotNetKicks.com</media:title>
		</media:content>
	</item>
	</channel>
</rss>