<?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/"
	>

<channel>
	<title>.NET Stories: Digitale Erfahrungen &#187; Performance</title>
	<atom:link href="http://www.gmbsg.com/tag/performance/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.gmbsg.com</link>
	<description>So einfach wie möglich. Aber nicht einfacher.</description>
	<lastBuildDate>Tue, 31 Aug 2010 22:21:29 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Das Agile Team in Nahaufnahme</title>
		<link>http://www.gmbsg.com/das-agile-team-in-nahaufnahme/</link>
		<comments>http://www.gmbsg.com/das-agile-team-in-nahaufnahme/#comments</comments>
		<pubDate>Thu, 26 Aug 2010 10:21:08 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Aktuell]]></category>
		<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Works]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[Code Review]]></category>
		<category><![CDATA[DDD]]></category>
		<category><![CDATA[Emergenz]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Projektmanagement]]></category>
		<category><![CDATA[Prozess]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>
		<category><![CDATA[Software-Entwicklung]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Team]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=1270</guid>
		<description><![CDATA[Oder: Nähe ist besser als Distanz
Es ist schon eine wundersame Welt. Also, in meinen Augen natürlich. Ich schreibe diesen Artikel ja auch, also kann es nur eine persönliche und subjektive Meinung sein. Aber immerhin, es ist eine Meinung, und das ...]]></description>
			<content:encoded><![CDATA[<h3>Oder: Nähe ist besser als Distanz</h3>
<p>Es ist schon eine wundersame Welt. Also, in meinen Augen natürlich. Ich schreibe diesen Artikel ja auch, also kann es nur eine persönliche und subjektive Meinung sein. Aber immerhin, es ist eine Meinung, und das sogar ziemlich deutlich. Denn, ich habe den Artikel, die Kommentare und den Folge-Artikel von Golo zu seiner These &#8220;Räumliche Nähe wird überbewertet&#8221; gelesen. Das ich da anderer Meinung bin, habe ich ja schon gebloggt. Was also noch darauf rumreiten? Die Antwort ist einfach: Es ist wichtig, deswegen.</p>
<h3>Kommunikation = Mitteilung + Wahrnehmung</h3>
<p>Doch zunächst möchte ich in aller (nur notwendig langen) Kürze auf ein verwandtes Thema eingehen: Die Kommunikation. Besser gesagt, die <a href="http://de.wikipedia.org/wiki/Zwischenmenschliche_Kommunikation">zwischenmenschliche Kommunikation</a>. Kommunikation ist eine schwierige und herausfordernde Kunst. Der eine sagt etwas, der andere versteht etwas. Ob es dann das ist, was der eine sagen wollte und der andere verstehen wollte, hängt von unheimlich vielen Faktoren und komplexen Sachverhalten ab. Doch zunächst gilt es festzuhalten: <a href="http://twitter.com/ilkerde/status/21942161099">Kommunikation ist nicht nur Mitteilung, sondern auch Wahrnehmung</a>. So geschehen auch bei der &#8220;Blog-Kommunikation&#8221; zwischen mir, Golo und dem &#8220;Publikum&#8221; (also auch Dir, lieber Leser).</p>
<p>Mit Golo&#8217;s Aussage fing es an: &#8220;<a href="http://www.des-eisbaeren-blog.de/post/2010/08/19/Raumliche-Nahe-wird-uberbewertet.aspx">Räumliche Nähe wird überbewertet</a>&#8220;. Gut. Man könnte jetzt vieles wahrnehmen. Zum Beispiel könnte man wahrnehmen, dass Golo damit meint, dass ihm räumliche Nähe ein Graus ist. Oder man könnte wahrnehmen, dass Golo ein introvertierter, soziophober Alleingänger ist. Keines von dem ist der Fall. In meinen Augen ist derjenige, der so eine Wahrnehmung hat, einfach nicht aufgeschlossen und wohlwollend zu Golo&#8217;s Meinung. Dennoch &#8211; man könnte es sicherlich wahrnehmen.</p>
<p>Ich antwortete auf seine Aussage mit dem Artikel &#8220;<a href="http://www.gmbsg.com/raumliche-nahe-wird-unterschatzt/">Räumliche Nähe wird unterschätzt</a>&#8220;. Gut. Man könnte jetzt vieles wahrnehmen. Zum Beispiel könnte man wahrnehmen, das ich damit &#8220;Verteilte Teams sind nicht erfolgreich&#8221; postuliere. Oder man könnte wahrnehmen, das ich ein opportunitisch-dogmatischer Agile-Fetischist bin. Keines von dem ist der Fall. In meinen Augen ist derjenige, der so eine Wahrnehmung hat, einfach nicht aufgeschlossen und wohlwollend zu meiner Meinung. Dennoch &#8211; man könnte es sicherlich wahrnehmen.</p>
<p>Aber jetzt mal Tacheles kommuniziert: Wer sollte denn so etwas annehmen? Ich finde so eine Wahrnehmung absurd. Ja, geradezu lächerlich. Demjenigen, der wirklich allen ernstes Golo nachsagen möchte, dass er Colocation als &#8220;schädlich&#8221; einstuft, oder aber mir den Vorwurf macht, ich würde &#8220;Colocation über Alles!&#8221; predigen, dem traue ich auch zu, dass er in &#8220;<a href="http://www.youtube.com/watch?v=8QSgNM9yNjo">Satellite</a>&#8221; keine Liebeshymne sieht, sondern es als öffentliche Drohgebärde einer <a href="http://de.wikipedia.org/wiki/Stalking">Stalkerin</a> zu ihrem Opfer interpretiert. Soviel dazu.</p>
<h3>Die Mathematik der Meinung</h3>
<p>Zurück zum Thema, der räumlichen Nähe. Ich bin nach wie vor der Meinung, dass räumliche Nähe unterschätzt wird. Unterschätzt in vielerlei Hinsicht. Ich gehe zunächst auf eine Perspektive ein, die auch schon angesprochen wurde: Effizienz und Produktivität. Golo schreibt in einem Kommentar treffend seine Motivation:</p>
<blockquote><p>Golo: &#8220;&#8230;Es ging mir um die immer postulierte Allgemeingültig der Aussage &#8220;Colocation ist besser&#8221;. Zu zeigen, dass dem nicht so ist, genügt ein einziges Gegenbeispiel&#8230;&#8221;</p></blockquote>
<p>Meine Meinung dazu: Ja, Richtig und Nein, Falsch. Das ist nicht logisch? Macht nichts. Ist trotzdem so. </p>
<p>Denn: Ja, es ist richtig, dass Golo nur ein Gegenbeispiel zeigen muss, um die Allgemeingültigkeit ad acta zu legen. Und: Nein, es ist falsch, denn meiner Meinung nach ist das gewählte methodische Werkzeug &#8211; nämlich die Anwendung der Aussagenlogik und deren Beweismethoden &#8211; völlig unangebracht. Bei allem Respekt gegenüber der Professionalität und Kompetenz von Golo bin ich etwas irritiert, das gerade der Berater für agile Methoden die Colocation nicht zu favorisieren scheint.</p>
<p>Doch die Motivation verstehe ich nur allzu gut &#8211; es wird öfters die &#8220;Colocation&#8221; als Heilsbringer dargestellt. Dem ist nicht immer so. Aber muss man deswegen so eine trockene, wissenschaftliche Herangehensweise wählen? Ich denke, dass es nicht unbedingt notwendig gewesen wäre, denn schließlich führt die Bool&#8217;sche Algebra hin zu einer totalitären &#8220;Schwarz-Weiss&#8221;-Wahrnehmung (wie oben geschildert). Dabei ist in Wahrheit nicht schwarz oder weiss schön, sondern <a href="http://acab.muc.ccc.de/">alle Farben</a>.</p>
<p>Leider wird für meinen Geschmack bei diesem Thema zu tief in die mathematisch-naturwissenschaftliche Logik-Kiste gegriffen. Logik &#038; Mathematik sind mächtige Werkzeuge, die man oft und versatil einsetzen kann. Aber sie sind nicht die Weisheit für alle möglichen Systeme oder Lebenslagen. Ich meine, hier ist Logik alleine nicht das adequate Werkzeug. Vielmehr hilft meines Erarchtens hier der gesunde Menschenverstand mit dem unvergleichlichen Etwas, was uns Menschen auszeichnet: Emotion. Doch dazu komme ich gleich noch.</p>
<h3>Handlungsfähigkeit, Produktivität und Effizienz</h3>
<p>Fakt ist, dass Menschen, die an einem Ort, in einem Raum zusammenarbeiten, Ihre Arbeit in den meisten Fällen effizienter, effektiver und produktiver gestalten und erledigen. Abseits von Agilität und <a href="http://www.academypublisher.com/jsw/vol03/no04/jsw03043136.pdf">unabhängig von der eingesetzten agilen Managementmethode</a> stellt man fest: In sehr vielen Fällen ist ein &#8220;Warroom&#8221; oder &#8220;Teamroom&#8221; für eine erfolgreichere Gestaltung des Vorhabens <a href="http://possibility.com/Misc/p339-teasley.pdf">nicht nur hilfreich, sondern mit ausschlaggebend</a>. Darüber hinaus entwickelt sich ein deutlich zügigerer Durchlauf des Teams durch die Tuckman-Phasen. Mit der Zeit entwicklelt man auch ein viel besseres Verständnis zu den Aufgaben anderer und vermag auch, den anderen in brenzlichen Situationen zu helfen. Und manchmal ist man auch ganz glücklich, wenn einem selbst ein wenig unter die Arme gegriffen wird.</p>
<p>Es gibt dabei meiner Meinung nach aber noch einen weiteren wichtigen Aspekt. Es ist die Teamaufstellung. Es ist eines der Dinge, die bei der Diskussion für mein Empfinden viel zu wenig herausgearbeitet wurde. Oder besser auf Deutsch gesagt: es wurde einfach ignoriert. Schade. Denn ein agiles Team ist nur dann ein agiles Team, wenn es <a href="http://theagileproductmanager.blogspot.com/2008/07/whats-cross-functional-team-and-why.html">interdisziplinär (bzw. &#8220;cross-functional&#8221;) ist</a>. Warum das so ist, habe ich ja schon <a href="http://www.gmbsg.com/raumliche-nahe-wird-unterschatzt/">geschildert</a>. Der Effekt, der dabei entsteht, ist eine wesentlich effizientere Kommunikation zwischen den einzelnen Domänen- und Fach-Experten. Darüber hinaus werden intuitiv und äußerst effizient gemeinsame Schnittstellen und eine <a href="http://domaindrivendesign.org/node/132">Ubiquitous Language</a> entwickelt. </p>
<p>Es gibt noch eine <a href="http://www.smartagile.com/2007/08/team-co-location.html">Menge anderer Dinge</a>, die ein interdisziplinäre und lokale Teamaufstellung zu einer Präferenz zu anderen Teamstrategien macht. Doch der kausale Kern eines agilen Teams ist und bleibt geschäftsgetrieben. Ein agiles Team ist &#8220;im Kern&#8221; nur interdisziplinär, weil es der einzige Weg ist, ein Feature als Ganzes, also integer und abgeschlossen, umzusetzen. Das es nebenbei diese Aufgabe auch noch effektiver löst, als andere Teamaufstellungen, ist die &#8220;Sahne&#8221; auf dem Kuchen.</p>
<h3>Mi Kasa Es Su Kasa</h3>
<p>Ein weiterhin von Golo und anderen Kommentatoren kritisch beäugtes Merkmal von &#8220;Colocation&#8221; ist die &#8220;Minderung der Produktivität durch Störungen&#8221;. Diese Argumentation ist für <a href="http://www.agilegamedevelopment.com/2008/11/agile-principles-emphasize-face-to-face.html">Agilisten nichts Neues</a>. In meinen Augen ein Indiz für Ängste. Man befürchtet, dass man durch &#8220;den Lärm&#8221; und &#8220;die Unterhaltungen&#8221; im Raum nicht mehr konzentriert arbeiten kann, sich jeder die Kopfhörer aufsetzt und in seine Welt entschwindet. Man befürchtet, dass man sich nicht mehr in seinem eigenen kreativen Mikrokosmos nicht mehr wohlfühlen kann. Man befürchtet, beobachtet zu werden. Man befürchtet, sich einfach nicht mehr in die Arbeit &#8220;gehen lassen&#8221; oder &#8220;eintauchen&#8221; zu können. Das sind verständliche Ängste. Besonders dann, wenn man noch nie oder erst selten mit agilen Teams &#8211; oder als Teil eines agilen Teams gearbeitet hat. Ich kann das nachvollziehen.</p>
<p>Doch ich kann es nicht nachvollziehen, dass manche &#8211; wohl genährt durch diese Befürchtungen &#8211; behaupten, dass es &#8220;sowieso nicht besser wäre&#8221;, oder für die einzelne Persönlichkeit und den einzelnen Charakter ungeeignet sei. Noch dazu ohne es einmal ausprobiert zu haben. In meinen Augen ist das eine lapidare und profane Argumentation. Viel zu oft gewinne ich dadurch den Eindruck, das dieser  Schlag von Entwicklern ein wenig zu oft an sich selbst denkt als an andere Teammitgleider und die gemeinsame Sache. </p>
<p>So sind z.B. <a href="http://www.uxmatters.com/mt/archives/2009/07/a-practical-guide-to-capturing-creativity-for-ux.php">Designer und UX-Experten wesentlich intensiver mit kreativer Schaffung konfrontiert</a> und damit auch deutlicher abhängig von ein Umfeld, in dem die &#8220;Kreativität keimen und reifen&#8221; kann. Auch Produkt Manager sind oft mit hochkonzentrierten und komplexen Denkprozessen beschäftigt, wenn es z.B. um die Entwicklung von neuen Features eines Produktes geht. Was ich damit sagen will: Jeder ist ein Mensch, nicht nur die &#8220;Coder&#8221;. Wer wünscht sich nicht gerne sein eigenes &#8220;Arbeitsreich&#8221;? Doch auch wenn man es hätte, in den meisten Fällen wäre es für die gemeinsame Sache eben nicht zielführend, das jeder sein Reich hat und sein eigenes Ding auf seine eigene Art und Weise macht.</p>
<p>Interessanterweise sind es aus meiner Erfahrung gerade diejenigen, die mehrheitlich Konzentrations- oder Kreativitäts-Aufgaben erledigen, am wenigsten Probleme mit der Zusammenstellung interdisziplinärer Teams in einen Raum haben. Im Gegenteil. Sie fühlen sich inspiriert und freuen sich, dass ihre Arbeit auch gesehen und bewertet werden kann. Ein guter &#038; <a href="http://emilychang.com/2006/02/the-agile-web-design-manifesto-an-introduction/">agiler Web-Designer</a> z.B. freut sich über jedes frühe Feedback &#8211; von jedem. Natürlich braucht man auch seine Ruhe- und Schaffungsphasen. Jeder braucht das. </p>
<p>Das ist im Übrigen eines der ersten Dinge, die ein agiles Team auch lernt und gestaltet: Ruhephasen &#8211; Bibliotheksmodus &#8211; Silentio. Ein weiteres, hilfreiches Merkmal solcher &#8220;hyperproduktiven Arbeitsumgebungen&#8221; sind Fluchtpunkte. Also Ruheinseln, in denen man sich zurückziehen kann. Für Persönliches oder Privates. Oder einfach nur so, zum ausruhen. Powernap. Etwas lesen. Am Flipper eine Runde zocken und den Kopf etwas frei kriegen. Auftanken.</p>
<p>Ich sage nicht, das all das, was ich gerade erwähnt habe, nicht auch mit verteilten Teammitgliedern möglich wäre. Es ist auch machbar. Die Profi&#8217;s Golo &#038; Peter sind ein <a href="http://www.des-eisbaeren-blog.de/post/2010/08/19/Raumliche-Nahe-wird-uberbewertet.aspx">gutes Beispiel</a> dafür. Aber es ist meiner Meinung in sehr vielen Fällen ungleich schwieriger, deutlich fragiler und auch minder effizient. Mit Colocation funktioniert es natürlich auch nicht immer &#8211; aber dafür deutlich öfter, einfacher und produktiver.</p>
<h3>Emotion. Hautnah.</h3>
<p>Zurück zu dieser einen &#8220;ungreifbaren&#8221; Sache, die mit agilen Teams an einem gemeinsamen Ort besonders hervorstechend ist. Die Emotion. Emotion ist etwas so wichtiges und schönes. Auch für Entwickler und Nerds. Man regt sich über den langsamen SATA-Treiber auf. Man installiert gespannt die neuesten Plugin&#8217;s für Visual Studio während man sich mit dem Käsebrötchen vollkrümelt. Man lacht sich über den 3. roten Build des Tages kaputt, weil es wieder einmal ein Leichtsinnsfehler war.</p>
<p>Doch Emotion ist nicht nur für einen selbst wichtig. Emotion ist auch für andere wichtig. Die Sprache ist nur ein Teil der Kommunikation. Manche Streiten sich darüber, ob nur <a href="http://blog.my-skills.com/2007/10/18/mythos-93-der-kommunikation-ist-nonverbal.html">7% unserer gesamten Kommunikation</a> verbal ist. Fakt ist, Sprache ist nicht alles. Den Satz &#8220;Ich verstehe.&#8221; von einer langfährigen, erfahrenen Web-Designerin zu hören &#8211; flüsternd, mit glasigen Augen und zittrigen, schweißgebadeten Händen, die sie vergebens versucht hinter ihrer großen Pop-Art-Teetasse zu verstecken &#8211; oder aber &#8220;Ich verstehe.&#8221; mit resoluter Stimme wahrzunehmen &#8211; gefolgt von einer gekonnten Seitwärtsdrehung, die ihre zum Pferdeschwanz gebundenen Haare durch die rapide Rotationskraft zu einem Duftkatalysator ihres Luxusparfums entarten lässt und mit der Registrierung ihrer kalten Schulter abrupt endet. Ein und das selbe Wort &#8211; doch zwei Nachrichten, die gegensätzlicher kaum sein könnten. Natürlich gibt es noch tausende von andere Bedeutungen des Satzes &#8220;<a href="http://www.youtube.com/watch?v=VgesUCTCoBs">Ich verstehe</a>&#8220;, aber ich denke Du verstehst, was ich meine. ;)</p>
<div style="float:right"><object width="360" height="227"><param name="movie" value="http://www.youtube.com/v/xDOURH0O16w?fs=1&amp;hl=en_US&amp;rel=0&amp;color1=0x3a3a3a&amp;color2=0x999999"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/xDOURH0O16w?fs=1&amp;hl=en_US&amp;rel=0&amp;color1=0x3a3a3a&amp;color2=0x999999" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="360" height="227"></embed></object></div>
<p>Für einige mag das jetzt zu weich, unlogisch, konstruiert oder unwissenschaftlich sein. Aber das ist mir egal. Denn das ist es, was ich am Anfang dieses Artikels mit &#8220;es ist wichtig&#8221; gemeint habe und was ich zum Ausdruck bringen will: Agile Teams, die gemeinsam an einem Ort arbeiten sind sicherlich nicht perfekt. Aber sie sind in der deutlichen Vielzahl der Fälle produktiver, effektiver, handlungsfähiger, änderungswilliger, offener, respektvoller und: emotionaler. </p>
<p>Das Ergebnis ist eine gewisse Energie, eine gewisse Magie, die bei agilen Teams mit Colocation öfter und schneller entsteht. In dem letzten Slide meines <a href="http://www.youtube.com/watch?v=xDOURH0O16w">Enthusiasmus-Vortrags</a> über Scrum beim Webmontag in München sieht man <a href="http://www.youtube.com/watch?v=YWkSnKd-5Tc">eine Band im Sonnenuntergang zusammenspielen</a>. Das spiegelt die Energie &#038; Magie ein wenig wider: die Emergenz des Teams. Das Ganze ist mehr als die Summer der einzelnen Teile.</p>
<div style="float:right"><object width="360" height="227"><param name="movie" value="http://www.youtube.com/v/YWkSnKd-5Tc?fs=1&amp;hl=en_US&amp;rel=0&amp;color1=0x3a3a3a&amp;color2=0x999999"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/YWkSnKd-5Tc?fs=1&amp;hl=en_US&amp;rel=0&amp;color1=0x3a3a3a&amp;color2=0x999999" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="360" height="227"></embed></object></div>
<p>Und damit dieses ach so kindische &#8220;aber du sagt das ist toll und alles andere ist blöd&#8221;-Fingerpointing nach diesem Artikel hoffentlich keinen Nährboden findet, nochmal ein klarer Disclaimer: Ich habe die Weisheit nicht gepachtet. Ich bin kein Klugscheißer und Besserwisser, und ich will es auch nicht sein. Aber ich habe eine Meinung. Ob sie Dir gefällt, lieber Leser, musst Du schon selbst wissen. </p>
<p>Für mich ist klar: wer wirklich agile Software-Entwicklung betreiben möchte, der wird versuchen, ein Team an einem gemeinsamen Ort arbeiten zu lassen. Wenn es nicht möglich ist, dann eben mit Hilfsmitteln verteilt. Alles andere ist in meinen Augen weder agil, noch fortschrittlich, noch wirklich produktiv. Ob das für Dich, lieber Leser, auch so ist, musst Du schon selbst wissen.</p>
<p>Ich bevorzuge es, wenn ich meinem Kollegen auf die Schulter klopfen kann, wenn er einen genialen Integrationstest geschrieben hat. Oder dem Web-Designer in sein kritisches Gesicht zu blicken, wenn er wieder einmal den Usability-Prototyp der UX-Designerin begutachtet und währenddessen sich die Komplementärfarben im Pantone-Fächer zurechtsucht. Es ist für mich eine Ehrensache, dem gestressten Produktmanager beim sortieren und formulieren der neuen User Stories zu helfen, weil er in einer Stunde ein wichtiges Meeting mit dem Marketing hat. Und: es baut mich auf, wenn meine Teammitglieder mich anlächeln, weil ich ein Feature mit einem Kollegen fertiggestellt habe und wir uns nach dem grünen Build in den Armen liegen, als wäre der FC Bayern gerade Championsleague-Sieger geworden.</p>
<div style="clear:both"></div>
<p>Ich bevorzuge agile Teams an einem Fleck, an einem Ort, in einem Raum.<br />
Gemeinsam für die gemeinsame Sache.<br />
Räumliche Nähe wird unterschätzt. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/das-agile-team-in-nahaufnahme/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Null Toleranz</title>
		<link>http://www.gmbsg.com/null-toleranz/</link>
		<comments>http://www.gmbsg.com/null-toleranz/#comments</comments>
		<pubDate>Sun, 02 May 2010 00:09:32 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Anforderungen]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Clean Code]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[NULL]]></category>
		<category><![CDATA[Null Reference]]></category>
		<category><![CDATA[Objekt-Orientierung]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Software-Entwicklung]]></category>
		<category><![CDATA[Tony Hoare]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/?p=986</guid>
		<description><![CDATA[Eine angeregte Diskussion ist gestern &#8220;ent-Bandt&#8221; :-) mit den Blog-Posts über den kleinen ToListOrDefault()-Helper und die dadurch entstandende Null-Verständnis-Thematik sowie der philosophischen Ausführung über das Null oder nicht Null in Anwendungen. Man kann in den Posts wunderbar nachlesen, worum es ...]]></description>
			<content:encoded><![CDATA[<p>Eine angeregte Diskussion ist gestern &#8220;ent-Bandt&#8221; :-) mit den Blog-Posts über den kleinen <a href="http://blog.thomasbandt.de/39/2331/de/blog/kleiner-helper-fuer-linq-to-sql-tolistordefault-update.html">ToListOrDefault()-Helper</a> und die dadurch entstandende <a href="http://blog.thomasbandt.de/39/2333/de/blog/null-verstaendnis.html">Null-Verständnis-Thematik</a> sowie <a href="http://ralfw.blogspot.com/2010/05/null-oder-nicht-null-das-ist-hier-die.html">der philosophischen Ausführung über das Null oder nicht Null</a> in Anwendungen. Man kann in den Posts wunderbar nachlesen, worum es geht &#8211; deswegen hier nur eine kleine Rekapitulation.</p>
<p>Thomas stellt zur Debatte, ob man aus Repository-Methoden ab und zu auch mal null zurückgeben darf/kann/soll. So z.B. bei so einer Methode:</p>
<pre name="code" class="brush: csharp">
User GetUserByName(string name);
</pre>
<h3>Mache das Unmögliche möglich?!?</h3>
<p>Einige Leute finden das garnicht besonders gut. Sie bevorzugen lieber soetwas wie einen &#8220;nicht-existenten&#8221; User zurückzugeben. Also eine Instanz einer Klasse, die eigentlich garnicht möglich wäre (weil sie ja die nicht exsistierende Instanz darstellt). Programmtechnisch ist das sicherlich recht einfach lösbar &#8211; oftmals mit einer statischen Property, die sich wiederum eines privaten Konstruktors bedient. In dem obigen Beispiel könnte eine derartige Implementierung ungefähr so aussehen:</p>
<pre name="code" class="brush: csharp">
public User GetUserByName(string name)
{
  if (!repository.UserExists(name))
    return User.NotExistent;

  //user laden und zurückgeben
}
</pre>
<p>Eine zweite, nicht minder bevorzugte Alternative zur Rückgabe von NULL ist die beliebte Exception. Falls also kein Benutzer unter dem angefragten Namen existieren sollte, dann soll eine Ausnahme signalisiert werden. Ganz einfach implementiert:</p>
<pre name="code" class="brush: csharp">
public User GetUserByName(string name)
{
  if (!repository.UserExists(name))
    throw new UserNotFoundException(name);

  // user laden und zurückgeben
}
</pre>
<p>Beides sind sicherlich mögliche und sogar gute Alternativen zu der Implementierungsvariante, die Thomas zur Diskussion gestellt hat:</p>
<pre name="code" class="brush: csharp">
public User GetUserByName(string name)
{
  if (!repository.UserExists(name))
    return null;

  // user laden und zurückgeben
}
</pre>
<p>Um es kurz zu fassen: Alle drei Varianten sind möglich, alle drei Varianten sind gut, alle drei Varianten sind schlecht. Es kommt auf den Anwendungsfall an. Die beliebte &#8220;It-Depends&#8221;-Weisheit streckt das Thema mit geballter Kraft nieder. Dennoch ist es eine Untersuchung wert, denn ungewöhnlicherweise wird die NULL-Variante kategorisch als falsch und &#8220;böse&#8221; bewertet.</p>
<h3>Nullbivalenz</h3>
<p>NULL ist ein besonderer Wert. Er ist der Wert, der eigentlich nicht zugewiesen werden kann. Genauer genommen ist er kein Wert, sondern nichts anderes als die knapp in vier Buchstaben formulierte Aussage &#8220;Ein für eine bestimmte Werteklasse belegter Ort wurde mit keinem Wert belegt&#8221;. Ergo: Null ist kein Wert. Ja, aber ist das denn nicht genau das, was <code>GetUserByName</code> ausdrücken und zurückgeben muss, wenn es keinen Benutzer für den gegebenen Namen findet?</p>
<p>Schaut man sich die erste Alternative zu NULL an (also das <code>User.NonExistent</code>-Konstrukt), dann kann man sagen: Joa, ok &#8211; ist aber das Gleiche. User.NonExistent ist sicherlich expliziter als NULL. NULL ist aber schon da und genau für solche Dinge gedacht. Die Aufgabe von NULL ist ja genau die, keinen Wert darzustellen.</p>
<p>Und wie sieht es mit Alternative Zwei &#8211; der <code>UserNotFoundException</code> aus? Die Excpetion ist auch explizit. Mehr noch, die Exception ist flexibel und rigoros gleichermaßen. Flexibel, weil sie jederzeit aus dem Nichts auftauchen kann. Rigoros, weil sie eine Fülle von Informationen über den Kontext sammeln und mitgeben kann. Die Exception sagt hier klar und deutlich: &#8220;Es gibt keinen Wert, weil der Benutzer {name} nicht gefunden wurde.&#8221;. Scheinbar ein Vorteil gegenüber den anderen Varianten. Im Ergebnis ist es jedoch nicht wesentlich von den anderen Herangehensweisen unterscheidbar.</p>
<h3>Null Sicherheit</h3>
<p>Nun, offensichtlich ist die sprechendere Variante der Exception vorteilhaft und damit dem NULL vorzuziehen. Doch beim zweiten Blick entpuppt sich der Vorteil als nicht so deutlich als zunächst vermutet. Denn in der Praxis kann sich die &#8220;unklare&#8221; und &#8220;unexplizite&#8221; Art von NULL wieder als erwünscht erweisen. </p>
<p>So muss man bei Exceptions, um den Mehrwert zu kennen, auch deren Typ genau kennen. Man muss also Wissen, das es sich um eine <code>UserNotFoundException</code> handelt. Erst dann kann man auch erfahren, welcher ominöse Benutzer unauffindbar ist. Das kann durchaus problematisch werden, wenn man also im höheren Callstack wissen muss, um welche Exception es geht, denn schliesslich schafft man sich dadurch eine Abhängigkeit auf den niedrigeren Code.</p>
<p>Null ist also eine unsichere, uninformative, aber immer verfügbare und unabhängige Variante, dem Aufrufer zu sagen: &#8220;Es gibt keinen Wert für das, was Du von mir verlangst&#8221;. Wenn man sich mit der Anwendung von NULL jahrelang auseinandergetzt hat und auch ein wenig die ungeliebten Interna von Speichermanagement &#038; Datenstrukturen hineinblickt, dann wird NULL schnell zu einer praktikablen Lösung für schwierige Situationen. </p>
<p>Doch vor Allem bei NULL stellt man immer wieder fest: praktikabel und elegant sind zwei verschiedene paar Schuhe. Denn NULL ist genauso nichtssagend wie vielseitig. NULL zwingt den Aufrufer zum Abwägen: Soll ich das Ergebnis gleich auswerten oder lieber überprüfen? Ein wunderbares Beispiel dafür ist sicherlich der &#8220;if (x != null)&#8221;-Check &#8211; die Null-Prüfung. Das wird vor Allem dann zum Problem, wenn man mit (gewollt oder ungewollt) unbekannten Komponenten arbeitet. Im Interface oder in der Typsignatur steht es jedenfalls sehr selten erkennbar drin, ob nun in Einzelfällen NULL zurückgeliefert wird oder nicht.</p>
<h3>Null ist nicht gleich Null</h3>
<p>Für mich gibt es beim Umgang und bei der Anwendung von Null keine Faustregel. Ich gebe in einigen Methoden NULL zurück. Meistens genau dann, wenn ich wirklich damit ausdrücken möchte, dass etwas katastrophales passiert ist. Ich finde es sehr schwerwiegend, NULL als Zuweisung oder Rückgabe stehen zu lassen &#8211; aber ich mache es manchmal ganz bewusst. In einer Anwendung, in der ich z.B. Benutzer über einen Authentifizierungsdienst identifizieren muss, bevor ich überhaupt etwas anderes machen kann, kann die folgende Signatur NULL zurückliefern:</p>
<pre name="code" class="brush: csharp">
interface IAuthenticationService
{
  Account SignIn(string user, string password);
}
</pre>
<p>Es kann alles mögliche passiert sein  &#8211; keine Verbindung zum Server, falscher Server, Verbindungsfehler, Connection Timouts, Benutzer nicht gefunden, Benutzer gesperrt, Passwort abgelaufen, falsches Passwort &#8211; all dies würde ich versuchen über Exceptions oder Return-Codes zu erledigen. Die meisten der Exceptions gibt es ja schon frei Haus vom Framework. Aber für das mich Unbekannte und Unerwartete gibt es immer noch eine Rückgabe, und die heisst NULL.</p>
<h3>Null-Summen-Spiel</h3>
<p>Generell kann ich für mich nur sagen, dass ich gelernt habe mit NULL sehr vorsichtig umzugehen. Ich vermeide es so gut wie möglich. Exceptions sind ein gutes Mittel &#8211; allerdings setze ich sie auch nicht sehr oft ein. Die Bürde der Abhängigkeit ist schon da &#8211; obwohl es natürlich in der Contract-Assembly definiert ist. Bei Repositories habe ich (fast) immer Ergebnisse die nicht NULL liefern. Andererseits setze ich NULL als Rückgabe auch öfter ein, wenn ich nur eine &#8220;schwere&#8221; Ausnahme in meinem Code feststelle.</p>
<p>Im obigen Beispiel hätte ich wohl NULL als Rückgabe toleriert, vor Allem, wenn ich davon ausgehen kann, dass es oft &#8211; oder sehr oft &#8211; dazu kommen kann und diese Tatsache ein schwerwiegendes Problem darstellt. Ein schönes Beispiel sind immer wieder die Brute-Force und DOS-Attacken auf Webportale. </p>
<p>Ich hätte wahrscheinlich nicht NULL zurückgegeben, sondern eine Exception ausgelöst, wenn ich das Ganze als wiederverwendbare, allgemeine Kompontente entwickeln würde. </p>
<p>So oder so &#8211; beides ist machbar und beides hat seine Berechtigung. Klar und deutlich soll aber abschließend erwähnt sein: NULL zu vermeiden ist eine gute Sache. Es macht den Code expliziter, offensichtlicher und lesbarer.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/null-toleranz/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Web Performance Analyse Tool &#8211; Visual Round Trip Analyzer</title>
		<link>http://www.gmbsg.com/web-performance-analyse-tool-visual-round-trip-analyzer/</link>
		<comments>http://www.gmbsg.com/web-performance-analyse-tool-visual-round-trip-analyzer/#comments</comments>
		<pubDate>Fri, 06 Mar 2009 17:09:38 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/stories/?p=258</guid>
		<description><![CDATA[Ein nettes Tool zur Analyse der Performance von Webseiten ist der Microsoft Visual Round Trip Analyzer (aka. VRTA). 

Zur Datenerfassung verwendet es im Hintergrund Microsoft Netmon, bereitet diese auf und stellt sie übersichtlich graphisch dar. Ein weiteres nettes Feature ist ...]]></description>
			<content:encoded><![CDATA[<p>Ein nettes Tool zur Analyse der Performance von Webseiten ist der <a href="http://www.microsoft.com/Downloads/details.aspx?FamilyID=119f3477-dced-41e3-a0e7-d8b5cae893a3&#038;displaylang=en">Microsoft Visual Round Trip Analyzer</a> (aka. VRTA). </p>
<p><a href="http://www.gmbsg.com/stories/wp-content/uploads/2009/03/vrta_chart.png"><img src="http://www.gmbsg.com/stories/wp-content/uploads/2009/03/vrta_chart-300x53.png" alt="" title="vrta_chart" width="300" height="53" class="aligncenter size-medium wp-image-260" /></a></p>
<p>Zur Datenerfassung verwendet es im Hintergrund <a href="http://www.microsoft.com/DOWNLOADS/details.aspx?FamilyID=f4db40af-1e08-4a21-a26b-ec2f4dc4190d&#038;displaylang=en">Microsoft Netmon</a>, bereitet diese auf und stellt sie übersichtlich graphisch dar. Ein weiteres nettes Feature ist die Bewertung der Daten durch den Analyzer auf Basis verschiedener Aspekte, wie z.B. Bandbreiten-Effizienz, Expiration-Dates, Image clustering oder <a href="http://en.wikipedia.org/wiki/Time_To_First_Byte">TTFB</a>. Hilft meiner Meinung nach zur schnellen Analyse.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/web-performance-analyse-tool-visual-round-trip-analyzer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Technical Summit 08: Teil 1</title>
		<link>http://www.gmbsg.com/technical-summit-08-teil-1/</link>
		<comments>http://www.gmbsg.com/technical-summit-08-teil-1/#comments</comments>
		<pubDate>Thu, 20 Nov 2008 21:02:04 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[3.0]]></category>
		<category><![CDATA[4.0]]></category>
		<category><![CDATA[ADO.NET]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Azure]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Claims]]></category>
		<category><![CDATA[Datenbank]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[Entity Framework]]></category>
		<category><![CDATA[MDD]]></category>
		<category><![CDATA[Multithreading]]></category>
		<category><![CDATA[Oslo]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[Software-Entwicklung]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[WCF]]></category>
		<category><![CDATA[WF]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/stories/?p=220</guid>
		<description><![CDATA[Yep, der erste Tag ist geschafft. Anbei mein Log der Sessions:
Session 1: Steve Teixeira über Multi-Core Software-Entwicklung
Steve Teixeira ist Program Manager beim Parallel Developler Tools / Visual Studio Team in Redmond und hatte in seiner Session neben der grundlegenden Einführung ...]]></description>
			<content:encoded><![CDATA[<p>Yep, der erste Tag ist geschafft. Anbei mein Log der Sessions:</p>
<h3>Session 1: Steve Teixeira über Multi-Core Software-Entwicklung</h3>
<p><a href="http://blogs.msdn.com/texblog/">Steve Teixeira</a> ist Program Manager beim Parallel Developler Tools / Visual Studio Team in Redmond und hatte in seiner Session neben der grundlegenden Einführung der neuen API für Multithreading auch einige Neuigkeiten über die nächste Visual Studio Version zu berichten. Doch alles der Reihe nach. Zunächst einmal schilderte Steve, wieso man sich eigentlich Gedanken über Parallele Ausführung von Code machen sollte. Der Grund ist natürlich bei der Hardware-Entwicklung vergraben, denn mittlerweile gelangt man an die Leistungsgrenzen im CPU-Design mit einem Kern. Der Hauptgrund ist die inzwischen fast unkontrollierbare Wärmeleistung, die die Chips von sich geben. Der Trend ist zu Multi-Core-CPU&#8217;s ist eindeutig auch im Alltag angekommen.</p>
<p>Das wiederum macht es erforderlich, die Software auf die neuen Gegebenheiten anzupassen. Steve zeigte ein schönes Beispiel mit Hilfe von <a href="http://en.wikipedia.org/wiki/Linq>LINQ</a> und <a href="http://en.wikipedia.org/wiki/Parallel_FX_Library">PLINQ</a> um die Unterschiede zwischen sequentiellem und parallelisiertem Code deutlich zu machen. Was heißt das für den &#8220;Alltags-Entwickler&#8221;, wie ich es z.B. bin? Nun, zunächst einmal bedeutet es eine Schärfung der Coder-Sinne auf das Thema Performance. Ich fühle mich zwar in diesem Thema schon heute gut aufgehoben, aber es dürfen ruhig noch ein wenig mehr Details sein. </p>
<p>Unterstützt wird dies im Besonderen durch das neue <a href="http://msdn.microsoft.com/en-us/vs2008/products/cc948977.aspx">Visual Studio 2010</a>. Es kommt mit neuen Tools wie Performance und Concurrency Profilern, die deutlich, graphisch anschaulich zeigen, wieviel Zeit die Software für bestimmte Aktionen verbraucht und mit welchen Ressourcen diese Leistung erreicht wurde. Auffällig dabei sind auch die Optionen, die das neue Performance-Tool bietet: CPU-basiertes Sampling, komplette Instrumentation, also Analyse aller Zeiten und Zyklen von Methodenaufrufen und das schon eben erwähnte Concurrency Profiling, mit dem man in der Lage ist zu erkennen, wie die Threads mit den Aufgaben ausgelastet sind. </p>
<p>Eine &#8220;Performance Debugging Suite&#8221; also, die im neuen Visual Studio verankert sein wird. Voraussetzung ist jedoch die Installation auf Windows Vista oder Windows 2008, da die Monitoring-Tools intern eng mit der seit Vista erweiterten Windows Eventing API (ETW) zusammenarbeiten.</p>
<p>Für so passionierte .NET-Entwickler wie mich ist die Verwendung der neuen API einfacher als erwartet. So lassen sich z.B. LINQ-Abfragen elegant mit dem &#8220;Anhängsel&#8221; <code>.AsParallel()</code> parallelisieren. Mindestens genauso einfach lassen sich auch Codebestandteile für die Parallel-Ausführung trimmen. Eine einfache for-Schleife ist mit <code>Parallel.For()</code> im Nu für die Parallelisierung umgesetzt. Die Nebeneinanderausführung von separaten Codeteilen mit <code>Parallel.Invoke()</code> ist zügig definiert und intuitiv. All diese Dinge sind fest im neuen .NET Framework 4.0 verankert. Interessant in diesem Zusammenhang ist, das Steve explizit auf deutliche Verbesserungen &#8220;unter der Haube&#8221; hingewiesen hat. So ist z.B. die <code>ThreadPool</code>-Klasse intern mit neuen Strategien wie dem Work Stealing ausgestattet worden, um die Verteilung der Aufgaben in Multi-Core Umgebungen zu optimieren.</p>
<p>Ein helles Ohr hatte ich auch bei den vielen kleinen Anekdoten und Anmerkungen von Steve. So ging er flüchtig auf die Entwicklung von Visual Studio ein und verriet, das der Visual Studio Code mehrheitlich in C++ und C# geschrieben ist und derzeit mehr als 45 Millionen Codezeilen umfasst. Interessant ist auch die Tatsache, dass das Visual Studio Team bei der Entwicklung von neuen Komponenten und UI verstärkt WPF im Einsatz hat. Steve begründet das mit der schlichten Tatsache, das WPF schnell genug ist und eine wesentlich effizientere UI-Entwicklung ermögliche als mit der klassischen GDI.</p>
<p>Fazit: Ein absolutes Highlight &#8211; Visual Studio 2010 in Aktion und Insider-Wissen. VS10, Parallels &#038; .NET 4.0, ich warte auf euch&#8230;</p>
<h3>Session 2: Holger Schwichtenberg und AJAX Services</h3>
<p>AJAX ist nicht nur in aller Munde sondern heutzutage schon fast auf jeder Website in irgendeiner Form im Einsatz. Das man AJAX auch in ASP.NET einsetzen kann, ist spätestens nach dem .NET Framework 3.5 keine besondere Neuigkeit mehr. So auch der Inhalt der Session von Holger. Er machte einen knapp einstündigen Rundflug über die Möglichkeiten des AJAX-Einsatzes in ASP.NET, darunter das berüchtigte UpdatePanel (aka. AJAX für Arme), das AJAX Control Toolkit (aka. Atlas) und die kleinen Tools, die mit den ADO.NET Data Services einhergehen.</p>
<p>Auf AJAX-Spezifische News für .NET 4.0, den JQuery-Support mit ASP.NET 4.0 oder Visual Studio 2010 ging Holger garnicht oder nur am Rande mit einem Keyword aus einem Slide ein. Schade, aber aus meiner Sicht eine sehr schwache und fachlich &#8220;äußerst überschaubare&#8221; Session. Besonders die Argumentationen von Holger für so manche Technologie sind in meinen Augen etwas zu oberflächlich. So geschehen bei einer Frage eines Zuhörers:</p>
<blockquote><p><i>Zuhörer</i>: Bei den ADO.NET Data Services verzichten Sie auf eine gewohnte 3 bzw. N-Tier Architektur. Dies wurde lange als &#8220;Best Practice&#8221; vermittelt und nun wird das mißachtet. Was meinen Sie?</p></blockquote>
<blockquote><p><i>Schwichtenberg</i>: Nun, ich sage Ihnen ja nicht, das eine N-Tier Architektur nicht empfehlenswert ist. Aber &#8211; mit ADO.NET Data Services ist der Betrachtungswinkel ein anderer. Während &#8220;klassische&#8221; Web Services nur die Daten und Funktionen herausgeben, die wirklich benötigt werden &#8211; also praktisch die Daten schon serverseitig Filtern &#8211; wird bei den ADO.NET Data Services zunächst der gesamte Datenbestand im Web Service angeboten. Der Client kann nun über die REST-Query entscheiden, was er konkret benötigt. Aus meiner Sicht ist diese Herangehensweise ein Produktivitätsgewinn.</p></blockquote>
<p>Na, das ist ja eine feine Aussage! Sichereitsbedenken scheint Holger nicht zu haben, wenn er alle Daten frei verfügbar macht. Des Weiteren ist die Konstellation AJAX + ADO.NET Data Services + Entity Framework sehr wohl eine &#8220;Tiered Architecture&#8221;, Das Entity Framework löst den klassischen Data Layer ab. Die Data Servies können als &#8220;Business Layer&#8221; durchgehen (man kann ja selbst noch einiges dazu entwickeln und der Zweck eines &#8220;Data Providers&#8221; kann in meinen Augen auch als &#8220;Business&#8221; definiert werden). Zu guter letzt ist AJAX bzw. die Website die UI bzw. das Frontend. Naja, vielleicht habe ich es auch nicht richtig kapiert, was Holger damit gemeint hat.</p>
<p>Fazit: Eine der schwächeren Sessions, die fachliche Tiefe und vor Allem Neuigkeiten bzw. Best Practices vermissen ließ.  </p>
<h3>Session 3: Dariusz quatscht hessisch, und zwar &#8220;Windoos Äschär&#8221;</h3>
<p>Der Name ist Programm: Dariusz wagt sich in die neue blaue Windows-Welt: &#8220;<a href="http://www.microsoft.com/azure/services.mspx">Windoos Äschär</a>&#8221; &#8211; so meint er könnte man es zumindest versuchen, die neue Service-Familie auszusprechen. In wohl bekannter Manier stieg er fröhlich in die Thematik mit einem Überblick ein.</p>
<p>Da wären zunächst die .NET Services &#8220;Access Control&#8221;, &#8220;Service Bus&#8221; und &#8220;Workflow&#8221;. Der Access Control Dienst so etwas vergleichbares wie ein etwas besserer, Claims-basierter Single-Sign-On Service mit Authorisierungsmanagement. Über eine Claims-Challenge können sich Nutzer und Dienste gleichermaßen authentifizieren. Dabei kann man aus der gewohnten Variabilität der Authentifizierungsart wählen &#8211; ob nun UserNamePassword, Zertifikate, Windows Live ID &#8211; Claims bleibt Claims. Der Service Bus ist der aus größeren Unternehmen bekannte ESB portiert auf die &#8220;Cloud&#8221;. Mittelfristig soll mit dem Service Bus eine &#8220;orchestrierte&#8221; Gemeinde von Diensten zur Verfügung gestellt werden. Das Pattern ist jedenfalls nicht neu. Der dritte im Bunde ist der Workflow Dienst. Basierend auf der WF kann er als &#8220;Schaltzentrale&#8221; verwendet werden. Momentan ist dieser Baustein noch sehr rudimentär, soll aber weiter ausgebaut werden.</p>
<p>Eine weitere Service-Gruppe ist die &#8220;SDS&#8221; &#8211; die SQL Data Services. Gleich zu Beginn klärt Dariusz hier den Unterschied zwischen &#8220;Azure Storage&#8221; und den &#8220;echten&#8221; SQL Diensten. Während die Storage eher eine &#8220;einfache, sqlfähige Datenablage&#8221; ist, sollen die SDS mittel- bis langfristig wesentlich mehr Features anbieten wie z.B. Reporting, Data Mining oder ETL Dienste. Gewöhnungsbedürftig bei den SDS ist die Organisation der Daten: Man hat nicht mehr die klassischen, relationalen SCHEMA TABLE ROW Strukturen. Statt dessen befinden sich die Daten in sog. &#8220;Containern&#8221; (vergleichbar mit Datenbanken oder Schemata). Die Daten wiederum sind als &#8220;Entities&#8221; strukturiert. Eine Entity hat mindestens einen Typ (also den Entity-Namen), eine EntityID und den EntityKind, welche Aussage über die Art oder Klasse der Datenstruktur geben soll. Weitere Felder sind frei definierbar. Die Feldtypen beschränken sich derzeit nur auf einfache Datentypen.</p>
<p>Auf weitere Dienst-Gruppen ist Dariusz nicht eingegangen &#8211; wie sollte er auch &#8211; er hatte während der Session mit anderen Problemen zu kämpfen. Jede zweite Demo ging nicht oder brach mit irgendwelchen Exceptions ab. Tja, er musste selbst zugeben, das &#8220;Äschär&#8221; noch nicht ganz fertig ist und an der einen oder anderen Stelle die notwendige Reife für den produktiven Einsatz vermissen ließ.</p>
<p>Der erste Eindruck den Windows Azure und die &#8220;SOA-Diensten&#8221; hinterlassen ist das Interesse an Neuem mit einer großen Portion Skepsis. Auch wenn irgendwann einmal Azure stabil und schnell wird bleibt abzuwarten, ob die Plattform attraktiv und intuitiv genug ist, um echte Anwendungen darauf laufen zu lassen.</p>
<p>Fazit: Mal sehen was daraus wird!</p>
<h3>Session 4: Dirk Primbs schreibt effizienten Code in C# 3.0</h3>
<p>Dirk ist eines der bekanntesten Gesichter auf Konferenzen &#8211; kein Wunder, schließlich ist er seines Zeichens Developer Evangelist bei Microsoft. Die heutige Session hatte die Überschrift &#8220;Effizienter Code in C# 3.0&#8243; &#8211; das hörte sich vielversprechend an. Also dachte ich mir, wenn ich schon nicht in die Session von Berndt gehen kann (er war leider nicht anwesend und wurde durch Dariusz vertreten), dann höre ich mir mal an, was Dirk mir über Effizienz mit C# 3.0 zu erzählen hat.</p>
<p>Leider war nicht ganz in dem Paket drin was draufstand. Dirk verbrachte über die Hälfte der Zeit damit, die Geschichte von .NET und C# zu erzählen. Angefangen bei C# 1.0, über C# 2.0 bis zum aktuellen C# 3.0. Die aktuelle 3.0-Version kam dabei für meine Begriffe viel zu kurz. Dirk vermittelte in seiner Retrospektive über C# 2.0 sehr gut, was Generics, Anonymous Methods und Discrete Property Accessors sind. Doch besonders prickelnd war es nicht gerade, mittlerweile gängige Konstrukte nochmals vorgekaut zu bekommen. Mit C# 3.0 hatte das wenig zu tun, und mit effizientem Code auch nicht.</p>
<p>Wahrscheinlich habe ich mir unter dem Titel &#8220;Effizienz&#8221; etwas anderes vorgestellt als Dirk. Er ging auf Syntax und &#8220;eleganten&#8221; Code ein, wo ich eher Effizienz-Vergleiche zwischen konkrekten und anonymen Typen erwartet hätte. Dennoch war es nicht langweilig &#8211; wer Dirk schon öfter erleben durfte, der weiß warum.</p>
<p>Es blieb am Ende doch noch eine gute Viertelstunde übrig, um auf neue Sprachkonstrukte und Features von C# 3.0 einzugehen. Type Inference und das <code>var</code> Keyword, Object Initializer und Automatic Properties. Wie zu erwarten war, wurde die Verwendung des <code>var</code> Keywords &#8220;angeregt&#8221; diskutiert. Ich hatte mich in einem Post ja schon über den <a href="/stories/?p=187">Sinn und Zweck von var</a> geäußert. Äußerst bedauernswert fand ich allerdings, das kein Sterbenswörtchen über C# 4.0, die DLR, das <code>dynamic</code> keyword oder Duck Typing verloren wurde. Zumindest ein Ausblick und ein kurzer Rundflug wäre schön gewesen.</p>
<p>Fazit: Eine Mischung aus &#8220;Basics Workshop&#8221;, Human FxCop und OpenSpace Talk &#8211; locker, bekömmlich, bekannt.</p>
<p>Soviel zum ersten Tag. Mal sehen, was der zweite bringt&#8230; :-)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/technical-summit-08-teil-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Technical Summit, wa?</title>
		<link>http://www.gmbsg.com/technical-summit-wa/</link>
		<comments>http://www.gmbsg.com/technical-summit-wa/#comments</comments>
		<pubDate>Thu, 20 Nov 2008 08:05:03 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Azure]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Multithreading]]></category>
		<category><![CDATA[Parallelisierung]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Software-Entwicklung]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/stories/?p=215</guid>
		<description><![CDATA[So, nun bin ich Berlin bei der Techincal Summit 08 angekommen. Regnerisch, trüb und kalt. Gerade das richtige Wetter, um sich auf der ICC Berlin ein paar Neuigkeiten über Microsofts Technologie-Zukunft anzuhören. Die aktuellen Themen sind dabei Windows Azure, der ...]]></description>
			<content:encoded><![CDATA[<p>So, nun bin ich Berlin bei der <a href="http://www.technical-summit.de">Techincal Summit 08</a> angekommen. Regnerisch, trüb und kalt. Gerade das richtige Wetter, um sich auf der ICC Berlin ein paar Neuigkeiten über Microsofts Technologie-Zukunft anzuhören. Die aktuellen Themen sind dabei <a href="http://www.microsoft.com/azure/windowsazure.mspx">Windows Azure</a>, der Schritt von Microsoft in Richtung Cloud Computing, <a href="http://www.microsoft.com/soa/products/oslo.aspx">Microsoft Oslo</a>, der neue Mix aus MDA, MDD, SOA sowie weitere Nettigkeiten wie Entwicklung auf Multi-Core-Systemen, die <a href="http://msdn.microsoft.com/en-us/concurrency/default.aspx">Parallel Extensions für .NET</a>, ASP.NET MVC / AJAX und Einblicke in .NET 4.0 &#038; Visual Studio 2010.</p>
<p>Meine Session-Auswahl für den ersten Tag:</p>
<ul>
<li>Bringing out the best in Multicore Systems, <i>Steve Teixeira</i></li>
<li>AJAX-Live im Services Zeitalter, <i>Holger Schwichtenberg</i></li>
<li>Software-Entwicklung mit Windows Azure, <i>Dariusz Parys</i></li>
<li>Parallel Extensions für Microsoft .NET, <i>Bernd Marquardt</i></li>
</ul>
<p>Mal sehen, welche Erkenntnisse bis zum Abend gewonnen werden können.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/technical-summit-wa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WCF Performance &#8211; WCF vs. ASMX vs. WSE vs. ES vs. Remoting</title>
		<link>http://www.gmbsg.com/wcf-performance-wcf-vs-asmx-vs-wse-vs-es-vs-remoting/</link>
		<comments>http://www.gmbsg.com/wcf-performance-wcf-vs-asmx-vs-wse-vs-es-vs-remoting/#comments</comments>
		<pubDate>Sat, 08 Dec 2007 13:50:17 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[3.5]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Remoting]]></category>
		<category><![CDATA[WCF]]></category>
		<category><![CDATA[Web Service]]></category>

		<guid isPermaLink="false">http://www.gmbsg.com/stories/?p=48</guid>
		<description><![CDATA[Wer sich schon länger mit verteilten Anwendungen und Web Services mit dem .NET Framework auseinandergesetzt hat, der wird wissen, dass der Performancezuwachs von .NET 1.1 auf .NET 2.0 schon massiv war. Mit der WCF wird es noch performanter, wie der ...]]></description>
			<content:encoded><![CDATA[<p>Wer sich schon länger mit verteilten Anwendungen und Web Services mit dem .NET Framework auseinandergesetzt hat, der wird wissen, dass der Performancezuwachs von .NET 1.1 auf .NET 2.0 schon massiv war. Mit der WCF wird es noch performanter, wie der <a href="http://msdn2.microsoft.com/en-us/library/bb310550.aspx">Performance-Vergleich</a> von Microsoft zeigt. </p>
<p>Dies deckt sich zum großen Teil auch mit den Erfahrungen, die ich bis Dato machen konnte. Schade finde ich es, dass der Performance-Vergleich z.B. nicht auf die einzelnen Bindings der WCF eingeht &#8211; aber der Artikel will ja primär die neue Technologie mit der alten vergleichen. Ich für meinen Teil durfte feststellen, dass für HTTP das BasicHttpBinding das schnellste ist. Wen wundert&#8217;s, es ist auch das einfachste.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gmbsg.com/wcf-performance-wcf-vs-asmx-vs-wse-vs-es-vs-remoting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
